我遇到了以下意外结果(最新的Chrome,FF):
var o = {foo: "bar"};
alert(Object.is(o, {foo: "bar"})); //false
var map = new Map();
map.set(o, 1);
var o2 = {foo: "bar"};
alert(map.get(o2)); //undefined
由于此类行为,我在从Google地图检索值时遇到问题。没有严重的性能损失可以解决这个问题吗?
由于
答案 0 :(得分:0)
给出Question的示例对象,您可以使用JSON.stringify()
来比较对象的JSON
格式表示。
请注意,该方法不应用作一般解决方案。
var o = {foo: "bar"};
console.log(JSON.stringify(o) === JSON.stringify({foo: "bar"}));
答案 1 :(得分:0)
var map = new Map();
var o = {foo: "bar"};
map.set(o, "val");
//---->
var map = {};
var k = JSON.stringify({foo: "bar"});
map[k] = "val";
答案 2 :(得分:0)
var obj = { key: 'val' };
在上述语句中,因为obj
将存储的实际值不是对象本身,而是对象引用,Object.is
和Map.set/get
函数甚至===
运算符比较对象引用而不是值。
所以obj === { key: 'val' }
和Object.is(o, { key: 'val' })
绝对是错误的;