为什么 null的类型也是object?
这是由于历史原因造成的。 1995年JavaScript语言的第一版,当时,只设计了五种数据类型(对象、 整数、 浮点数、字符串和布尔值) ,完全没考虑null,只把它当作object的一种特殊值,为了兼容以前的代码, 后来就没法修改了。
这并不是说null就属于对象, 本质上就是一个特殊值, 表示“没有”;
而在ES6草案时, 也曾将 null 的数据类型修改为了 null ,但是因为兼容性问题, 后来又改回了object;
null与undefined都可以表示“没有”, 含义非常相似;
相等运算符(==) 两者相等:
var dd = (undefined == null);
console.log(dd); //true
但是, JavaScript的值分成原始类型和合成类型两大类, Brendan Eich(JS作者)觉得表示”无”的值最好不是对象;
其次, JavaScript的最初版本没有包括错误处理机制, 发生数据类型不匹配时, 往往是自动转换类型或者默默地失败。
作者觉得, 如果null自动转为0, 很不容易发现错误。
于是又设计了一个undefined;
现代JavaScript的数据类型分为6种:
数值number,
字符串string,
布尔bull,
对象object,
null,
undefined
null和undefined的区别
1.宽松比较时==,null和undefined相等,都表示’无’,’没有’ ==;
2.null出现的情况:
获取一个不存在的对象时
3.undefined出现的情况:
申明的变量没有赋值
函数的形参没有传值,
函数没有return返回值,
获取对象中不存在的属性
// 变量声明了, 但没有赋值
var i;
console.log(typeof(i)); // undefined
// 调用函数时, 应该提供的参数没有提供, 该参数等于undefined
function f(x) {
return x;
} v
ar f = f() // undefined
console.log(typeof(f));
// 对象没有赋值的属性
var o = new Object();
console.log(typeof(o.p)); // undefined
// 函数没有返回值时, 默认返回undefinedfunction ff() {}
var ff = ff(); // undefined
console.log(typeof(ff));
4.null的数据类型为object, undefined的数据类型为undefined
var d = document.getElementById('xx');
console.log(d);
5.null 表示’无’的对象,转换为数值时为 0 ;
undefined 表示’无’的原始数据,转换为 NaN
var n = Number(null);
console.log(n); // 0
var f = Number(undefined);
console.log(f); // NaN
ps.一个变量为null ,表示这个变量指向的内存地址为空