JavaScript中 0==null为何是false

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中 0==null为何是false相关的知识,希望对你有一定的参考价值。

“123”在在算式中能隐形转换为123,所以123==“123”表现为真(true);
true在在算式中能隐形转换为1,所以1==true表现为真(true);
而null在算式中能隐形转换为0,但0==null却表现为假(false),
这是怎么回事,为何0==null表现为false?

null代表的是对象 用typeof 运算符可以检测出来null的结果为Object类型值,null只不过在隐式转换的时候被转换成0来计算而已,但是null实际代表的是一个空对象的指针,而且undefined是由 null派生出来的, 所以二者==是真的但是===就是假的 参考技术A 1、== 相等运算符,同类型比较时,等同于 === ,比如 1==1.0 等同 1 === 1.0
2、当不同类型比较时,先把类型转换成同一个类型,然后再执行严格相等,比如2 == true,结果是false,这个等同于 2 === Number(true),也就是2 === 1
3、至于你这个 0==null,比较特殊,null、undefined与其他类型的值比较时,结果都为false,除了自身比较是true,比如null == null ,null == undefined ,undefined == undefined,都是true
参考技术B Null是没有值,0是有值的(只不过值为0),所以严格来讲是FALSE也不奇怪追问

null确实是没有值,但为何null能在隐式转换中能转换出0?

追答

这个就属于javascript语言设计问题了,对我们这些使用者来说不用纠结这个,应用时注意这些特殊情况,不要让它影响程序的运行就行了。

追问

在这种逻辑下理解比较符号时,
除了这些之外,还发现一些如:
alert(NaN=="") ->false
alert(undefined==NaN); ->false
alert(undefined==undefined); ->true
等等
不知道这个对比符号该如何理解?

追答

NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值,来指示其不是数字值。NaN 与其他数值进行比较的结果总是不相等的,包括它自身在内。因此,不能与 Number.NaN 比较来检测一个值是不是数字,而只能调用 isNaN() 来比较。
undefined 属性用于存放 JavaScript 的 undefined 值。只能用 === 运算来测试某个值是否是未定义的,因为 == 运算符认为 undefined 值等价于 null。null 表示无值,而 undefined 表示一个未声明的变量,或已声明但没有赋值的变量,或一个并不存在的对象属性。
W3School的解释及示例如下:
NaN:http://www.w3school.com.cn/jsref/jsref_nan_number.asp
undefined:http://www.w3school.com.cn/jsref/jsref_undefined.asp
你得注意JavaScript本身的语言特点以及相应的规范,不能自以为是。

追问

本人小白,刚入门JavaScript,在麦子学院看到那些逻辑漏洞百出的视频之后,想在其他地方了解这些比较符号,但一直找不到这些符号的理解方法,请问你是怎么记和理解这些比较符号的?

参考技术C 0肯定跟null不一样啊,0转换为数值,是有值的,只不过值为0,而null是空,0和空可不一样。追问

按你逻辑来说,true也不是一个值,但为何true==1会表现为真呢

追答

因为1转换成布尔类型就是true啊,你再试0==false 返回也是true

追问

要是这样的话,我null转换成布尔类型是false,0转换成布尔类型也是false,那为什么他们对比为false呢?

追答

那你不能这么比较啊,String a="abc";String b ="abc";但是a就是不等于b。分配的内存就不一样。

追问

那我换种说法,undefined==null返回true,这两个应该都不能互相转换吧?为何会是true呢

追答

如果你要严格对比,就用===

javascript JavaScript中对象的深层副本

let copiedObject = JSON.parse(JSON.stringify(originalObject));
let foo = {
  message: "foo message",
  nested: {
    one: 1,
  }
};

let bar = JSON.parse(JSON.stringify(foo));

bar.message = 'bar message';
bar.nested.one = 3;

console.log(`foo.message: `, foo.message);
console.log(`foo.nested.one: `, foo.nested.one);

console.log(`bar.message: `, bar.message);
console.log(`bar.nested.one: `, bar.nested.one);

以上是关于JavaScript中 0==null为何是false的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript数组去重(转载)

NaN 在 Javascript 中总是一个虚假的值吗?

ConcurrentHashMap为何不支持null键和null值

javascript如何设置null输入等于0

javascript中判断变量时变量值为 0 的特殊情况

jquery插件datatable为何不显示数据?