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)