undefined是JavaScript語言中定義的五個原始類中的一個,換句話說,undefined並非程序報錯,而是程序容許的一個值。javascript
not defined是javascript在運行咱們的javascript代碼時,遇到沒有定義就用來console或者運算的變量時爆出來的錯誤。java
那麼問題來了:在許多的javascript教程中都介紹有javascript變量即便不定義也能夠直接拿來使用,可是請注意,這個使用是指能夠被賦值,可是不能夠被運算。看一個例子json
[javascript] view plain copyspa
在上面的代碼中,第一個alert能夠正常彈窗爲123;可是第二個alert是不會執行的,由於使用了沒有定義的temp4來運算,這是不容許的。.net
實際用在哪裏? 做兼容不要報錯,傳值若是爲空不報錯對象
eg: 兼容問題blog
(window.XMLHttpRequest)和(XMLHttpRequest) 前者返回undefine 後者返回 not define(報錯)教程
賦值問題ip
function a(json){get
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