为什么在JavaScript中,null == undefined的结果为true?

23 浏览
0 Comments

为什么在JavaScript中,null == undefined的结果为true?

1. 如何检查变量是否为nullundefinednullundefined之间有什么区别?

2. =====之间有什么区别(在谷歌上搜索"==="很困难)?

0
0 Comments

在JavaScript中,为什么(null == undefined)是true?

要完整回答这个问题,可以阅读ECMAScript规范。以下是一个总结:

1. 对于变量x,可以使用以下方法来检查它是不是null或undefined:

- 使用===进行直接比较,例如:x === null

- 使用直接比较或typeof来检查它是不是undefined。出于各种原因,我更喜欢使用typeof x === "undefined"。

- 使用==进行比较,并依赖于稍微晦涩的类型转换规则,这意味着x == null会得到你想要的结果。

2. ==和===之间的基本区别在于,如果操作数的类型不同,===将始终返回false,而==将使用导致一些稍微不直观行为的规则将一个或两个操作数转换为相同的类型。如果操作数的类型相同(例如,都是字符串,如上面的typeof比较),==和===的行为将完全相同。

进一步阅读:

- Angus Croll的《Truth, Equality and JavaScript》

- Andrea Giammarchi的《JavaScript Coercion Demystified》

- comp.lang.javascript FAQs中的《JavaScript Type-Conversion》

以上就是为什么在JavaScript中(null == undefined)为true的原因以及解决方法。

0
0 Comments

为什么在JavaScript中,(null==undefined)是true?

在JavaScript中,我们经常需要检查一个变量是否为null或undefined。为了做到这一点,我们可以使用以下方法:

首先,我们可以使用以下代码来检查变量是否为null:

if (a === null)
// 或者
if (a == null) // 但请注意以下说明

但请注意,后一种方法也将在a为undefined时返回true。

接下来,我们可以使用以下代码来检查变量是否为undefined:

if (typeof a === "undefined")
// 或者
if (a === undefined)
// 或者
if (a == undefined) // 但请注意以下说明

但是,请再次注意,最后一种方法是不明确的;如果a为null,它也会返回true。

然而,实际上,我们通常使用的是通过判断它们是否为“falsey”来检查null和undefined的方式:

if (!a) {
    // `a`是falsey,包括`undefined`和`null`
    // (还有`""`,`0`,`NaN`和[当然]`false`)
}

这是根据规范中的ToBoolean方法定义的。

null和undefined之间的区别是什么?

它们都是通常用于表示某物的缺失的值。undefined是更通用的,它用作变量的默认值,直到为其分配其他值,用作函数在调用时未提供的参数的值,以及在请求对象不存在的属性时的值。但是,它也可以在所有这些情况下被明确地使用。对象没有某个属性和某个属性的值为undefined是有区别的;使用undefined作为参数调用函数与完全不传递该参数是有区别的。

null比undefined稍微具体一些:它是一个空对象引用。当然,JavaScript是弱类型的,但并不是JavaScript与之交互的所有内容都是弱类型的。如果像浏览器中的DOM这样的API需要一个空的对象引用,我们使用null,而不是undefined。同样地,DOM的getElementById操作返回一个对象引用,要么是有效的(如果找到了DOM元素),要么是null(如果没有找到)。

有趣的是(或者不是),它们是它们自己的类型。也就是说,null是Null类型中唯一的值,而undefined是Undefined类型中唯一的值。

"=="和"==="之间的区别是什么?

它们之间的唯一区别在于,"=="会进行类型转换以尝试使值匹配,而"==="不会。例如,"1" == 1是true,因为"1"转换为1。但是"1" === 1是false,因为类型不匹配("1" !== 1是true)。"==="的第一步是"操作数的类型是否相同?",如果答案是否定的,结果就是false。如果类型相同,它就像"=="一样工作。

类型转换使用了相当复杂的规则,可能会产生令人惊讶的结果(例如,"" == 0是true)。

要了解更多信息,请参阅规范中的以下部分:

- Abstract Equality Comparison(==,也称为“loose”相等性)

- Strict Equality Comparison(===)

总结TJ的答案,===表示值和类型都相同。

那我是否也可以使用另一种方式,比如if (a),这是否意味着不为null或undefined?

是的,没错。if (a)表示“如果a为真值”,其中“真值”是指一个非零、非null、非undefined、非false、非空字符串的值。

对于if (a == null),如果a是undefined,它是否会返回true?因此,如果我想检查a是否为null或undefined,仅使用a == null是否安全?

是的。我曾经为此感到困扰,因为它有点误导人,但目前,我认为它已经成为一种“习惯用法”了。

0
0 Comments

在JavaScript中,null和undefined是两个不同的值,但它们之间存在一些微妙的差异。在JavaScript中,undefined是一个从未声明或者从未赋值的变量。例如,如果声明一个变量var a;,那么a的值就是undefined,因为它从未被赋予任何值。但是如果将a赋值为null,那么a的值就是null。在JavaScript中,null是一个对象(可以在JavaScript控制台中尝试typeof null命令来验证),这意味着null也是一个值(事实上,undefined也是一个值)。

这种差异在函数参数中是很有用的。你可能希望设置默认值,并且接受null作为可接受的值。在这种情况下,你可以这样做:

function doSomething(first, second, optional) {

if (typeof optional === "undefined") {

optional = "three";

}

// do something

}

如果省略optional参数,那么doSomething(1, 2)中optional将是字符串"three",但如果传递doSomething(1, 2, null),那么optional将是null。

至于等于==和严格等于===比较符,前者是弱类型比较,而后者还会检查值的类型。这意味着0 == "0"将返回true,而0 === "0"将返回false,因为一个数字不是一个字符串。

你可以使用这些运算符来比较undefined和null。例如:

null === null # => true

undefined === undefined # => true

undefined === null # => false

undefined == null # => true

最后一种情况很有趣,因为它允许你检查一个变量是否是undefined或null,而不是其他任何值:

function test(val) {

return val == null;

}

test(null); # => true

test(undefined); # => true

Kyle Simpson声称typeof null返回"object"是一个bug。

0