[JavaScript] 忍之道解謎(二) - Array addition
Q. 相加結果為?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[] + [] = ? |
這個題目屬於典型的 JS quirk,因為JavaScript 是弱型別(weak type)的語言,所以JavaScript 在進行運算時,只會處理 Number, String 的運算,其它類型的資料會被自動轉換為上述兩種型態之一再進行運算,如果無法處理即會丟出 Type Error。
JavaScript 型態自動轉換的方法 ( ToPrimitive() )
JavaScript 會依下列步驟轉換其數值型態 ( Date 物件 2、3 步驟對調):
(1) 如果運算元是 primitive 即回傳,否則則下一步。
(2) 呼叫該 Object 的 valueOf 方法,如果回傳值是 primitive 即回傳,如果不是則下一步。
(3) 呼叫該 Object 的 toString 方法,如果回傳值是 primitive 即回傳,如果不是丟出Type Error。
以這個題目為例,兩個空陣列相加時,會先經過上述的轉換,[].valueOf() 將會回傳 [] ,其型態為 Object ,不是 primitive 所以再呼叫其 toString() ,回傳的是空字串 "" ,兩個空字串相加還是空字串,因此這題的答案為 ""。
留言
張貼留言