2013年5月14日 星期二 | By: 雞米

[JavaScript] 忍之道解謎(二) - Array addition



Q. 相加結果為?


這個題目屬於典型的 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() ,回傳的是空字串 "" ,兩個空字串相加還是空字串,因此這題的答案為 ""。

0 意見:

張貼留言