本文主要说说ECMAScript6 Number中新引入的几个api:
先来一个「题外问题」:请简短地说说你认识的NaN?
思考了片刻,我先来说一下我的一些认知:
1. ECMAScript 1引入的
2. 全局对象的属性
3. 在高级浏览器是只读属性
4. 与任何值都不相等,包括自己
那如何判定参数是否是NaN?
有的同学应该会想到 isNaN
但是请看下面的代码:
isNaN(1); //false isNaN("本内容来自w3cplus"); //true isNaN("我是NaN Family,选我选我~"); //true 种了阿妹的毒 isNaN(NaN); //true isNaN({}); //true isNaN(undefined); //true
很多同学从上面的代码中也应该知道,全局的这个isNaN其实还有一些"副作用":
比如对参数为{}和undefined的也会返回true。 那么咋搞呢?
1. Number.isNaN
语法:
Number.isNaN(source);
我们再来看一下下面的示例:
Number.isNaN({}); //false Number.isNaN(undefined); //false Number.isNaN("本内容来自w3cplus"); //false Number.isNaN(NaN); //true Number.isNaN(0/0); //true
来自官方wiki的一个兼容版本:
//给一些低级浏览器 function isNaNfn(source){ return typeof source === 'number'&& isNaN(source); }
2. Number.isFinite
看到isFinite,应该有同学也会想起那个全局的isFinite,其实他们功能上都是判定指定参数是否是有限数值,那他们有啥区别呢?
我们来看一下示例代码:
isFinite(1); //true isFinite("1"); //true Number.isFinite(1); //true Number.isFinite("1"); //false
很直观地看出,isFinite会对参数进行“类型转换”,但是Number.isFinite不具备这种功能
3. Number.isInteger
这个函数可以直接来判定参数是否是整数,非常直观&方便
代码示例:
Number.isInteger(0); //true Number.isInteger("10"); //false Number.isInteger(0.1); //false Number.isInteger(NaN); //false Number.isInteger("a"); //false
说明:该方法也不会自动进行参数类型转换~
顺便送上一个官方wiki的解决方案:
//2的52+1次方是多少? function isInteger(source){ return typeof source === 'number'&& isFinite(source) && source > -9007199254740992 && source < 9007199254740992 && Math.floor(source) === source; }
内容参考:
如需转载,烦请注明出处:http://www.w3cplus.com/js/ecmascript-lesson-4.html