zoukankan      html  css  js  c++  java
  • js中== 和 != 的转换规则

    js中== 和 != 的转换规则

      1.如果有一个操作数是布尔型,在比较相等性之前先转换数值 false–0 true–1

      2.如果有一个操作数是字符串,另一个为数值,在比较相等性之前先将字符串转换数值 不为数值NaN

      3.如果有一个数为对象,另一个不是,则先调用对象的valueOf()方法,得到基本数据类型值按照之前规则比较

    这两个操作符在进行比较时要遵循以下规则

      1.null == undefined
      2.比较相等性之前不能将null 和 undefined 转换成其他任何值
      3.NaN 不等于任何值 NaN不等于NaN
      4.如果两个数都是对象 则比较是不是指向同一个对象

         console.log([] == []);//false
            console.log([] == ![]);//true
            console.log([] === ![]);//false
            
            console.log({} == {});//false
            console.log({} == !{});//false
            console.log({} === !{});//false
            
            console.log(null == undefined);//true

    如果复杂数据类型和简单数据类型进行运算, 先调用复杂数据类型的valueof方法, 如果调用了valueof方还无法进行运算,
    那么就调用复杂数据类型的toString方法

    这里用数组和对象举例

           console.log([] == ![]); // true
            // ![]  ==  false
            console.log([].valueOf());// []
            console.log([].toString());// 空 ''
            console.log(typeof [].toString()); //string
    
            // '' == false
            // 0 == 0
            // true
    
            console.log({} == !{}); // false
            //!{} == false
            console.log({}.valueOf());//{}
            console.log({}.toString());//"[object Object]"
    
            // "[object Object]" == false
            // NaN == 0
            // false 

     

  • 相关阅读:
    [ES6] for..in && for..of
    [Falcor] Building Paths Programmatically
    [Polymer] Custom Elements: Styling
    [Polymer] Introduction
    [Redux] Implementing combineReducers() from Scratch
    [Redux] Reducer Composition with combineReducers()
    [AngularJS] Exploring the Angular 1.5 .component() method
    生物-脑-脑容量:脑容量
    生物学-脑:脑(动物中枢神经系统主要部分)
    生物:生物
  • 原文地址:https://www.cnblogs.com/zycs/p/13414684.html
Copyright © 2011-2022 走看看