• Javascript中的”==”和”===”


    对于javascript中”==”和”===”的区别我想很多人都应该很清楚的,例子:

    1==true //true

    1===true //false

    我们通常会对两个数据进行判断,在javascript中的”==”会带着一个隐式的强制转换,而”===”就是代表两个数据类型相等,数值也相等。因此,在对混合类型数据进行判断的时候,还是推荐使用”===”。

    那么javascript中这个隐式的转换机制是怎样的呢?除了”null”,”undefined”之外,对于非Date类型的数据,javascript会优先尝试使用valueOf()的方法去判断相等,然后再使用toString()方法,而Date类型正好相反;我们再来看以下的例子:

    null==undefined     //true

    null===undefined    //false

    “null==undefined”这个比较特别,事实上这个结果是true的;但是,它们并不会进行隐式强制转换,包括它们和其他类型数据比较也不会进行隐式强制转换。

    值得一提的是null在运算时候的情况,我们来看一个例子:

    alert(4+null)  

    这样的代码是不会报错的,运行的结果是4,因为null在运算的时候被隐式的转换成了0。因此在比较或者运算的时候要当心javascript的隐式强制类型转换。

    另外再说一个事实:

    var a=NaN; alert(a===a) //false

    是的,NaN在javascript中是唯一不等于自身的数据,有时我们需要判断一个数据是否等于NaN,javascript中也提供了一个方法isNaN(),不过这个方法有一个局限,例:

    alert(isNaN(new Object()));      //true

    alert(isNaN(“aaa”));         //true

    这个就是isNaN()的局限之处,只有当我们确定数据类型是number的时候,才可以用isNaN();

    那么怎么判断一个数据是否是NaN呢,我们可以这样(写法可能有点别扭):

    if(a!==NaN){       }

    javascript中判断一个变量是否等于的时候,我们通常这样写:

    var a=”xxx”;  

    if(a==”xxx”){}

    其实这样写是存在一个隐患的,而且是人为因素造成的,就是当我们写很多行代码的时候我们会不小心的把if(a==”xxx”)写成if(a=”xxx”)这样不但判断失效还改变了a的值,最麻烦的是这样的代码并不会报错,还顺利的执行了,以至于产生意外的结果。有时这样的错误是很难被发现。这里有个避免这样的错误的写法:

    var a=”xxx”;

    if(“xxx”==a){}

    End …

  • 相关阅读:
    当扩展方法和类里定义的方法重名时,会优先调用类里自义的方法
    jquery.uploadify不支持MVC的Authorize
    .NET4中多线程并行方法Parallel.ForEach
    http://twitter.github.com/bootstrap/
    .NET 4.0中使用sqlite
    Extend Html.EditorFor MVC
    Custom Email Attribute在客户端不起作用原因
    使用webpack搭建vue环境
    新浪sae对storage的文档进行读写操作
    jquery+bootstrap插件
  • 原文地址:https://www.cnblogs.com/kerbin/p/5054711.html
Copyright © 2020-2023  润新知