首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >back to back或gates进行对象比较。混乱

back to back或gates进行对象比较。混乱
EN

Stack Overflow用户
提问于 2017-07-06 13:54:58
回答 7查看 56关注 0票数 0

简单地说,我不明白为什么他们的第二个if语句没有为示例返回false (null,null)

代码语言:javascript
复制
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
EN

回答 7

Stack Overflow用户

发布于 2017-07-06 13:58:42

来自于===的定义。

正如在Mozilla docs中所引用的,这实际上归结为===definition from Ecma,其中规定用于x === y

... 1.如果类型(X)与类型(Y)不同,则返回false。

... 3.如果Type(x)为Null,则返回true。

..。

如果使用(null, null)调用函数,则:

  1. 类型(X)和类型(Y)是相同的
  2. 类型(X)为空

true null === null∴⇒

票数 0
EN

Stack Overflow用户

发布于 2017-07-06 13:58:50

使用带有null值的ECMA将始终返回true

因此,当您向函数传递null值时,它将永远不会返回false,因为它总是满足第一个if条件,即a === breturn true;return语句停止执行,并且永远不会达到第二个if条件。

票数 0
EN

Stack Overflow用户

发布于 2017-07-06 14:00:03

如果您的代码execute返回,则不会执行下一段代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44940799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档