From 2699a6e2a8a520ade7a35a031c1ccdcbc179be11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E4=B8=96=E5=BC=BA?= Date: Mon, 24 Apr 2023 00:23:24 +0800 Subject: [PATCH] fix: isPlainObject incorrectly identifies objects wrapped in a Proxy object in Safari 10 (#1378) --- packages/shared/src/utils.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/utils.ts b/packages/shared/src/utils.ts index 9aff9aa7e..3772c69de 100644 --- a/packages/shared/src/utils.ts +++ b/packages/shared/src/utils.ts @@ -151,8 +151,11 @@ export const objectToString = Object.prototype.toString export const toTypeString = (value: unknown): string => objectToString.call(value) -export const isPlainObject = (val: unknown): val is object => - toTypeString(val) === '[object Object]' +export const isPlainObject = (val: unknown): val is object => { + if (!isObject(val)) return false + const proto = Object.getPrototypeOf(val) + return proto === null || proto.constructor === Object +} // for converting list and named values to displayed strings. export const toDisplayString = (val: unknown): string => {