【发布时间】:2013-07-10 13:18:22
【问题描述】:
== 和=== 的区别在于前者只检查值(1 == "1" 将返回true),后者是否检查值并额外检查类型(1 === "1" 将返回false,因为@987654326 @ 不是字符串)。
比较对象意味着比较对象引用(对象变量保存它们引用的对象的内部地址,并且正在比较这些地址)。如果两个对象具有完全相同的键和值、函数等,但它们是独立的对象,== 将返回 false,因此 === 也将返回 false。
问题是:如果我使用== 或=== 比较运算符关于JavaScript 对象 有什么不同吗? PS如果我在任何地方错了,请纠正我并解释(我会接受它作为问题答案)
编辑:这不是关于 javascript 原语,所以比较对象和原语是题外话。
【问题讨论】:
-
@taylorc93 我只问对象,而不是所有类型(包括原语)。
-
还意识到 === 也有文档用途。使用 === 如果重要的是表明它是严格相等的,而不仅仅是计算为相等
-
这两种操作符的区别比这更复杂。了解更多关于它们,你会得到你想要的答案。
-
@tkoomzaaskz:使用了两种算法。
===使用的严格等式比较算法和==使用的抽象等式比较算法。它们都从测试两个操作数的内部 Type(与typeof略有不同)开始。当类型匹配时,两种算法的下一步是相同的。当类型不匹配时,Strict 简单地返回false,但 Abstract 开始一个将操作数强制为原始类型并递归调用相同算法的过程。直到操作数被强制匹配类型为止。
标签: javascript object comparison