zoukankan      html  css  js  c++  java
  • JavaScript 中 == 和 === 的区别

    JavaScript 中 == 和 === 的区别

    和其他语言有些不同,在 JavaScript 中除了用==操作符来判断是否相等外,还有一个===操作符,它们的区别是:==操作符会先将两边的值进行强制类型转换再比较是否相等,而===操作符不会进行类型转换。==操作符只要求比较两个值是否相等,而===操作符不仅要求值相等,而且要求类型相同。!=!==的区别也是类似的,!=号会做强制类型转换,而!==不会。

    在 chrome 浏览器的环境下,测试一下就知道了:

    // true
    55 == '55'
    // false
    55 === '55'
    

    第一个操作数是数值类型的55,第二个操作数是字符串类型的"55"。当一个操作数是字符串,另一个操作数是数值的时候,操作符==会把字符串转换成数值,所以结果就返回了true。而===不会做强制转换,所以数值类型的55和字符串类型的"55"当然是不相等的了。

    // false
    NaN == NaN
    // false
    NaN === NaN
    

    这里有一个特殊值NaN,即 Not a Number,表示非数字,它和任何数做相等比较,包括它自己,都会返回false。所以判断NaN最好用isNaN()函数。

    // true
    null == undefined
    // false
    null === undefined
    

    还有两个特殊值的比较也是让人觉得难以理解,null用来表示空值,undefined用来表示不存在,但这在实际开发中并没有什么用,而且=对它们的处理也不一样。


    由于==!=带来的隐式类型转换规则非常繁琐,以及为了避免混淆数据类型导致的 bug,我们推荐使用===操作符和!==操作符。除非你真的非常清楚隐式类型转换规则,否则千万别使用==!=

    博客已迁移到 blog.pythonking.top,如果地址失效或者有其他问题请到 github.com/DongchengWang/my-blog
  • 相关阅读:
    设计模式——桥接模式
    设计模式——工厂模式
    挖个坑
    Java 线程应用
    vtep-ctl + add-ls+ bind-ls +br-get-external-id
    ovs vtep 源码Tunnel_Ip
    vtep-ctl del-ls ls0
    vtep-ctl unbind-ls
    virt manager
    ironic 裸金属 failed to mount sysroot
  • 原文地址:https://www.cnblogs.com/stardust233/p/12193848.html
Copyright © 2011-2022 走看看