var scores = [10,11,12]; var total = 0; for(var score in scores){ total += score; } var mean = total/scores.length; console.log(mean);
恭喜你:答錯了!面試
恭喜你:答錯了!數組
解釋: for in 循環循環的值永遠是key, key是一個字符串
。因此total的值是:'0012'。它是一個字符串,字符串'0012'/3,0012會被轉換成12,而後除以3,結果是4。瀏覽器
這個示例是來自《編寫高質量JavaScript的68個方法》的第49條:數組迭代要優先使用for循環而不是for in循環
。
既然已經發布,就可能有好事者拿出去當面試題。這個題目頗有可能坑一堆人。其中包括我。安全
這裏涉及到許多js的基礎知識.優化
for in 循環是循環對象的索引屬性,key是一個字符串。
數值類型和字符串相加,會自動轉換爲字符串
字符串除以數值類型,會先把字符串轉爲數值,最終結果爲數值
正確方法code
var scores = [10,11,12]; var total = 0; for(var i=0, n=scores.length; i < n; i++){ total += scores[i]; } var mean = total/scores.length; console.log(mean);
這樣寫有幾個好處。對象