我正在瀏覽我公司的代碼庫,發現一個將陣列與 0 進行比較的陳述句,如下所示:
陣列 > 0;
如果我們讓array = [“1”],它只有一個元素,上面的陳述就成立了;但是如果 let array = ["1", "2"] 或 [],則該陳述句將變為 false;
有人可以解釋這個陳述句的含義,為什么它會產生這樣的結果,以及它是否在任何情況下都有用?
uj5u.com熱心網友回復:
當您使用>時,引擎將首先將雙方轉換為一個原始,這將呼叫valueOf,并且,如果它沒有回傳一個原始,那么toString如果它存在則該方法。對于陣列,只有toString方法回傳一個原語,所以這就是使用的 - 它的作用等同于做.join(',').
console.log(['1', '2'].toString());
再次查看規范,在將陣列轉換為原始陣列后,我們現在有一側是字串(來自陣列),另一側是數字。因此,雙方隨后都轉換為數字:
d. Let nx be ? ToNumeric(px).
e. Let ny be ? ToNumeric(py).
然后比較數字。
在 的情況下['1'],您得到1 > 0,這是真的。
在 的情況下['1', '2'],生成的字串是'1,2',它不能被轉換成數字,所以下面的運行:
h. If nx or ny is NaN, return undefined.
當undefined由該演算法回傳時,整體>計算為false.
如果它在任何情況下都有用嗎?
對于干凈、可理解的代碼,它通常不會。最好顯式轉換為比較首先具有直觀意義的型別。
uj5u.com熱心網友回復:
由于您將陣列與數字進行比較,因此 JavaScript 會將其轉換為數字。您可以通過執行手動執行此操作Number(value)。從我的測驗來看,它似乎只是試圖將第一個值轉換為一個數字。但是,如果有多個索引,則回傳NaN. 如果沒有值,它會回傳0。
據我想象,這種情況真的沒有多大用處。在沒有背景關系的情況下很難準確地說出它的含義,但我的猜測是,處理某些極端情況是一種奇怪的嘗試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/484836.html
標籤:javascript 数组
上一篇:在jquery中選擇元素
