雨溢豐
2016-01-18 23:17:03
var arr=scoreStr.split(";");var sum;//var sum=0就是815?? document.write(arr+"<br/>");? //從數組中將成績撮出來,然后求和取整,并輸出。? for(var i=0;i<arr.length;i++){? sum+=parseInt(arr[i].substr(3,2));? ?}? ?document.write(typeof(sum)+"-"+sum);//為什么是number-NaN?
5 回答
已采納

_da
TA貢獻22條經驗 獲得超29個贊
你試試這個。
var sum;
console.log(sum)
sum == undefined
sum 如果你不給他初始化值,默認給他的是預處理時候賦的undefined.任何數字與undefined 進行運算因為無法計算,所以輸出NaN

MadMarical
TA貢獻79條經驗 獲得超122個贊
你好。var sum進行了定義但是未初始化,導致sum被編譯器編譯為undefined。而parseint解析了字符串返回了一個十進制數(由于此處省略了第二個參數默認為10進制。)問題就出在這里,當一個undefined + 一個十進制數 = ?。編譯器無法進行對應的類型轉換,將會返回一個NaN(not a number),所以無論你進行多少次加法得到的結果是NaN。但是typeof(sum)為什么是number類型的呢?因為在js中NaN本身就是一個數值類型的東西。如果存疑,可以編寫程序直接輸出typeof(NaN)來求證一下。
以上是我的淺見,歡迎交流。

zsk13
TA貢獻1條經驗 獲得超1個贊
sum不賦值的時候typeof(sum)不是number,加上一個number后類型變成number,但是值為Nan,
賦值的時候初始為0,就是正常的算術運算。
添加回答
舉報
0/150
提交
取消