undefined是JavaScript语言中定义的五个原始类中的一个,换句话说,undefined并不是程序报错,而是程序允许的一个值。
not defined是javascript在运行我们的javascript代码时,遇到没有定义就用来console或者运算的变量时爆出来的错误。
那么问题来了:在许多的javascript教程中都介绍有javascript变量即使不定义也可以直接拿来使用,但是请注意,这个使用是指可以被赋值,但是不可以被运算。看一个例子
[javascript] view plain copy
- var temp;
- temp2 = 123;
- alert(temp2);
- temp3 = temp4+1;
- alert(temp3);
在上面的代码中,第一个alert可以正常弹窗为123;但是第二个alert是不会执行的,因为使用了没有定义的temp4来运算,这是不允许的。
实际用在哪里? 作兼容不要报错,传值如果为空不报错
eg: 兼容问题
(window.XMLHttpRequest)和(XMLHttpRequest) 前者返回undefine 后者返回 not define(报错)
赋值问题
function a(json){
json.b = json.b || {} //如果不或上{}空对象,外面不传参数,会报错,因为外面传进来的是一个null
//json是一个not define的值,就给他作赋值或者运算操作,就会报错
return json.b;
}
console.log(a());
另外一些注意地方
var a = null;
var b = false;
var c;
var d = {};
if(a){ // 除了d,其余打印结果为1
console.log(1);
} else {
console.log(2);
}
d.t = 4;
console.log(d); // object {t:4}
console.log(d.t); // 4
a.t = 2; // not define 只要定义变量的布尔值是false,那么全不能传入属性
console.log(a.t);
b.t = 1;
console.log(b.t);
c.t = 3;
console.log(c.t);
最终结果 2 object {t:4} 4 't' not define