首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果属性未定义,则比较2对象

如果属性未定义,则比较2对象
EN

Stack Overflow用户
提问于 2016-08-24 04:13:35
回答 1查看 82关注 0票数 1

代码语言:javascript
运行
复制
"use strict";
let obj1 = {
    key: undefined
};

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

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

我读过医生,他们说:还有一种方法可以通过使用替换器参数来准确地比较两个类似于这种情况的对象。就像:

代码语言:javascript
运行
复制
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语句。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 04:35:56

首先,只需查看文档

描述 要创建一个新的原语符号,可以使用一个可选字符串作为Symbol()的描述: var sym1 =符号();var sym2 =符号(“foo”);var sym3 =符号(“foo”); 上面的代码创建了三个新符号。注意到符号( "foo“)并不强制字符串”foo“成为符号。每次创建一个新符号:

符号与JSON.stringify() 在使用JSON.stringify()时,符号键控属性将被完全忽略: JSON.stringify({符号(“foo”):“foo”};// '{}‘

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

编辑

在回答您的问题时,Symbol()每次都会返回一个新符号,因此,即使您传递相同的参数,也不会有任何两个符号是相同的。

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

代码语言:javascript
运行
复制
"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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39114311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档