JavaScript 系列--JavaScript一些奇淫技巧的實現方法(三)數字取整,陣列求和
一、前言
簡短的sleep函式,獲取時間戳:https://www.mwcxs.top/page/746.html
數字格式化 1234567890 --> 1,234,567,890;argruments 物件(類陣列)轉換成陣列:
https://www.mwcxs.top/page/749.html
今天我們來介紹一下數字取整,陣列求和。
二、數字取整
1、普通版
const a = parseInt(2.33333);
parseInt()方法是解析一個字串引數,並返回一個指定基數的整數。這個就是我們最常用的取整的最常用的方式。
parseInt() 函式解析一個字串引數,並返回一個指定基數的整數 (數學系統的基礎)。
parseInt語法:parseInt(string, radix);
string:
要被解析的值。如果引數不是一個字串,則將其轉換為字串(使用 ToString
抽象操作)。字串開頭的空白符將會被忽略。
radix:
一個介於2和36之間的整數(數學系統的基礎),表示上述字串的基數。比如引數"10"表示使用我們通常使用的十進位制數值系統。始終指定此引數可以消除閱讀該程式碼時的困惑並且保證轉換結果可預測。當未指定基數時,不同的實現會產生不同的結果,通常將值預設為10。
2、進階版
const a = Math.trunc(2.33333)
Math.trunc()方法會將數字的小數部分去掉,只保留整數部分(常說的“取整”,不是四捨五入)。
注意:Internet Explorer
不支援這個方法,不過寫個 Polyfill
也很簡單:
Math.trunc = Math.trunc || function(x) {
if (isNaN(x)) {
return NaN;
}
if (x > 0) {
return Math.floor(x);
}
return Math.ceil(x);
};
數學的事情還是用數學方法來處理比較好。
3、~~number
這個符號是什麼鬼,沒有用過,不要緊,慢慢看。這個~~操作符也被稱為“雙按位非”操作符。你通常可以使用它作為替代Math.trunc()的更快的方法。
console.log(~~66.11) // 66
console.log(~~12.9999) // 12
console.log(~~6) // 6
console..log(~~-6.9999999999) // -6
console.log(~~[]) // 0
console.log(~~NaN) // 0
console.log(~~null) // 0
失敗時返回0,這可能在解決 Math.trunc() 轉換錯誤返回 NaN 時是一個很好的替代。
注意:但是當數字範圍超出 ±2^31−1 即:2147483647 時,異常就出現了。
// 異常情況
console.log(~~2147493647.123) // -> -2147473649