设计之初的区别
- JavaScript 发明于 1995年,那时候只有 null。因为是类 C 语言,设计的传统所有 null 为 0,所以 Number(null) === 0
- 设计者认为 JS 会与其它语言不一样,JAVA 中 null 是对象。而JS 中分为原始值与引用值,用 null 表示空对象不太够。所以设计了 undefined 作为原始值的初始值 | undefined | null | | —- | —- | | 原始值的初始值 | 对象的初始值 | | 未定义 | 空对象的引用 |
undefined
已声明未赋值的变量
var a;
console.log(a); // undefined
对象不存在的属性
var a = {};
console.log(a.b); // undefined
函数没有返回值的情况
function test() {} console.log(test()); // undefined
函数实参参数没有传入,而获取形参 ```javascript function test(a){ console.log(a); // undefined }
test();
5. void 表达式
```javascript
console.log(void 1); // undefeind
typeof undefined // => undefined
IE8 之前 undefined 会出现重写的问题,之后全局变量 window.undefined 能被修改
类型转换
console.log(Boolean(undefined)); // false
console.log(String(undefined)); // "undefined"
console.log(Number(undefined)); // NaN
null
对象的初始值,空对象的引用
console.log(typeof null); // object 这个是历史遗留问题
// 在类 C 语言中都是用 null 作初始化对象
// 本身的值是原始值,但返回值是对象
var arr = []; // 空数组初始化
var obj = {}; // 空对象初始化
类型转换
console.log(Boolean(null)); // false
console.log(String(null)); // "null"
console.log(Number(null)); // 0
console.log(undefined == null); // true
console.log(undefined === null); // false