【发布时间】:2019-05-09 11:55:15
【问题描述】:
在下面的代码中 sn-p a==b 返回 true,即它们指向相同的内存位置,因此它们将具有相同的值。 我想知道,JS引擎如何知道a===b是假的。 当两种不同的类型指向同一个内存位置时,类型信息如何确定?
编辑 1: 从 cmets 看来我的问题可能不清楚。我完全理解 == 和 === 在 JS 语言使用方面的区别。我更感兴趣的是了解 JS 引擎如何为 null 和 undefined 保存类型信息。根据我的理解,变量 a 和 b 指向相同的内存位置,这就是我得到 a==b 的原因,如果这种理解有误,请纠正我。
编辑 2: 好的,我将以另一种方式提出我的问题。 typeof 运算符如何知道 a 是对象而 b 是未定义的,尽管有 a==b。
var a = null;
var b = undefined;
console.log(a==b);
console.log(a===b);
console.log(typeof a);
console.log(typeof b);
【问题讨论】:
-
从什么时候严格相等
===与内存位置有关? -
==运算符执行类型强制,所以不,它们不必指向同一个内存。 -
@Mohit
==返回 true 的事实确实 NOT 意味着它们在同一内存上。==返回 true 的原因是因为规范是这样说的。 “If x is null and y is undefined, return true.”。它与内存无关。 -
"根据我的理解,运行时的 1 和 "1" 类型仅由 JS 中 string 和 int 的内存分配大小的差异决定" @Mohit 我是不知道是什么给了你这样的印象。引擎如何实现它取决于特定的引擎。 (不是每个浏览器都使用相同的。)我相当有信心在内部类型只是存储在变量的值旁边。对于
1和"1",再次说明它们对于==应该是正确的:“如果 Type(x) 是 Number 并且 Type(y) 是 String,则返回比较结果 x == !ToNumber(y)"
标签: javascript