03-数据类型之间的转换

nobility 发布于 2022-09-08 01-ES5 621 次阅读


数据类型之间的转换

要区分 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 转化为 NaNunll 转化为 0 先调用对象本身 valueOf() 方法,也就是拆箱操作,一般返回对象本身,若此方法返回的不是原始数据类型则会再调用对象本身 toString() 方法,所以一般对象转化为数字是 NaN,除拉只有一个元素是的数组会被当做一个值对待,空数组是0的情况
parseInt() 字符串转化为整数类型,小数部分会忽略掉;忽略前后空格,参数不是字符串会先自动转化为字符串(不支持科学计数法,支持正负号),逐个字符转化,遇到非数字字符会停止转化并返回已经转化好的部分,所以开头若是非数字字符返回 NaN 先调用 String() 方法转化为字符串,所以一般对象被解析为 NaN,除拉的数组
parseFloat() 字符串转化为小数类型,小数部分保留;忽略前后空格,参数不是字符串会先自动转化为字符串(支持科学计数法正负号),逐个字符转化,遇到非数字字符会停止转化并返回已经转化好的部分,所以开头若是非数字字符返回 NaN 先调用 String() 方法转化为字符串,所以一般对象被解析为 NaN,除拉的数组会
String() 数值、布尔值、undefinednull 都会转化成相应的字符串形式 先调用对象本身的 toString() 方法,一般返回 [object Object] 字符串,若此方法返回不是原始数据类型,则会再调用对象本身的 valueOf() 方法,所以一般对象转化成字符串是 [object Object] 字符串,除拉数组
Boolean() 除拉 undefinedunll0NaN、空字符串会转为 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
加油啊!即便没有转生到异世界,也要拿出真本事!!!\(`Δ’)/
最后更新于 2022-09-08