简单地说,我不明白为什么他们的第二个if语句没有为示例返回false (null,null)
function deepEqual(a, b) {
if (a === b) return true;
if (a == null || typeof a != "object" ||
b == null || typeof b != "object")
return false;
var propsInA = 0, propsInB = 0;
for (var prop in a)
propsInA += 1;
for (var prop in b) {
propsInB += 1;
if (!(prop in a) || !deepEqual(a[prop], b[prop]))
return false;
}
return propsInA == propsInB;
}
var obj = {here: {is: "an"}, object: 2};
console.log(deepEqual(obj, obj));
// → true
console.log(deepEqual(obj, {here: 1, object: 2}));
// → false
console.log(deepEqual(obj, {here: {is: "an"}, object: 2}));
// → true发布于 2017-07-06 13:58:42
来自于===的定义。
正如在Mozilla docs中所引用的,这实际上归结为===的definition from Ecma,其中规定用于x === y
... 1.如果类型(X)与类型(Y)不同,则返回false。
... 3.如果Type(x)为Null,则返回true。
..。
如果使用(null, null)调用函数,则:
true null === null∴⇒
发布于 2017-07-06 13:58:50
使用带有null值的ECMA将始终返回true。
因此,当您向函数传递null值时,它将永远不会返回false,因为它总是满足第一个if条件,即a === b和return true;。return语句停止执行,并且永远不会达到第二个if条件。
发布于 2017-07-06 14:00:03
如果您的代码execute返回,则不会执行下一段代码。
https://stackoverflow.com/questions/44940799
复制相似问题