我想向对象添加 Symbol
属性以进行比较。
方法如下:
let _sym = Symbol('sym');
let a = {};
a[_sym] = Symbol('_');
let b = {};
b[_sym] = Symbol('_');
console.log(a[_sym] === b[_sym]); // false
a
和 b
都是对象。所以,我可以写:
let _sym = Symbol('sym');
Object.prototype[_sym] = Symbol('_');
Object.Equals = function (x, y) {
return x[_sym] === y[_sym];
};
let a = {};
let b = {};
console.log(Object.Equals(a, b)); // true
但是结果改变了。
这里出了什么问题?
最佳答案
在第一种情况下,您为每个对象分配一个新的符号实例
在第二个中,使用原型(prototype)每个对象共享相同的属性,因此它们是相等的
为了比较,此代码将等于第二种情况(但仅适用于这两个对象):
let _sym = Symbol('sym');
let val = Symbol('_');
let a = {};
a[_sym] = val;
let b = {};
b[_sym] = val;
console.log(a[_sym] === b[_sym]); // true
关于javascript - 默认情况下向对象添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755668/