作者:
xxxx9659 (嘎嘎嘎嘎嘎)
2014-11-11 01:40:35上個月面試一家公司出的 javascript 考題
其中有幾題很有趣 列出來跟大家討論
1. === 跟 == 這兩個運算元誰比較快?
a. === 快
b. == 快
c. 一樣快
d. 不一定 看狀況
我寫 a
但是後面註解 //有人在管 js 的低階運算效能嗎??!! 根本一樣快吧...
後來主管說服我說 == 要多做一次形態轉換 所以比較慢
2.
var ary = [];
for(var i = 0; i < 10; ary[i++] = i);
alert(ary); //顯示為何?
a. 0,1,2,3,4,5,6,7,8,9
b. 1,2,3,4,5,6,7,8,9,10
c. 語法錯誤 當掉
d. 不一定 看狀況
這題我寫 a
但我後面註解 //實際上這是 "未定義行為" 任何後果都有可能 要看js引擎的實作
但是主管很肯定答案是 b
他覺得 i++ 先取值再+1 而且取完值後 一定在中括號內就作完 +1 的動作
3. 寫出你有用過的 pattern 跟 framework 並簡單介紹
這題我空白...
雖然主管只是想測試我反應 考試答案正不正確不是重點
但是我還是想知道 這幾題有沒有更好更正統的解釋?
作者:
carylorrk (carylorrk)
2014-11-11 14:34:00我的意思是指兩個目的一樣且預期拿到結果一樣的東西才能比較速度。像是在學資料結構,大家都知道 hash map和 rb-tree map 的差別,當你只需要 access 單 element時當然是 hash map 快,但是當你的需要是可以 access單一 elemnt,然後又可以 iterate 整個 map 並拿到排序過的 (key, value) pairs,那顯然就是要 tradeoff 了你如果用 hash map,可能就要歷遍整個 map 然後再排序同樣的,當你預期的結果是 x == null 的話,用 ===你可能需要多次比較 (undefined、NaN 等等)或是explicit 的轉型。只有這樣的比較纔是公平的。== 和 === 雖然相似,但是語義上根本不同。沒有限定使用情景就直接問,顯然無法直接回答。