javascript转换

javascrpit中一些 特殊转换

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

为什么会产生如上?
这里就要了解 对象转原始值时的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)
posted @ 2017-03-07 11:23  打响武昌第二枪  阅读(98)  评论(0编辑  收藏  举报