我想在对象中添加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

但结果发生了变化。
这里有什么问题?
答案 0 :(得分:5)
在第一种情况下,您为每个对象分配一个新的符号实例
在第二个中,使用原型每个对象共享相同的属性,因此它们是相等的
进行比较,此代码将等于第二种情况(但仅适用于这两个对象):
let _sym = Symbol('sym');
let val = Symbol('_');
let a = {};
a[_sym] = val;
let b = {};
b[_sym] = val;
console.log(a[_sym] === b[_sym]); // true
答案 1 :(得分:0)
例如:
var a = {};
var b = {};
不同的对象
a === b // false
相同的基础原型
a.toString === b.toString // true