javaScript---相等性判断篇(持续优化中)

ES2015中有四种相等算法:(虽然写下来啦,但不知道啥意思)

1.抽象(非严格)相等比较 ( == )
2.严格相等比较 ( === ): 用于 Array.prototype.indexOf, Array.prototype.lastIndexOf, 和 case-matching
3.同值零: 用于 %TypedArray% 和 ArrayBuffer 构造函数、以及Map和Set操作, 并将用于 ES2016/ES7 中的String.prototype.includes
4.同值: 用于所有其他地方

JavaScript提供三种不同的值比较操作:
1.严格相等比较 (也被称作"strict equality", “identity”, “triple equals”),使用 === ,
2.抽象相等比较 (“loose equality”,“double equals”) ,使用 ==
3.以及 Object.is (ECMAScript 2015/ ES6 新特性)

说说===与Object有什么不同

可以理解这两种比较几乎一样只有下面两个不同

xy===Object
+0-0truefalse
NaNNaNfalsetrue

x = Math.round(-21.5); //四舍五入 -20
y = Math.ceil(7.004); // 向上取整 8
z = Math.pow(2, 10); // 平方(基数,指数) 1024
q = Math.sqrt(9); // 平方根 3

Math.atan2
Math.ceil
Math.pow
Math.round

即使传入的参数中没有-0,这些方法的返回值都有可能是-0。例如当用 Math.pow计算-Infinity的任何负奇指数的幂都会得到-0。详情请参见这些方法各自的文档。
Math.floor
Math.max
Math.min
Math.sin
Math.sqrt
Math.tan

当传入参数中有-0时,这些方法也可能返回-0。例如, Math.min(-0, +0) 得出 -0。详情请参见这些方法各自的文档。
~
<<
“>>”

这些操作符内部都使用了ToInt32算法。因为内部32位整数类型只有一个0(没有符号区别),-0的符号在反操作后并不会保留下来。例如Object.is(~~(-0), -0)和Object.is(-0 << 2 >> 2, -0) 都会得到false.
在未考虑0的符号的情况下依赖于Object.is是危险的。当然,如果本意就是区分-0和+0的话,Object.is能按照期望完成工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值