gpt4 book ai didi

javascript - 如果属性未定义,则比较 2 个对象

转载 作者:行者123 更新时间:2023-11-30 15:52:23 25 4
gpt4 key购买 nike

"use strict";
let obj1 = {
key: undefined
};

let obj2 = {
key: Symbol('')
};

// THIS SHOULD RETURN false
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true

我读过 the doc ,他们说:还有另一种方法可以完全通过使用 the replacer parameter 来比较 2 个对象。 .就像:

let replacer = function (key, value) {
if (value === undefined) {
// do stuff...
} else if (value['__proto__'].constructor.name === 'Symbol') {
// do stuff...
} else {
// do stuff...
}

return value;
};

我的问题:是否有另一种方法比我刚才提到的使用 replacer 更快?我不想用那种方式处理很多事情。

例如:如果我有 20 个函数,例如:Symbol1()Symbol2()Symbol3()... Symbol20(),我会多次重复使用 if-else 语句。

最佳答案

首先,只看documentation :

Description
To create a new primitive symbol, you write Symbol() with an optional string as its description:

var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");

The above code creates three new symbols. Note that Symbol("foo") does not coerce the string "foo" into a symbol. It creates a new symbol each time:

Symbols and JSON.stringify()

Symbol-keyed properties will be completely ignored when using JSON.stringify():

JSON.stringify({[Symbol("foo")]: "foo"});                 
// '{}'

与传统对象不同,您的 Symbol('AnyTextHere') 不会返回任何文本,因此 JSON.stringify 可以将其转换为一个。没有返回任何内容,因此 JSON.Stringify 在这两种情况下都返回空字符串,因此您的答案每次都是 true


编辑

关于您的问题Symbol() 每次都会返回一个新的符号,因此即使您传递相同的参数,也不会出现两个相同的符号.

所以我认为没有必要比较整个对象,只需将键与 Symbol()

"use strict";
let obj1 = {
key: undefined
};

let obj2 = {
key: Symbol('')
};

let obj3 = {
key: Symbol('')
};

// THIS SHOULD RETURN false
console.log(obj1.key === obj2.key);
// false because Symbol() doesn't match undefined

console.log(obj2.key === obj2.key);
// true because obj2.key is being compared with self

console.log(obj2.key === obj3.key);
// false - NOTE that although the structure of obj2 and obj3 are same (COPIED AND PASTED)
// but since NO two Symbol() are same, and so the result is false

关于javascript - 如果属性未定义,则比较 2 个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com