javascript的一些数据转换

120 阅读1分钟

加法转换

 1+null     // 1 null转换成0
 1+[]       // "1"  注意是字符串啦
 1+[9]      //  "19"  字符

为什么会产生如上? 这里就要了解 对象不是应该报错的吗?哥们这可是js语言啊(一个很随便的语言)。 因为:
会隐性转换取取原始值,与原始值相关的的2个函数toString()valueOf()。对象参与运算时 回去 执行obj.valueOf()方法拿到原始值 没有返回对象本身 如果返回的 不是个原始值 则会执行 obj.toString()这就可以解释 1+[9] 位 "19"

  [9].valueOf()                    //返回对象本身 执行toString
 [9].toString()                   //"9"
 1 + "9"                          //"19"

咱自定义对象来验证

var obj ={ 
    flag:false,
    toString:function(){
     return this.flag?"先调用了valueOf":"直接调用哥们" ;
    },
    valueOf:function(){
      this.flag=true;
      return  [1,2,3,4,5] ;       //注意我返回的是一个 *数组对象* 不是原始值
    }

}

console.log(1+obj)                //'1先调用了valueOf'

//我们再来总结一下 obj先调valueOf  如果不是原始值 则调toString

var obj={valueOf:function(){return 12;}}
   
   1<obj                           //true

其他js等效运算

 !!x                              // 等价    Boolean(x)
 -x                               // 等价    Number(x)
 x + ""                           //等价     String(x)
 x!==x                            // 等价    isNaN(x)
 +x                               // 等价   Number(x)