JavaScript中的强制类型转换总是返回标量值,如数字,字符串,布尔值,不会返回对象和函数。
也可以这样子类区分:类型转换发生在静态类型转换的编译阶段,而强制类型转换发生在动态语言的运行时。
然而在JavaScript中统称为强制类型转换。
ToString
规范的9.8中定义了抽象操作ToString,它负责处理非字符串的强制类型转换
基本类型值的字符串转换规则为:null转化为”null”,undefined 转化为 “undefined”,true 转化为 “true”。
ToNumber
其他true转换为1,false转为0,undefined转化为NaN,null转为0
ToBoolean
假值
- undefined
- null
- false
- +0, -0 和 NaN
- “”
字符串和数字之间的显式转换
字符串和数字之间的转换是通过String(…)和Number(…)这两个内建函数来实现的。注意他们前面没有new关键字,并不创建封装对象
var num = 1
var str = 'str'
var arr = [1,2,3]
var boo = true
var obj = new Object()
var und = undefined
var oNull = null
const sym = Symbol()
function foo() {}
console.log('****** [] *****');
console.log( [] == 0 )
console.log( [] == null )
console.log( [] == undefined )
console.log( [] == false )
console.log( [] == '' )
// true
// false
// false
// true
// true
console.log('****** 0 *****');
console.log( 0 == null )
console.log( 0 == undefined )
console.log( 0 == false )
console.log( 0 == '' )
// false
// false
// true
// true
console.log('****** null *****');
console.log( null == '' )
console.log( null == undefined )
console.log( null == false )
console.log( null == '' )
// false
// true
// false
// false
console.log('****** undefined *****');
console.log( undefined == '' )
console.log( undefined == false )
console.log( undefined == '' )
// false
// true
// false
// false
console.log('****** false *****');
console.log( false == '' )
// true
参考
《你不知道的JavaScript(中)》第一部分第四章