抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

小巷

Love what you do,do what you love.

git
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

/*
* @param x {Object} 对象1
* @param y {Object} 对象2
* @return {Boolean} true 为相等,false 为不等
*/
var deepEqual = function (x, y) {
// 指向同一内存时
if (x === y) {
return true;
}
else if ((typeof x == "object" && x != null) && (typeof y == "object" && y != null)) {
if (Object.keys(x).length != Object.keys(y).length)
return false;

for (var prop in x) {
if (y.hasOwnProperty(prop))
{
if (! deepEqual(x[prop], y[prop]))
return false;
}
else
return false;
}

return true;
}
else
return false;
}

虽然这个简单的实现适用于我们的例子中,有很多情况下,它是不能处理。例如:

  1. 如果该属性值之一本身就是一个对象吗?
  2. 如果属性值中的一个是NaN(在JavaScript中,是不是等于自己唯一的价值?)
  3. 如果一个属性的值为undefined,而另一个对象没有这个属性(因而计算结果为不确定?)

评论