数据类型之间的转换
要区分 new Number() 和 Number() 方法,前者属于构造函数返回 object 类型,后者是普通函数返回原始类型,其他那几个也是同理
console.log(new Number(1) === new Number(1)); //false,对象地址比较
console.log(Number(1) == Number(1)); //true,返回的值比较
强制转化
| 函数名 | 原始数据类型 | 复合数据类型 |
|---|---|---|
Number() |
忽略前后空格,若是全数字字符串转化为数字(支持科学计数法和正负号),有一个非数字字符转化为 NaN,空字符串转化为 0;false 转化为 0,true 转化为 1;undefined 转化为 NaN;unll 转化为 0 |
先调用对象本身 valueOf() 方法,也就是拆箱操作,一般返回对象本身,若此方法返回的不是原始数据类型则会再调用对象本身 toString() 方法,所以一般对象转化为数字是 NaN,除拉只有一个元素是的数组会被当做一个值对待,空数组是0的情况 |
parseInt() |
字符串转化为整数类型,小数部分会忽略掉;忽略前后空格,参数不是字符串会先自动转化为字符串(不支持科学计数法,支持正负号),逐个字符转化,遇到非数字字符会停止转化并返回已经转化好的部分,所以开头若是非数字字符返回 NaN |
先调用 String() 方法转化为字符串,所以一般对象被解析为 NaN,除拉的数组 |
parseFloat() |
字符串转化为小数类型,小数部分保留;忽略前后空格,参数不是字符串会先自动转化为字符串(支持科学计数法正负号),逐个字符转化,遇到非数字字符会停止转化并返回已经转化好的部分,所以开头若是非数字字符返回 NaN |
先调用 String() 方法转化为字符串,所以一般对象被解析为 NaN,除拉的数组会 |
String() |
数值、布尔值、undefined 和 null 都会转化成相应的字符串形式 |
先调用对象本身的 toString() 方法,一般返回 [object Object] 字符串,若此方法返回不是原始数据类型,则会再调用对象本身的 valueOf() 方法,所以一般对象转化成字符串是 [object Object] 字符串,除拉数组 |
Boolean() |
除拉 undefined、unll、0、NaN、空字符串会转为 false,其他都会转化为 true |
一律转化为 true |
自动转化
自动转化是在强制转化基础上的,其实就是预期得到什么数据类型,就调用相应的 Number()、String() 和 Boolean() 方法,所以转化规则一致
- 不同数据类型互相运算时会自动转化
- 加法中有字符串就会转化为字符串进行拼接,没有字符串会转化成数值类型
- 其他运算一律转化为数值类型
- 对非布尔类型求布尔类型时会自动转化
- 条件判断语句中
- 发生逻辑运算
- 使用一元运算符
+、-时会自动转化数值类型
var obj = {};
console.log(obj+1); //[object Object]1
console.log(obj.valueOf()); //{}
console.log(obj.toString()); //[object Object]
var obj = {
valueOf:function(){return 1} //重写valueOf方法,已经返回原始数据类型,所以不会调用toString方法了
};
console.log(obj+1); //2
console.log(obj.valueOf()); //1
console.log(obj.toString()); //[object Object]
var obj = {
toString:function(){return 1} //重写toString方法
};
console.log(obj+1); //2
console.log(obj.valueOf()); //{ toString: [Function: toString] }
console.log(obj.toString()); //[object Object]
/*Date对象是一个特例,与valueOf方法无关,因为valueOf返回的是毫秒数,只会执行toString方法*/
var obj = new Date();
obj.valueOf = function () { return "valueOf" };
obj.toString = function () { return "toString" };
console.log(obj + 1); //toString1

Comments NOTHING