「Wat」演講中令人費解的JavaScript 行為
CodeMash 2012 的「Wat」演講強調了JavaScript 中的一些特殊行為,它是值得探索它們以了解背後發生的事情
[] []
與空數組一起使用的加法運算子 ( ) 將運算元轉換為基元並將它們連接起來。由於數組的預設原始值為空字串,因此 [] [] 的結果也是空字串。
[] {}
JavaScript 中的物件有一個 toString()呼叫時傳回「[object Object]」的方法。因此,[] {} 會產生一個對象,特別是字串「[object Object]」。
{} []
在語句中使用時,{} 會被解析為一個空塊,因此傳回未定義。這個運算子將未定義的運算元強制轉換為數字,導致 {} [] 為 0(而「Wat」談話提到它應該為 NaN)。
{} {}
類似到 {}[] 時,第一個 {} 被解析為空塊,導致未定義。但是,該運算子無法將字串「[object Object]」(第二個{} 的toString() 值)強制轉換為數字,從而導致NaN.
Array(16). join ("wat" - 1)
ToNumber() 將"wat" - 1 轉換為NaN,因為從字串中減去數字會得到非數字 價值。 ToPrimitive() 然後將 NaN 轉換為字串“NaN”,在連接陣列元素時重複 16 次。
結論
這些看似奇怪的行為源自於 JavaScript 的原始轉換規則以及與陣列和物件相關的特定方法。透過了解這些底層機制,您可以避免意外結果並充分利用 JavaScript 的強大功能。
以上是為什麼 JavaScript 在這些奇怪的算術運算中會產生意想不到的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!