隐式类型转换
简单数据类型转换
1 console.log(1 + true); 2 //2 3 Number(true); 4 //1 5 + 做为算术运算符会把其他数据类型调用Number();转成数字然后做加法运算; 6 7 console.log(1 + "true"); 8 //1true 9 String("true"); 10 //"true" 11 + 两边有一边是字符串,那这个 + 就是字符串连接符,它会把其他数据类型调用String();方法转成字符串然后拼接; 12 13 console.log(1 + undefined); 14 //NaN 15 undefined会被转换为NaN 16 17 console.log(1 + null); 18 //1 19 null会转换为数字 0; 20 21 console.log("2" > 10); 22 //false 23 Number("2"); 24 //2 25 26 console.log("a" > 10); 27 //false 28 Number("a"); 29 //NaN 30 比较运算符的一边是字符串的时候,会调用 Number() 方法把字符串转换成数字在进行比较; 31 32 console.log("2" > "10"); 33 //true 34 当关系运算符两边都是字符串的时候,此时同时转成number然后比较关系。 35 此时并不是按照Number()的形式转成数字,而是按照字符串对应的unicode编码来转成数字,使用 字符串.charCodeAt(字符下标,默认为0) 方法可以查看字符的unicode编码。 36 即 2 > 1; 37 //true 38 39 40 console.log(false == 0); 41 //true 42 Number(false); 43 //0 44 console.log(true == 1); 45 //true 46 Number(true); 47 //1 48 布尔值和数字比较时,会把布尔值通过 Number() 转成数字再进行比较,true转成 1,false 转成 0; 49 50 console.log(false == ""); 51 //true 52 字符串和布尔值比较时,会把字符串和布尔值都通过 Number() 转成数字再进行比较 53 54 无视规则: 55 console.log(null == undefined); 56 //true 57 58 console.log(NaN == NaN); 59 //false
复杂数据转换
1 复杂数据类型转成number数据类型: 2 1.先使用 valueOf() 方法获取原始值,如果原始值不是number数据类型,则使用 toString() 方法转成string; 3 2.再通过 Number() 方法装成number数据类型 4 注意: 5 空数组的toString()方法会得到空字符串,而空对象的toString()方法会得到字符串[object Object]; 6 7 console.log([1,2] == '1,2'); 8 //true
逻辑非转换
1 0、-0、NaN、undefined、null、""(空字符串)这几种情况转换布尔类型会得到 false,除了这几种情况外所有数据类型都会得到 true 2 console.log ( [] == 0 ); 3 //true 4 console.log ( ! [] == 0 ); 5 //true 6 console.log ( [] == ! [] ); 7 //true 8 console.log ( [] == [] ); 9 //false 10 console.log({} == !{}); 11 //false 12 console.log({} == {}); 13 //false