在下面的代码片段中,a == b返回true,即它们指向相同的内存位置,因此它们将具有相同的值。 我想知道,JS引擎如何知道a === b是错误的。 当两种不同类型指向相同的存储位置时,如何确定类型信息?
编辑1:从评论看来,我的问题可能不清楚。我完全理解JS语言中==和===之间的区别。我对了解JS引擎如何将类型信息保存为null和undefined感兴趣。根据我的理解变量a和b指向相同的内存位置,这就是为什么我得到a == b的原因,如果这种理解是错误的,请纠正我。
编辑2:好吧,我将以另一种方式提出我的问题。尽管有a == b,typeof运算符如何知道a是对象,而b是不确定的。
var a = null;
var b = undefined;
console.log(a==b);
console.log(a===b);
console.log(typeof a);
console.log(typeof b);
答案 0 :(得分:0)
在问题中添加的代码段中:
var a = null; var b = undefined;
console.log(a==b);
console.log(a===b);
console.log(a==b)
返回true
,因为==
使用类型强制来检查两个变量的相等性。因此,null
和undefined
被认为是平等的。
console.log(a===b)
返回false,因为===
不使用类型强制。对于===
,null
和undefined
不是同一类型,并且当操作数不是同一类型时,它并不关心检查深度相等性。
这与内存位置无关。
答案 1 :(得分:0)
a = null, b= undefined;
a == b /* only check their values */
a === b /* also check their types + values */
typeof a == typeof b // false
typeof“ variable”给出了变量的类型。