一、原始值转化为原始值
1、Number
Number( null ) => 0
Number( undefined ) => NaN
Number(Infinity) => Infinity
2、Boolean
虚值: 0, -0,-infinity,undefined,null,NaN,’’,false
其余都会转化为true。
空字符串转化为false,但是包含空格的字符串会转换为true console.log( ‘ ‘ ) => true
typeof 返回值
console.log(typeof /e/ ) => ‘object’
console.log(typeof Date ) => ‘function’
下面两个值虽然在打印台输出时间字符串,但是Date() 为字符串,new Date() 是对象,系统自动解析为时间字符串
console.log(typeof Date()) => string’
console.log(typeof new Date()) => ‘object’
3.toString
显示转化对象类型值的话,优先调用toString方法,如果返回原始类型值,再调用包装类原型上的toString方法。
let a = {
valueOf:()=>{return 123},
toString:()=>{return 321}
}
//1、调用toString方法,返回数字321,
//2、再调用Number包装类对象原型的toString方法(Number.prototype.toString)
console.log(String(a)) // => '321'
相加运算的时候,还是先调用valueOf,再调用toString方法。
console.log(1 + a) // => 124
二、对象转原始值
1、Boolean
空对象和空数组都转化为true,不是falsey
console.log(Boolean([])) => true
console.log(Boolean()) => true
2、转Number
调用对象自身的ValueOf,如果不能得到原始值,再调用toString方法。如果两个方法都不能返回原始值,系统会报错。
Object.prototype.toString会返回字符串
Function.prototype.toString方法返回函数体字符串
Array.prototype.toString默认重写了,将每个元素字符串化后,再拼接起来。所以
Number([12]) = > 12
Number([1,2]) => NaN 在数组转化为字符串的时候,Array.prototype.toString会转化为 ‘1,2’ ,所以Number(‘1,2’) 返回NaN