在javascript中
undefined和null都可以表示空,不存在,他们之间有什么联系和区别呢?
undefined和null作为条件的时候都等价于falseif(undefined) {
console.log(true)
} else {
console.log(false)
}
// false
if(null) {
console.log(true)
} else {
console.log(false)
}
//false
用松散比较判等的时候,JavaScript默认undefined == null,而严格比较时,由于类型不一致undefined !== null。typeof undefined的结果是'undefined',而typeof null的结果是'Object'。
那么undefined和null什么时候会出现呢?由于Javascript是动态类型语言,一个变量被声明的时候他是什么类型取决于他指向的对象是什么类型,如果声明对象的时候没有初始化呢?let a
console.log(a)
//undefined
当声明的对象没有初始化的时候,默认的类型就是undefined。那么如果变量都没有声明呢?console.log(typeof bbb)
//undefined
当变量都没声明的时候,默认的类型也是undefined。
同理:如果一个函数没有没有返回值,或者返回了空,他的调用的返回结果就相当于未定义的变量或未初始化的变量。function func1() {}
function func2() {return;}
console.log(typeof func1()) //undefined
console.log(typeof func2()) //undefined
所以:当一个函数返回了空,或者就没有返回,调用的结果就是undefined
JavaScript允许调用函数的时候传入比参数列表长度少的值,没有被传参的值默认是undefinedfunction func3(a,b) {
console.log(a,b)
}
func3(1) // 1 undefined
JavaScript允许函数参数设置默认值,设置了默认值的参数,即使显示的传递了undefined,还是会赋值给定的默认值。function func4(a, b = 1919810) {
console.log(a,b)
}
func4(114514, undefined) // 114514 1919810
函数调用传入undefined参数等同于没传该参数。为了防止这种现象造成开发时的BUG,一般传空参数的时候,显示地传null而不是undefinedfunction func4(a, b = 1919810) {
console.log(a,b)
}
func4(114514, null) // 114514 null
又例如解构赋值:const [a, b = 114514] = [1919810, undefined]
console.log(a,b) //1919810 114514
因为undefine写了等于没写,所以实际上执行的是:const [a, b = 114514] = [1919810]
解释器检测到参数缺失,自然会给b设置默认值。如果非要让b不走默认值,就应该用null:const [a, b = 114514] = [1919810, null]
console.log(a,b) //1919810 null
获取JSON中不存在的对象,返回undefineddata = {
name: 'tadokoro',
age: 114514
}
console.log(data["yarimasune"]) // undefined
null可以成为数字0,参与计算。而undefined无法作为数字,undefined参与计算会返回NaNNumber(null) //0
Number(undefined) //NaN
null + 10 //10
undefined + 10 //NaNnull的底层是一个0,而undefined本质是一个特殊的对象
总结undefined一般是系统被动产生的,是一种被迫的替代性方案:
- 变量没有声明
- 函数没有
return或return为空 - 参数没有给值
- 对象没有该属性
- 本质上是个特殊对象,不能参与和
number的运算
null往往是主动返回的,是开发者主动选择的结果
- 本质上是0,可以参与和
number的运算 - 可以用于函数调用时,显示地传递空参数,防止默认值