undefined的来源
1、null在Java中被当成一个对象。但是JavaScript的数据类型分为原始类型和引用类型,设计者觉得“无”最好表示不为对象
2、JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往会自动转换类型或者默默地失败,设计着觉得,如果null自动转成0后,不容易定位错误。
两者区别与联系
null和undefined都表示“值的空缺”,你可以任务undefined是表示系统级的、出乎意料的或类似错误的值的空缺, 而null是程序级的、正常的或在意料之中的值的空缺 (来自JavaScript权威指南)
undefined 表示访问一个未初始化的变量返回的值。null值表示一个空对象的指针,这也是使用typeof操作符检测null会返回“object”的原因。
如果定义的变量准备将来用户保存对象,那么最好将该变量初始化为null而不是其他值。
实际上,undefined值是派生自null值的,因此ECMA-262规定对他们的相等的测试要返回true。
注:1、无论什么情况下,都没有必要把一个变量的值显示的设置为undefined
2、想要明确声明的变量是对象类型,就应该显示的设置为null
好处:不仅可以体现null作为空对象指针的惯例,而且也有助于进一步区分null和undefined
应用场景
null表示“没有对象”,即该处不应该有值。典型用法为:
1、作为函数的参数,表示该函数的参数不是对象
2、作为对象原型链的终点
3、在JS的DOM元素获取中,如果没有获取到指定的元素对象,一般返回null
undefined表示“缺少值”,就是此处应该有一个值,但是没有定义,典型用法为:
1、变量被声明,但没有赋值时,就等于undefined
2、调用函数时,应该提供的参数没有提供,就等于undefined
3、对象没有赋值的属性,该属性的值为undefined
4、函数没有返回值时,默认返回undefined
判断undefined和null
判断undefined
判断null