JS引擎如何区分null和undefined

时间:2018-12-07 17:22:09

标签: javascript

在下面的代码片段中,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);

2 个答案:

答案 0 :(得分:0)

在问题中添加的代码段中:

var a = null; var b = undefined; console.log(a==b); console.log(a===b);

console.log(a==b)返回true,因为==使用类型强制来检查两个变量的相等性。因此,nullundefined被认为是平等的。

console.log(a===b)返回false,因为===不使用类型强制。对于===nullundefined不是同一类型,并且当操作数不是同一类型时,它并不关心检查深度相等性。

这与内存位置无关。

答案 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”给出了变量的类型。