chrome開發者工具提示準確性的問題?

在控制台里寫一個很簡單的例子,比如 var a={name:"z"},當我要打出一個並不存在的屬性age,console.log(a.age)時,控制台提示undefined,這個我覺得提示不合理,如果它提示 a does not has the property "b"或者the property "b" is not defined 似乎更合適,但是為什麼提示是undefined呢,還是說我對這部分的理解並不是很透徹?

在firebug里也是這樣


不是這麼理解的。a.age你是覺得是非法的?錯了,它是合法的。你只覺得a.age = 1是合法的,a.age沒有賦值所以是非法的?

undefined的定義是什麼?變數沒有賦值之前的狀態,或沒有返回值時的狀態。瀏覽器一點錯也沒有。

你想得到更為人性化的提示,可以理解,但程序不可能為合法的變數寫出非法的提示。如果你console.log(a.age.age),就會有出錯提示,此時才是非法的。TypeError: Cannot read property "age" of undefined


undefined指的是變數未初始化,畢竟JS裡面是變數賦值一次就可以當作初始化的呀,所以任何沒定義的能夠當作變數的東西都是undefined。


a does not has the property "b 難道 不是 undefined 的意思嗎?? console返回的是 js語法 js語法並沒有 a does not has the property "b 這個語法啊


我這邊了解到是這樣:

這個提示目前來看 就這樣了 估計是不會再清晰

1.已在作用域中聲明但還沒賦值的變數 是undefined 即 變數在未持有值的時候

2.沒有在作用域中聲明過的變數 是 undeclared

如果瀏覽器控制台 區分這兩種情況 並返回 b is not declared 是不是好些 明確告訴你 b 未聲明

但這個是瀏覽器自身對這個情況處理的問題 typeof也有這個問題

為了避免日後你對其他控制台返回undefined有疑惑-另一個undefined 製造器:

語句結果值 你可以去搜搜 了解下;


這個提示本來就是正常的,你這樣單純的賦值語句沒有返回值,所以運行後自然就是 undefined (未定義)。你可以試試定義一個有返回值的函數,然後調用這個函數試試,如此它列印的就是返回值,而不是 undefined 了。


你對js語法不了解而已


推薦閱讀:

怎樣測試頁面載入時間?
Medium.com 的前端技術基於什麼,有怎樣的特點?
請教變數作用域問題,下面代碼彈出的為什麼不是global?
如何為js的eval指定一個object作為上下文?
求解一小段代碼,完全不理解eval的作用機制?

TAG:GoogleChrome | JavaScript | Firebug | Developer |