Object.is()详解

手机游戏开发者 2024-9-23 01:33:34 55 0 来自 中国
ES5判定两个值是否相称,有两种方法:相称运算符(==)和严格相称运算符(===)。这两种方法都有缺点,前者会自动转换数据范例,后者判定NaN不即是自身,+0 即是 -0
ES6新出了Object.is方法办理这个题目。假如满足以下恣意条件则两个值相称:

  • 都是 undefined
  • 都是 null
  • 都是 true 或都是 false
  • 都是雷同长度、雷同字符、按雷同序次分列的字符串
  • 都是雷同对象(意味着都是同一个对象的值引用)
  • 都是数字且

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

它与与严格相称运算符(===)根本划一,不会举行欺压范例转换,不同之处只有两个:一是+0不即是-0,二是NaN即是自身。
Polyfill
if (!Object.is) {  Object.defineProperty(Object, "is", {    value: function (x, y) {      // SameValue algorithm      if (x === y) {        // 针对+0 不即是 -0的情况        return x !== 0 || 1 / x === 1 / y;      } else {        // 针对NaN的情况        return x !== x && y !== y;      }    }  });}
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 06:08, Processed in 0.171310 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表