转换为字符串 转换为数字 转换为布尔值 转换为对象
undefined
null
"undefined"
null
NaN
0
false
false
throws TypeError
throws TypeError
true
false
"true"
false
1
0
new Boolean(true)
new Boolean(false)
""(空字符串)
"1.2"(非空,数字)
"sam"(非空,非数字)
0
1.2
NaN
false
true
true
new String("")
new String("1.2")
new String("one")
0
-0
NaN
Infinity
-Infinity
1
"0"
"0"
"NaN"
"Infinity"
"-Infinity"
"1"
false
false
false
true
true
true
new Number(0)
new Number(-0)
new Number(NaN)
new Number(Infinity)
new Number("-Infinity")
new Number(1)
{}
[]
9
'a'
function(){} (任意函数)
下文详解
""
"9"
"使用 join()方法"
下文详解
下文详解
0
9
NaN
NaN
true
true
true
true
true

表格很清晰,不过有个问题需要注意。null 本身不是对象,它本身就属于 null 类型,null 类型是一种原始值类型。很多人认为 null 是一种特殊的对象是因为 typeof null 返回的是 "object",这实际上是 JS 的一个十几年没有修复的 bug。变量都是以二进制保存的,在 JS 中,typeof 会把二进制前三位都为 0 的变量认为是 "object",而 null 的二进制表示中所有位都为 0,自然也会被 typeof 认为是 "object",这个 bug 没有修复的原因是:如果修复了,它会影响大量的已有 JS 应用。但作为程序员,我们有责任意识到事物的本质,无论是在自己使用过程中,还是在给他人讲解过程中。以上个人愚见,如有冒犯,望见谅!

一笔写于: 5/31/2020, 1:58:36 PM
扫码添加我的微信
个人
个人号
公众号
公众号