null
与 undefined
都可以表示“没有的意思”,在js中这两种效果基本上等价!
var a = undefined
var b = null
上面这两种变量声明基本上没什么区别,都表示没有。
在js的非严格模式下这两个是相等的
console.log(null == undefined) // true
在js对null
和 undefined
进行运算也是得到不同的结果,因为最初的js语言像java一样,只设置了null
表示“无”。根据C语言的传统,null
可以自动转为0
console.log(5 + null) // 5
console.log(Number(null)) 0
后来因为种种原因js又增加了一个undefined
。null
是一个表示“空”的对象,转为数值时为0
;undefined
是一个表示"此处无定义"的原始值,转为数值时为NaN
。
console.log(5 + undefined)// NaN
console.log(Number(undefined))//NaN
undefined和null只有与自身比较,或者互相比较时,才会返回true
;与其他类型的值比较时,结果都为false。
undefined == undefined // true
null == null // true
undefined == null // true
false == null // false
false == undefined // false
0 == null // false
0 == undefined // false