相关疑难解决方法(0)

JavaScript中的对象比较

在JavaScript中比较对象的最佳方法是什么?

例:

var user1 = {name : "nerd", org: "dev"};
var user2 = {name : "nerd", org: "dev"};
var eq = user1 == user2;
alert(eq); // gives false
Run Code Online (Sandbox Code Playgroud)

我知道如果它们引用完全相同的对象,则两个对象是相等的,但有没有办法检查它们是否具有相同的属性值?

以下方式对我有用,但这是唯一的可能性吗?

var eq = Object.toJSON(user1) == Object.toJSON(user2);
alert(eq); // gives true
Run Code Online (Sandbox Code Playgroud)

javascript comparison object object-comparison

1021
推荐指数
7
解决办法
85万
查看次数

如何确定两个JavaScript对象的相等性?

严格的相等运算符将告诉您两个对象类型是否相等.但是,有没有办法判断两个对象是否相等,就像 Java中的哈希码一样

Stack Overflow问题JavaScript中是否有任何类型的hashCode函数?类似于这个问题,但需要更多的学术答案.上面的场景说明了为什么需要有一个,我想知道是否有任何等效的解决方案.

javascript equals object hashcode

599
推荐指数
23
解决办法
45万
查看次数

Chrome会保留每个对象的构造函数吗?

在Chrome的JavaScript控制台中:

> function create(proto) {
    function Created() {}
    Created.prototype = proto
    return new Created
  }
undefined

> cc = create()
Created {}

> cc
Created {}
Run Code Online (Sandbox Code Playgroud)

Created是函数私有的create函数; create完成后,没有(我知道)引用Created.然而,Chrome可以随时显示该功能的名称,从它创建的对象开始.

Chrome没有通过遵循"天真"方法实现这一目标:

> cc.constructor
function Object() { [native code] }

> cc.toString()
"object [Object]"
Run Code Online (Sandbox Code Playgroud)

无论如何,我没有constructorproto争论传递给create:

> cc.__proto__.hasOwnProperty("constructor")
false
Run Code Online (Sandbox Code Playgroud)

我猜测的是,Created为了instanceof机制,JavaScript VM仍然存在.有人说instanceof

测试一个对象在其原型链中是否具有构造函数的prototype属性.

但是在我输入的上面的代码中create(),有效地传递undefined了原型; 因此Created甚至没有prototype设置到实际cc.__proto__.如果我们破解create公开Created …

javascript constructor google-chrome google-chrome-devtools

17
推荐指数
2
解决办法
1949
查看次数

JSON对象!= JavaScript对象?

为方便起见,我编写了一个简单的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 json javascript-engine object-equality to-json

6
推荐指数
1
解决办法
176
查看次数

如何从两个JSON对象中仅获取"已更改"的值

这是一个涉及更复杂的比较方式的问题,因此它不是重复的

我创建了一个JqTree,当用户更改其树结构时,应该比较"旧" JSON和"新" JSON结构,并且应该仅显示JSON已更改的值.

例如:

[{"name":"node1","id":1,"is_open":true,"children":
    [
      {"name":"child1","id":2},
      {"name":"child2","id":3}
    ]
}]
Run Code Online (Sandbox Code Playgroud)

例

之后,客户端已经把child1child2

[{"name":"node1","id":1,"is_open":true,"children":
  [
    {"name":"child2","id":3},
    {"name":"child1","id":2}
  ]
}]
Run Code Online (Sandbox Code Playgroud)

例

我只想比较它们并检查哪些值已更改并用a显示它们alert,在这种情况下,它将是:

{"name":"child2","id":3},
{"name":"child1","id":2}

到目前为止,我有这个比较它们的小代码:

JSON.stringify(object1)=== JSON.stringify(object2); //我知道它不太可靠

但我正在寻找能够检查"差异"并从JSON中提取它的东西.

提前致谢.

javascript jquery json

2
推荐指数
1
解决办法
3799
查看次数

在 Javascript 中查找全局变量的最佳方法

我继承了一个项目,看起来有很多变量污染了全局范围,我想找到所有这些。查找用户引入的全局变量的最佳方法是什么?我想排除默认情况下存在的 window 对象上的属性,只过滤到我们的代码引入的属性。是否有工具或 IDE 插件可以让我轻松识别这些?谢谢

javascript scope global global-variables

0
推荐指数
1
解决办法
1318
查看次数