• 316

对于以下现象,有没有一种通用的判断规则?

我太渴望一种普遍适用的准则解释这一切:

console.log(NaN == NaN);
//false

这个好理解:NaN(not a number),不是一个数字,还可以是很多其它东西,所以不相等

console.log('' == '');
//true

这个也还好理解:空字符等于 空字符,如果不相等,它还能咋地?上天不成?

但下面这个就有点逆天了

console.log([] == []);
//false

空数组不等于空数组,你是想咋地?好像真的上天了,既然如此,我也没辙

曾经还以为,空数组boolean值是false,但实际是true,这个还能接受:数组是objectobjectboolean值都是true,只有nullboolean值是false

console.log(!![]);
//true

后记: 虽然这些知识都比较小众,但是却决定了逻辑判断,选择了程序的走向,所以还是弄清楚为好。这么多东西肯定不可能全凭记忆,我太渴望一种普遍使用的准则来判断(准则肯定是有的,想想设计者的初衷),我不要:试验、根据结果作总结、推翻总结、再试验、再总结、再推翻总结、、、,这种大浪淘沙的过程太让人崩溃了。

静候您的指教:、、、

阅读 1.5k
评论
    7 个回答
    • 2.2k

    算是JS基本数据类型吧 你真的理解了就不会判断错
    ES5 基本数据类型:null, undefined, NaN, string, number, boolean, object
    当处理到逻辑判断的时候,通常都是将其他数据转成其对应的boolean值。
    相当于是 Boolean(value)的结果。
    这种情况只需简单判断:1.有没有值 2.值相不相等
    Boolean(null), Boolean(undefined), Boolean(NaN)
    这三个结果都是false,可以理解三者语义上表达就是没有值(根本就没有值,应该有值但是没有,不是个数字没法有值)。
    Boolean('1'), Boolean(1), Boolean([]), Boolean({})
    这几个结果都是true,因为其都是存在的值,因为他们都有各自的内存地址。
    至于[] == [], {} == {}
    是因为他们的内存地址不同,虽然两者看起来值一样,但是完全不一样
    就好比耐克生成的鞋和莆田生产的鞋,外观一模一样,但是产地完全不同类似。
    这类问题其实就是JS的基础,还要自己深入去理解,多多学习。

      相似问题
      推荐文章