有人可以解释一下这个简单的 null 和 undefined 概念,更具体地说是单双倍和三倍等于,或者你能链接最好的解释 [duplicate]

Can someone explain this simple concept of null and undefined, more specifically single double & triple equals, or can you link the best explanation [duplicate]

提问人: 提问时间:5/10/2021 更新时间:5/10/2021 访问量:1583

问:

在同一运算符中,null 如何等于 undefined 和不等于 undefined。

未定义 == 空

未定义 !== 空

未定义 === 空

未定义 != 空

JavaScript 比较 运算符 undefined

评论

0赞 Yash Maheshwari 5/10/2021
嗨,我认为这回答了你的问题,stackoverflow.com/questions/359494/......
0赞 Felix Kling 5/10/2021
“在同一运算符中,null 如何等于 undefined 和不等于 undefined。”不是吗?但无论如何,也许这会有所帮助:felix-kling.de/js-loose-comparison/#null==undefined
0赞 Yash Maheshwari 5/10/2021
简单地说,只检查值,而检查值和数据类型。这里 undefined 和 null 都表示 0,所以当使用它时是 true,但在使用时是 false,因为 undefined 是 undefined 的类型,null 是对象的类型。==========
1赞 Felix Kling 5/10/2021
@YashMaheshwari:因为......不是很好。tc39.es/ecma262/#sec-ecmascript-language-types-null-typetypeof
1赞 Sebastian Simon 5/11/2021
为什么 null==undefined 在 javascript 中为 true重复

答:

0赞 RANGO 5/10/2021 #1

Undefined 和 null 是空变量。但要理解上面的内容,你必须了解比较运算符。== 是一个可以转换的比较运算符。=== 真正测试它是否相同,而无需进行类型转换。所以 null 实际上与 undefined 相同。当你第一次想到它时,它有点难以理解,但它真的没有那么难。一些例子:

'' == '0'           // false
0 == ''             // true
0 == '0'            // true

false == 'false'    // false
false == '0'        // true

false == undefined  // false
false == null       // false
null == undefined   // true

评论

1赞 Felix Kling 5/10/2021
它们是空的“值”,而不是“变量”。 是一个比较运算符,而不是一个条件运算符(即 )。==... ? ... : ...
0赞 RANGO 5/10/2021
该变量没有值,因此为空
0赞 Felix Kling 5/11/2021
您以某种方式将变量混合在一起。变量是值的容器。null 和 undefined 是值( 也是一个变量,但我们不要深入探讨)。变量唯一真正为空的情况是 。在为其分配值之前,您无法访问它。undefinedlet foo;
0赞 RANGO 5/12/2021
如果写入,则返回 undefined。变量是包含值的容器,如果值为空,则容器不包含任何内容。也许英语对此更具体,但至少在德语中,你说一个变量是空的let foo; console.log(foo);
0赞 Felix Kling 5/13/2021
我想我在想.无论如何,当人们说如果变量包含或 .但那不是你说的。你说“Undefined 和 null 是空变量。“包含 undefined 或 null 的变量为空”和“undefined 和 null 为空变量”之间存在很大差异。console.log(foo); let foo;nullundefined
0赞 Ran Turner 5/10/2021 #2

==在执行实际比较之前将变量值转换为相同的类型(进行类型强制)

===不执行类型强制,仅当所比较的两个变量的值和类型相同时才返回 true。

让我们看一些例子:

console.log(5 == "5"); // no type coercion is being made - hence, the result is true.

console.log(5 === "5"); // type coercion is being made, value is the same but the data types are not (number vs string);

console.log(undefined == null); // should be true because type coercion is not being made and the data values are both falsy!

console.log(undefined !== null); // should be true cause type coercion is being made and the data types are differnt!

console.log(undefined === null); // // should be false cause type coercion is being made and the data types are differnt.


console.log(undefined != null); // should be false cause type coercion is not being made and the data values are both falsy!

评论

0赞 Felix Kling 5/10/2021
这是真的,但在这种情况下没有发生胁迫。该算法只是声明将 和 视为平等。nullundefined
0赞 Suruchi 5/10/2021 #3

请在下面找到我的答案。

“==”在进行比较之前强制变量的类型。 i. 所以 undefined == null 为 true,因为两个变量都强制为 false(因为它们都表示一个空值),并且进行了比较,使它们相等。

!== 进行严格的比较,因此类型不会更改,如果为 undefined,则类型为 “undefined”,如果为 null,则类型为 “object”,这可以使用 typeof 进行验证。

ii. 因此,由于类型不匹配,!== return true 即 undefined !== null。

iii. 同样的方式 === 进行严格的比较,因此未定义的 === null 是假的,因为类型只是不同

iv. 最后,未定义的 != null 是 false,因为 != like == 强制变量的类型为 false,然后进行比较。因此,它们似乎都等于 !=,并且返回 false。