JS中关于变量常遇到的错误有两个,一个是“xx is not defined”,另一个是“undefined”。
一.区别
1.”not defined”
var a; //只声明变量,未赋值
console.log(a); //undefined
2.”undefined”
//var a;
console.log(a); //未声明变量且未赋值,a is not defined
__结论:
声明变量却没有对其进行赋值,即变量undefined;
未声明也未赋值变量,即变量not defined.
undefined:不明确的,也就是不知道用来干嘛的;
not defined: 未定义的. __
注:若变量a没有通过var声明,但是却赋值了,如:
a = 1;
console.log(a); //1
console.log(window.a) //1
当变量不加var声明时,默认在变量前面自动添加window.,也就成了window的属性。
再看一个例子:
(function aa(){
var a = 1;
b = 2;
})();
console.log(a); //a is not defined
console.log(window.a); //undefined
console.log(b); //2
console.log(window.b); //2
结论:
如果在方法中声明变量,则为局部变量.
如果是在全局域中声明,则为全局变量.
二.判断
两者都可以用typeof进行判断:
var a;
if (typeof(a) == "undefined") {
alert("undefined");
}
if (typeof(b) == "undefined") {
alert("undefined");
}
三.null
既然提到not defined和undefined,有一个不得不提的就是null了。
console.log(typeof(null)); //Object
null是js的关键字,其含义为“非对象”。不过通常认为它是null这个类型下的唯一一个成员,它可以表示数字、字符和对象是“无值”的
undefined也是表示无值
console.log(null == undefined); //true
console.log(null === undefined); //false