Quantcast
Channel: w3cplus
Viewing all articles
Browse latest Browse all 1557

《献给你,我深爱的ECMAScript》之Number篇

$
0
0

本文主要说说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


Viewing all articles
Browse latest Browse all 1557

Trending Articles