給定一個非整數或浮點數(例如3.5),當使用該數字作為索引時會發生什么?
當使用浮點數訪問陣列或字串的索引時,undefined回傳。
'hello'[3.5]; // => undefined
當使用浮點數作為傳遞給的索引時,數字似乎被四舍五入或小數點被忽略Array.prototype.slice()。String.prototype.slice()
['a','b','c','d','e'].slice(3.5, 4.5); // => ['d']
'hello'.slice(0.5, 1.5); // => 'h'
為什么會有不同的行為,這里實際發生了什么?
uj5u.com熱心網友回復:
.slice在內部將其引數四舍五入為整數。
String.prototype.slice(開始,結束)
- 讓 O 成為 ? RequireObjectCoercible(此值)。
- 讓 S 成為 ? ToString(O)。
- 設 len 為 S 的長度。
- 讓 intStart 成為 ? ToIntegerOrInfinity(開始)。
- 如果 intStart 為 -∞,則令 from 為 0。
- 否則,如果 intStart < 0,則令 from 為 max(len intStart, 0)。
- 否則,令 from 為 min(intStart, len)。
- 如果 end 未定義,則令 intEnd 為 len;否則讓 intEnd 成為?ToIntegerOrInfinity(結束)。
- ...
在哪里ToIntegerOrInfinity
- 令整數為 floor(abs(?(number)))。
相反,當你這樣做時
'hello'[3.5];
不會發生這種舍入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516527.html
下一篇:/在腳本變數中
