關(guān)于變量未定義和未賦值的問(wèn)題
<script?type="text/javascript"> ??var?num1=10-5; ??var?num2=6+num1; ??document.write("小明還剩:"+num1+"元"+"<br>"); ??document.write("小紅花:"+num2+"元買個(gè)鉛筆盒"); </script>
這是原代碼,如果將代碼進(jìn)行下述修改后,為什么會(huì)出現(xiàn)這種情況?
a.如果刪除2.3行代碼,代碼全部不會(huì)顯示,包括“小明還剩”等document.weite()里的。
b.如果第2.3行改為
var?num1; var?num2;
的話,即只定義不賦值,輸出的num值是undefined。
c.如果2.3行代碼互換
??var?num2=6+num1; ??var?num1=10-5;
輸出的num2是NaN。
d.我在慕課網(wǎng)站上先成功運(yùn)行一次后,再進(jìn)行我的上述操作,右側(cè)小窗口輸出的都是第一次的正確代碼。
感謝解答
2017-05-27
a:刪除第二第三行,num1和num2 沒(méi)有被定義,整個(gè)js不能正確運(yùn)行,所以不會(huì)執(zhí)行第二行以后的代碼;
b:修改成var?num1;var?num2,變量被定義,但是沒(méi)有賦值,系統(tǒng)會(huì)給一個(gè)默認(rèn)值,就是undefined
c:2.3行互換,NaN是未知錯(cuò)誤,系統(tǒng)無(wú)法判定num1的類型,至于為啥可以運(yùn)行,我猜測(cè)是因?yàn)閚um1 前面的+號(hào)
d:你沒(méi)有點(diǎn)擊提交按鈕,所以右側(cè)的窗口還是你修改前的效果
2017-12-22
感謝提出這個(gè)問(wèn)題以及回答問(wèn)題的各位!拓展了自己的思路
2017-12-01
補(bǔ)充c點(diǎn):2.3行互換,num1雖在后面定義并賦值,但聲明提前(即把定義提到代碼頂部),它的值為undefined。
? ? ? ? ? ? ? ?+號(hào)運(yùn)算,javascript優(yōu)先期望操作數(shù)為數(shù)字,因此,javascript會(huì)把undefined隱式轉(zhuǎn)換為NaN,轉(zhuǎn)
? ? ? ? ? ? ? ?換結(jié)果無(wú)意義,6+NaN表達(dá)返回NaN(中文意思:不是一個(gè)數(shù)字)。
2017-04-19
只定義了變量,沒(méi)有賦值,輸出就是undefined.