从包名就可看出三个module的功能,分别是判断正数、0和负数。
- is-positive
代码只有一行:
module.exports = function (n) {
return toString.call(n) === '[object Number]' && n > 0;
};
非常简练,两个动作:1、首先判断是不是Number类型 2、判断是否大于0
- is-negative
不用多说,和is-positive一个原理。 - positive-zero
如果让我写,估计就这么写了:
module.exports = x => x === 0;
看到别人是这样的:
'use strict';
module.exports = x => Object.is(x, 0);
感觉效果差不多,但既然用到了Object.is()方法,就去查了一下,发现和===还是有区别的,主要如下:
- +0不等于-0
- NaN等于自身
举例:
Object.is(0, -0); // false
Object.is(+0, -0); // false
Object.is(+0, 0); // true
Object.is(-0, -0); // true
+0 === -0; //true
Object.is(NaN, NaN); // true
Object.is(NaN, 0/0); // true
NaN === NaN; //false
所以用这个module的时候要小心-0的情况,是会返回false的。