概念
undefined 表示未定义,就是应该有值但是还没有赋值,连null的值都没有赋予
null 代表空值,空引用。
区别
null和undefined虽然值的结果是相等的,但是其所代表的语义是完全不一样的(==是相等的)。undefined代表了某个变量完全不存在,在内存中完全能不存在这个标识符所指向的地址;null代表了内存中是存在这个变量的,只是我在某些情况下需要把这个变量原本的值给覆盖了,将它设置为一个空。
null转为数值时是0;undefined转为数值时是NAN(not a number)。null通过typeof判断类型的时候结果的输出是object; 而undefined的类型是undefined。null是 js 语言的关键字,是不允许用户用来作为标识符声明变量的,但是undefined可以,undefined不是关键字。在 node 环境中,我们声明的 undefined 会将原本的 undefined 覆盖的,但是在浏览器环境中不会,是因为浏览器中的 undefined 是直接被使用 Object.defineProperty 定义在了全局对象 window 上,默认就已经被配置成为了:值不可修改并且不可以被重新进行配置
那么为什么 typeof null 是 object ?
null 和 undefined 都是js语言的基础数据类型, 都是原始值类型,但是 typeof null 是 object ,是因为不同的对象在底层都表现为二进制,在JavaScript中二进制前三位都为 0 的话会被判断为 object类型,null的二进制全部都为 0 ,前三位自然也是 0 ,所以执行 typeof 值会返回 object 。
应用场景
-
undefined- 变量被声明了,但是没有被赋值;
- 调用函数的时候,应该给函数传参却没有给函数传这个参数打印出来就是
undefined; - 访问一个对象中没有的属性;
- 函数没有返回值时,默认就会返回
undefined。
-
null- 作为对象原型链的终点出现;
- 当我们访问一个不存在的dom节点的时候。