A T*_*A T 6 javascript json javascript-engine object-equality to-json
为方便起见,我编写了一个简单的toJSON原型,用于处理我知道安全的JSON:
String.prototype.toJSON = function () {
return JSON.parse(this.valueOf());
};
Run Code Online (Sandbox Code Playgroud)
我在测试我的网络服务时使用它.不幸的是,即使这个简单的测试
var v0 = '{"echo":"hello_world"}'.toJSON(), v1 = {"echo": "hello_world"};
Run Code Online (Sandbox Code Playgroud)
它失败:
console.log(v0 == v1); // false
console.log(v0 === v1); // false
console.log(v0.echo == v1.echo); // true
console.log(v0.echo === v1.echo); // true
Run Code Online (Sandbox Code Playgroud)
我不知道导致这个问题的JavaScript是什么?
JavaScript 中的对象,就像除了原语(int、string、Boolean)之外的所有其他对象一样,都是引用。
拥有 2 个不同的重复对象,意味着拥有 2 个指向炒作中不同位置的不同引用。
您可以实现如此简单的东西,基本上迭代对象的所有原始属性,并将它们一一比较:
Object.prototype.equals = function(x)
{
for(p in this)
{
switch(typeof(this[p]))
{
case 'object':
if (!this[p].equals(x[p])) { return false }; break;
case 'function':
if (typeof(x[p])=='undefined' || (p != 'equals' && this[p].toString() != x[p].toString())) { return false; }; break;
default:
if (this[p] != x[p]) { return false; }
}
}
for(p in x)
{
if(typeof(this[p])=='undefined') {return false;}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)