一 转化为Number
console.log( typeof(+'1'),+'1');// number 1
console.log( typeof(1+'1'),'1'+1);// string 11
console.log( typeof(1-'1'),'1'-1);// number 0
console.log(typeof(-'2'),-'2');//number -2
console.log( typeof(1*'1'),'1'*1);// number 1
console.log( typeof(1/'1'),'1'/1);// number 1
+号只有当作正号 使用时才会有隐式类型转换为Number 的效果
console.log(+[]);//0
空数组转换为Number 为0 因为需要首先将空数组 [] 转换为字符串,结果是空字符串 ""
。然后,将空字符串 ""
转换为数字类型时,会得到数字 0
所以 console.log(0==[]) // true
console.log(+{}); //NaN
空对象转化为NaN 因为需要首先将对象 {}
被转换为字符串时,它的默认字符串表示是 "[object Object]"
。然后,将该字符串转换为数字类型时,会得到特殊的结果 NaN
console.log(+true);//1
布尔值true转化为Number为1
console.log(+false);// 0
布尔值false 转化为Number为 0
console.log(+null);//0
null 转化为Number 为0
console.log(+undefined);// NaN
undefined转化为Number 为NaN
二 转化为String
console.log(typeof(123+'1'),123+'1');//string 1231
console.log(typeof(true+'1'),true+'1') //string true1
console.log(typeof(false+'1'),false+'1')//string false1
console.log(typeof(null+'1'),null+'1') //string null1
console.log(typeof(undefined+'1'),undefined+'1');//string undefined1
三 转化为Boolean
console.log(!!1);//true
console.log(!!0);//false
console.log(!!3.1);//true
console.log(!!-3.1);//true
console.log(!!NaN);//false
Number 类型转化为Boolean除了0和NaN为false 其他都为true
console.log(!!'1');//true
console.log(!!'ww');//true
console.log(!!'null');//true
console.log(!!' ');//true
console.log(!!'');//false
String类型转化为Boolean 除了空字符串'' 为false 其他都为true
console.log(!![]);//true
console.log(!!{});//true
console.log(!!null);//false
console.log(!!undefined);//false
空数组和空对象转化为Boolean 都为true
null和undefined 转化为Boolean 都为false