網(wǎng)站制作NEWS
在網(wǎng)頁里面的寫javascript的疑問: alert(name)會彈出對話框,內(nèi)容為空 alert(age)時(shí)沒反應(yīng)
因?yàn)閣indow.name是空字符串,window.age是undefined,所以你alert(age)會報(bào)錯(cuò),alert(name)會出對話框
你需要弄明白三個(gè)概念:
1:什么是undefined?javascript的undefined其實(shí)有兩個(gè)概念,一種就是報(bào)錯(cuò)的時(shí)候說某個(gè)變量undefined,這個(gè)時(shí)候它是形容詞,說某個(gè)變量沒定義,還有一種就是javascript的一個(gè)頂級對象,他就是一個(gè)object,跟字符串,數(shù)字一樣,這個(gè)時(shí)候它是名詞
2:alert什么時(shí)候會報(bào)錯(cuò)呢?并不是你傳遞一個(gè)參數(shù)等于undefined(名詞)它就報(bào)錯(cuò),而是你傳給它一個(gè)undefined(形容詞)參數(shù)它才報(bào)錯(cuò),比如下面兩種情況都不會報(bào)錯(cuò):
alert(undefined);
var a = undefined;alert(a);
在這兩句中其實(shí)undefined都是通過一個(gè)聲明過的變量作為一個(gè)代表傳遞個(gè)alert的,第一句是隱藏變量,你不知道它的名字,是機(jī)器替你創(chuàng)建的,第二句就是a變量,alert首先找到變量,然后變量指向undefined對象,不會打亂javascript運(yùn)行機(jī)制,所以把可以把undefined打印出來
但是如果你從來沒聲明過一個(gè)變量,比如直接寫個(gè)alert(age);而age這個(gè)變量從來沒出現(xiàn)過,它也不是當(dāng)前運(yùn)行域中的默認(rèn)變量,alert處理age的時(shí)候就看不懂它,更不會通過它找到undefined對象
3:javascript的變量都是在自己的scope內(nèi)才有效,最外層的scope就是window,你平時(shí)看到的全局變量其實(shí)全都是寄存在window對象下面,alert(name)其實(shí)調(diào)用的是alert(window.name),它不會報(bào)錯(cuò)是因?yàn)閣indow有name成員,只不過它是個(gè)空字符串而已,而age不同,window.age根本不存在,所以就會導(dǎo)致運(yùn)行期錯(cuò)誤
多重隨機(jī)標(biāo)簽