JavaScript 中的判等

MDN:JavaScript 中的相等性判断

现代 Javascript 教程:类型转换

严格相等(===)

全等操作,不会做任何的类型转换

  • 非 Number 类型:类型相等,值相等,则这两个被比较的值相等

  • Number 类型:都不是 NaN,并且数值相同,则这两个被比较的值相等

    • +0 等于 -0

    • NaN 不等于 NaN

非严格相等(==)

  • 比较前将两个被比较的值转换为相同类型,最终的比较方式等同于全等操作符 === 的比较方式

  • 当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小

    number 类型转换规则:

    变成……
    undefinedNaN
    null0
    true 和 false1 and 0
    string去掉首尾空格后的纯数字字符串中含有的数字。如果剩余字符串为空,则转换结果为 0。否则,将会从剩余字符串中“读取”数字。当类型转换出现 error 时返回 NaN
    alert( Number("   123   ") ); // 123
    alert( Number("123z") );      // NaN(从字符串“读取”数字,读到 "z" 时出现错误)
    alert( Number(true) );        // 1
    alert( Number(false) );       // 0

同值相等(Object.is)

Object.is() 方法判断两个值是否为同一个值,不做类型转换,如果满足以下任意条件则两个值相等:

  • 都是 undefined

  • 都是 null

  • 都是 true 或都是 false

  • 都是相同长度、相同字符、按相同顺序排列的字符串

  • 都是相同对象(意味着都是同一个对象的值引用)

  • 都是数字且(+0 不等于 -0;NaN 等于 NaN

    • 都是 +0

    • 都是 -0

    • 都是 NaN

    • 都是同一个值,非零且都不是 NaN

// Case 1: Evaluation result is the same as using ===
Object.is(25, 25);                // true
Object.is('foo', 'foo');          // true
Object.is('foo', 'bar');          // false
Object.is(null, null);            // true
Object.is(undefined, undefined);  // true
Object.is(window, window);        // true
Object.is([], []);                // false
var foo = { a: 1 };
var bar = { a: 1 };
Object.is(foo, foo);              // true
Object.is(foo, bar);              // false
​
// Case 2: Signed zero
Object.is(0, -0);                 // false
Object.is(+0, -0);                // false
Object.is(-0, -0);                // true
Object.is(0n, -0n);               // true BigInt类型
​
// Case 3: NaN
Object.is(NaN, 0/0);              // true
Object.is(NaN, Number.NaN)        // true

零值相等

与同值相等类似,不过会认为 +0 与 -0 相等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值