- null 是被赋值的,表示啥都没有
- undefined 通常是一个变量已经被声明,但是没有赋值
- null 和 undefined 都是否定值
- null 和 undefined 都是原始值
- typeofnull=object
- null!==undefined 但是 null==undefined
1. null
- null 是空或者不存在的值
- null 一定是被赋值的 像这样,我们给变量 a 赋值 null
let a = null;
console.log(a);
// null
2. undefined
undefined 通常是一个变量已经被声明,但是没有赋值,例如:
let b;
console.log(b);
// undefined
也可以给变量直接赋值为 undefined
let c = undefined;
console.log(c);
// undefined
从一个 object 里读取一个不存在的属性就返回 undefined:
var d = {};
console.log(d.fake);
// undefined
3. 相同点
1. 都属于JavaScript的否定值;
JavaScript 有6个否定值:
- false
- 0(zero)
- ""(empty string)
- null
- undefined
- NaN(Not A Number)
2. 都属于JavaScript的原始值;
JavaScript 有 6 个原始值:
- Boolean
- Null
- Undefined
- Number
- String
- Symbol
4.不同点
1. undefined 是不会覆盖默认值的
let sayHi = (str = 'hi') => {
console.log(str);
}
创建了一个函数叫 sayHi,有一个参数,且设置默认值为 hi,调用是这样:
sayHi();
// hi
我们也可以传个参数覆盖默认值:
sayHi('bye');
// bye
但是! undefined 是不会覆盖默认值的,而 null 则会。
sayHi(undefined);
// hi
sayHi(null);
// null
5. null !== undefined
null 是严格不等于 undefined 的
null !== undefined
但是,用不严格比较符的时候 null 是等于 undefined 的。
null == undefined
在 JavaScript 里,双等号判断相等时会进行隐式类型转换,所以是不严格的。
6. 注意点
用 typeof 测试 null,会返回 object。