写在开头
这篇文章是面试系列的第一篇,写这个系列其实不仅仅是为了找工作,也是想将JS中重要的,容易混淆的知识点研究清楚,题目来自于github上的一个开源项目。
undefined 和 undeclared 的区别:
- undefined是一个JS类型,这个类型只有一个值,即特殊的undefined值。在使用
var
声明变量但未对其对象初始化,这个变量的值就是undefined. - undeclared可以被看作是一种语法错误。所以我认为可以在称呼这两者时加以区分:
-
值为undefined的变量
var a=undefined; var b;
-
undeclared的变量 (没有被声明的变量)
a; b=10;
-
例子:
"variable age is undeclared"可以被理解成两种情况:
第一种:既没有声明变量也没有赋值:
javascript alert(age); //Uncaught ReferenceError: age is not defined
-
第二种:没有声明变量但赋值了:隐式转换成全局变量
```javascript
function test(){
age= 10;
var yourAge=20;
}
test();alert("age:"+age); //10 alert("your age:"+yourAge); //Uncaught ReferenceError: yourAge is not defined ```
- 第二种情况test方法里的age因为没有声明(undeclared),被JS引擎当做全局变量使用,所以在test方法外也能被获取到,而yourAge在test方法里被正确声明以及赋值,它的作用域仅限于在test方法内被使用,所以想从方法外调用时会报错,因为无法在test()方法外找到yourAge变量,和第一种的undeclare相似。
undefined 和 null
- null类型和undefined的一样,也是一个只有一个值的数据类型,这个特殊的值是null。
alert(undefined==null)//true
本质区别:
- null表示一个值被定义了,定义为"空值"
- undefined 表示根本不存在定义
用法区别:
-
null的用法:
- 意在保存对象的变量还没有真正保存对象,就应该明确地让该变量保存null值。
- 对象原型链的终点
- 作为函数的参数,表示该函数的参数不是对象
-
undefined的用法:
- 变量被声明但没有被赋值.
var a;
- 调用函数时,应该提供的参数没有提供,该参数等于undefined.
function f(x){ alert(x); } f(); //x undefined
- 对象没有赋值的属性,该属性的值为undefined.
var person=new object(); person.age //age undefined
- 函数没有返回值时,默认返回undefined
var x=f(); x //undefined
- 变量被声明但没有被赋值.
如何检测null, undefined和undeclared
```
var a=null;
var b;
alert(typeof a); //object
alert(typeof b); //undefined
alert(typeof c); //undefined
```
参考
- Javascript高级程序设计
- undefined和null的区别-阮一峰的网络日志
- MDN