JavaScript 中易混淆概念

Object.is vs ===

Object.is 和 ===(严格等于运算符)都用于比较两个值是否相等,但它们在某些特殊情况下的行为有细微差别。

===

  • 不会进行类型转换,如果两个值的类型不同,立即返回 false。

  • 对于数值来说,NaN 不等于自身。

  • +0 和 -0 被认为是相等的。

Object.is

  • 和 === 很相似,也不会进行类型转换。

  • Object.is 认为 NaN 等于自身。

  • +0 和 -0 被认为是不相等的。

使用场景

 通常情况下,建议使用 ===,因为它的速度更快,也是JavaScript中比较常见的比较方式。 但是在以下特定场景中,您可能会选择使用 Object.is:

  • 当您需要判断一个值是否确实是 NaN 时(因为 NaN === NaN 的结果是 false,而 Object.is(NaN, NaN) 的结果是 true)。

  • 当您认为 +0 和 -0 应该是不相等的时候。

    console.log(Object.is(NaN, NaN)); // 输出:true
    console.log(NaN === NaN); // 输出:false
    
    console.log(Object.is(+0, -0)); // 输出:false
    console.log(+0 === -0); // 输出:true

for...in vs for...of

for...in

  • for...in 循环用于遍历一个对象的所有可枚举属性,包括继承的可枚举属性。

  • 它遍历的是对象的键(key),不仅仅是数组,也包括其他类型的对象。

  • for...in 更适合遍历对象,不推荐用来遍历数组,因为它可能会得到意外的结果,如遍历到原型链上的属性或方法。

    const object = { a: 1, b: 2, c: 3 };
    for (const property in object) {
      console.log(property); // 输出 'a', 'b', 'c'
    }

for...of

  • for...of 循环用于遍历可迭代对象的元素,如数组、字符串、Map、Set等。

  • 它直接遍历的是对象的值(value),提供了一种简洁的方法来迭代这些可迭代对象的元素。

  • for...of 不会遍历对象的属性,也不会遍历原型链上的属性。

    const array = [1, 2, 3];
    for (const value of array) {
      console.log(value); // 输出 1, 2, 3
    }

使用场景

  • 当你需要遍历一个对象的属性时,使用 for...in。

  • 当你需要遍历一个数组或其他可迭代对象的元素时,使用 for...of。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值