null 和 undefined 的区别?

Null:

  1.它用来表示一个空的对象

  2.typeof检测一个null类型的变量返回的是 Object 

console.lgo(typeof null)  /* 这里打印的结果为Object */

  

Undefined:

  1.已经声明但还未赋值的变量就是Undefined(有参函数在调用时未传参,其参数也是undefined)

  2.typeof检测一个undefined类型的变量返回的就是undefined

var name1;
console.log(name1); /*这里打印的结果为undefined*/

console.log(typeof name1); /*这里打印的结果为undefined*/

console.log(typeof undefined) /*这里打印的结果为undefined*/

 

这里不得不提到一个在测试中遇到的问题:

  一开始我写的测试代码是这样的:

var name;
console.log(name); /*这里打印的结果为空白*/

 

奇怪,按正常套路这里应该打印的是undefined才对,可为什么是空白呢?

首先,我先换了几个浏览器测试,可依旧是这个结果。

于是,改用了let创建变量:

let name;
console.log(name) /*这里打印的结果为undefined*/

这次使用let声明的变量成功的打印了undefined。

为什么会这样?

  原来,var不在函数内部声明时,相当于声明的是全局变量,它会被加入到window对象中,可以通过 window.变量名 去访问它。我推测,window对象中已经存在了一个名为name的属性,所以console.log(name) 其实打印的是window.name。为了验证这个猜想,我又写了如下代码:

var name;

console.log(name); /*这里打印的结果为空白*/
console.log(window.name) /*这里打印的结果为空白*/

console.log(typeof name); /*这里打印的结果为String*/
console.log(typeof window.name); /*这里打印的结果为String*/

如我所料,全局对象中确实已经存在了name属性,所以未赋值的情况下仍然打印了 空白 ,且为字符串类型。

而使用let声明的变量具有对应的变量作用域,所以console.log打印的是我声明的那个name。

 

使用var声明变量时,最好不要使用name命名!

 

posted @ 2021-04-05 16:39  coder、L  阅读(122)  评论(0编辑  收藏  举报