[Javascript] Object.is() vs ===

Object.is

console.log(Object.is(2, 2)); // true
console.log(Object.is({}, {})); // false

Strict Equality: a === b

console.log(2 === 2); // true
console.log({} === {}); // false

So what’s the difference between Object.is and ===?

 

In almost all the cases, they are the same.

 

But...

 

there are two rare cases where the behavior of === is different.

  1. NaN === NaN is false, although they are the same value.
  2. -0 === 0 and 0 === -0 are true, although they are different values.

 

First Special Case: NaN

let width = 0 / 0; // NaN
let height = width * 2; // NaN
console.log(width === height); // false

Remember that NaN === NaN is always false

However, NaN is the same value as NaN:

console.log(Object.is(width, height)); // true

 

The reason for NaN === NaN being false is largely historical, so I suggest accepting it as a fact of life. You might run into this if you try to write some code that checks a value for being NaN (for example, to print a warning).

function resizeImage(size) {
  if (size === NaN) {
    // This will never get logged: the check is always false!
    console.log('Something is wrong.');
  }
  // ...
}

 

Second Special Case: -0

Both 0 === -0 and -0 === 0 are always true:

let width = 0; // 0
let height = -width; // -0
console.log(width === height); // true

However, 0 is a different value from -0:

console.log(Object.is(width, height)); // false

 

[From Just Javascript]

 

posted @   Zhentiw  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-08-19 [Machine Learning] Octave Vectorization
2020-08-19 [CSS] Use CSS Grid to create an asymmetric promo grid
2020-08-19 [Machine Learning] Octave Control Statements, for while if
2020-08-19 [Machine Learning] Octave Plotting Data
2019-08-19 [Dart] final vs const
2015-08-19 [rxjs] Async, handle data over time
2015-08-19 [rxjs] Creating An Observable with RxJS
点击右上角即可分享
微信分享提示