From 71f64acb72d8384ca2f33233208378acf5247d40 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 7 Apr 2023 21:41:32 +0300 Subject: [PATCH 1/2] Replace constructor.name checks with instanceof --- packages/react-devtools-shared/src/utils.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/react-devtools-shared/src/utils.js b/packages/react-devtools-shared/src/utils.js index 58845219d95..1ac9fd0c026 100644 --- a/packages/react-devtools-shared/src/utils.js +++ b/packages/react-devtools-shared/src/utils.js @@ -596,11 +596,7 @@ export function getDataType(data: Object): DataType { return hasOwnProperty.call(data.constructor, 'BYTES_PER_ELEMENT') ? 'typed_array' : 'data_view'; - } else if (data.constructor && data.constructor.name === 'ArrayBuffer') { - // HACK This ArrayBuffer check is gross; is there a better way? - // We could try to create a new DataView with the value. - // If it doesn't error, we know it's an ArrayBuffer, - // but this seems kind of awkward and expensive. + } else if (data instanceof ArrayBuffer) { return 'array_buffer'; } else if (typeof data[Symbol.iterator] === 'function') { const iterator = data[Symbol.iterator](); @@ -610,7 +606,7 @@ export function getDataType(data: Object): DataType { } else { return iterator === data ? 'opaque_iterator' : 'iterator'; } - } else if (data.constructor && data.constructor.name === 'RegExp') { + } else if (data instanceof RegExp) { return 'regexp'; } else { // $FlowFixMe[method-unbinding] From 9706c5eef176d6b1fc9a3d6ebff910561d108cf0 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 8 Apr 2023 01:36:58 +0300 Subject: [PATCH 2/2] Replace instanceof checks with constructor checks --- packages/react-devtools-shared/src/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-devtools-shared/src/utils.js b/packages/react-devtools-shared/src/utils.js index 1ac9fd0c026..eddb53c9291 100644 --- a/packages/react-devtools-shared/src/utils.js +++ b/packages/react-devtools-shared/src/utils.js @@ -596,7 +596,7 @@ export function getDataType(data: Object): DataType { return hasOwnProperty.call(data.constructor, 'BYTES_PER_ELEMENT') ? 'typed_array' : 'data_view'; - } else if (data instanceof ArrayBuffer) { + } else if (data.constructor && data.constructor === ArrayBuffer) { return 'array_buffer'; } else if (typeof data[Symbol.iterator] === 'function') { const iterator = data[Symbol.iterator](); @@ -606,7 +606,7 @@ export function getDataType(data: Object): DataType { } else { return iterator === data ? 'opaque_iterator' : 'iterator'; } - } else if (data instanceof RegExp) { + } else if (data.constructor && data.constructor === RegExp) { return 'regexp'; } else { // $FlowFixMe[method-unbinding]