我知道null
是一个没有属性或函数的对象。
但是,我困惑的是为什么console.log(null == false);
和console.log(null == true);
都返回false。
null
和boolean
之间的转换规则是什么?
我知道null
是一个没有属性或函数的对象。
但是,我困惑的是为什么console.log(null == false);
和console.log(null == true);
都返回false。
null
和boolean
之间的转换规则是什么?
x == y
中,Type(x)
或 Type(y)
是布尔类型时,抽象相等比较算法 要求将布尔值通过 ToNumber
强制转换为数字,将 true
转换为 1,将 false
转换为 +0
。true == something
或 something == true
的比较都会得到 1 == something
或 something == 1
的结果(对于 false
,用 +0
和 false
替代 1
和 true
进行比较)。
null 类型 不等于 1 或 +0(事实上,在 抽象相等比较算法 中,null 只能与 undefined
进行比较)。null
强制转换为数字,则其会被强制转换为 +0
,因此 +null == false
的结果实际上是 true
。isNaN(null)
等于 false
而 Number(null)
等于 0
,为什么 null 可以强制转换为 undefined
而不是 0
? - iatboynull
和 undefined
是等价的,因为它们是 JavaScript 中唯一不能处理任何属性访问的两个元素。(0).toString() === "0"
, 但是 (null).anything
的结果是 TypeError
。 - Sean VieiraToNumber
是 ECMAScript 规范中描述的一个操作,而不是您可以调用的函数(实际上,它是 JS 引擎必须具备的例程的描述,而不是 JS 引擎必须通过函数向语言公开的内容)。 - Sean Vieira在当前讨论中,需要补充的是null >= false
会返回true
。
我认为这是因为被解释为!(null < false)
。
The value null is a literal (not a property of the global object like undefined can be). In APIs, null is often retrieved in place where an object can be expected but no object is relevant. When checking for null or undefined beware of the differences between equality (==) and identity (===) operators (type-conversion is performed with the former).
// foo does not exist, it is not defined and has never been initialized: > foo "ReferenceError: foo is not defined" // foo is known to exist now but it has no type or value: > var foo = null; foo "null"
Difference between null and undefined
typeof null // object (bug in ECMAScript, should be null) typeof undefined // undefined null === undefined // false null == undefined // true
null
是 JavaScript 中的一个字面量,表示“空”或“未定义”的值。它是 JavaScript 的原始值之一,既不等于布尔值 true
也不等于布尔值 false
,因为它的值是未定义的。尽管它不是 false
,但 null
的值更倾向于 false
。这就是为什么它被称为“假值”运算符,当变量 var
等于 null
时,if (var) { }
块不会被执行。
var
不应该被用作变量名,因为它是一个保留字。示例中应该使用someVar
而不是var
。 - SherylHohmanundefined
的值混淆在一起。更好地表达为“..其值未知”。 - SherylHohman