数据类型(7种):
- 基本数据类型:Number、String、Boolean、Undefined、Null、Symbol
- 复杂数据类型:Object
var s = Symbol(); typeof s; // "symbol"
显式类型转换
- Number函数
- String函数
- Boolean函数
1、Number函数
类型 | 转换后值 |
---|---|
数值 | 原来值 |
字符串 | 可被解析为数值的转换为相应数值;否则为NaN;空字符为0 |
布尔值 | true转为1;false转为0 |
undefined | NaN |
null | 0 |
对象类型 | 先调用对象自身valueOf方法,若方法返回基础类型值(数值、字符串、布尔值),则直接使用Number方法,不进行后续步骤;如果返回复杂类型值,再调用toString方法,此方法后若返回基础类型,对其使用Number方法,不进行后续步骤;如果toString方法返回复杂类型值,则报错 |
console.log(Number(1)); // 1
console.log(Number('24'));// 24
console.log(Number('324abc')); // NaN
console.log(Number('')); // 0
console.log(Number(false)); // 0
console.log(Number(true));// 1
console.log(Number(undefined)); // NaN
console.log(Number(null)); // 0
console.log([1]); // 1
var a = {a: 1};
console.log('a', Number({a: 1}));//a NaN
//对象类型转换过程
a.valueOf(); //{a: 1} 转换为复杂类型值,调用toString方法
a.toString(); //"[object Object]"
var str = "[object Object]";
Number(str); // NaN
var b = [1, 2, 3];
console.log("b",Number(b)) // NaN
//转换过程为
var b = [1, 2, 3];
typeof b; // "object"
b.valueOf(); // [1, 2, 3]
b.toString(); // "1,2,3"
var num = "1,2,3";
Number(num); // NaN
2、String函数
类型 | 转换值 |
---|---|
数值 | 相应字符串 |
字符串 | 原来值 |
布尔值 | true——“true”; false——“false” |
undefined | “undefined” |
null | “null” |
对象类型 | 先调用toString(),若返回基础类型值,则对该值使用String方法,不再进行一下步骤;若返回复合类型值,再调用valueOf(),若返回基础类型值,对该值使用String方法,不再进行一下步骤;若返回复合类型值,则报错 |
console.log(String({a:1})) // "[object Object]"
// 转换过程
var a = {a:1};
a.toString(); // "[object Object]"
String("[object Object]"); // "[object Object]"
var b = {
b: 1,
toString: function () {
return {
b: 2,
};
},
valueOf: function () {
return 'b';
},
};
console.log('b', String(b)); // b b
3、Boolean函数
undefined、null、0、NaN、“ ”(空字符串) ——false
非0数字、非字符串 —— true
4、parseInt
[“1”,“2”,“3”].map(parseInt)执行结果为: [1,NaN,NaN]
parseInt接收两个参数(val,radix)
map里面一般写成function(item,index, arr) { }
所以,循环parseInt里面传入的参数分别为: parseInt(“1”, 0);parseInt(“2”, 1);parseInt(“3”,2)
5、parseFloat
其它不常见
console.log([] + []);// 无输出
console.log([] + {});//[object Object]
console.log({} + []);//[object Object]
console.log({} + {});//[object Object][object Object]
console.log(true + true);//2
console.log(1 + {a: 1});//1[object Object]
var a={},b={key: "b"}, c={key: "c"};
a[b] = 123;
a[c] = 456;
console.log(a[b]);// 456
解析:设置对象属性时,属性为对象,js会隐式将[ ]内变量转成字符串,因为b,c都为对象,将它们都转成了“[object object]”,此时a[b]和a[c]都相当于a["[object object]"],所以后面的层叠掉前面的,结果为456
具体关于valueOf、toString的方法返回值及隐式转换相关内容参考 渔人码头博客“JS中 toString() & valueOf()”
待完善