JavaScript 對小弟而言,真是一門似懂非懂的語言XD
儘管使用 JavaScript 也三年多,但畢竟 Java 後端工程師會用到的仍有限。
最近到處惡補後,蒐集整理了一些 JavaScript 小技巧,
一來做個紀錄,增加印象未來也方便複習XD
二來希望能幫上初學 JavaScript 的朋友們~
字串轉數字
假設今天有個數字字串如 ‘1’ 或 ‘3.14159’,要轉成數字可能會用以下幾種方法
1 | var numberStr = '3.14159'; |
我們也可以使用一個 +
搞定XD 工程師是很懶惰的職業,這樣寫才夠短
1 | var number3 = +numberStr; // 3.14159 |
浮點數字串轉整數
還是剛剛那個 ‘3.14159’,今天將其轉成整數 3 的話可以這樣寫
1 | var number4 = Math.floor(numberStr); |
你也可以使用 ~
這樣寫 工程師真的很懶惰
1 | /** |
簡化字串 indexOf() >= 0
還記得前例的 ~(-1) = 0
嗎,因此我們又可以繼續偷懶簡化程式碼了
1 | if (someStr.indexOf('a') >= 0) { |
使用 ~
將其改為
1 | if (~someStr.indexOf('a')) { |
p.s 這邊應用到的是 JavaScript 的 if 條件為 0
是不成立的
檢查布林值
有時需要對一個變數檢查是否存在(或是否有值),若存在(或有值)則回傳 true
。
可以使用 !!
做到這件事情,只要該變數的值為:0
、null
、''
(空字串)、undefined
、NaN
(Not a Number)、false
都會回傳 false
,其餘則會回傳 true
1 | var foo; |
請注意,變數為字串 ‘false’,在 !!
轉換下仍會變為 true
簡化 if
如果今天需先檢查某個條件,程式碼如下
1 | if (isConnected) { |
可以使用 &&
來簡化程式碼如下
1 | isConnected && sendMsg(); |
如果是要確定物件不是 null
後,呼叫該物件方法也可以這樣寫
1 | /** |
替參數設定預設值
在 ES6 中,有所謂的 Default parameters 替參數設定初始值
萬一瀏覽器不支援 ES6 怎麼辦呢,我們可以使用 ||
實現這件事情
1 | function add(i, j) { |
陣列
陣列合併
如果要不靠迴圈合併兩個陣列,一般會使用 Array.concat()
:
1 | var arr1 = [0, 1, 2]; |
由於 Array.concat()
是另外建立新的陣列後合併,因此在合併較大陣列時,會大量消耗記憶體….
為了效能考量,建議使用 Array.prototype.push.apply(arr1, arr2);
1 | var arr1 = [0, 1, 2]; |
如果使用 ES6,還可以利用展開運算子
1 | var arr1 = [0, 1, 2]; |
陣列清空
宣告一個新的陣列
1 | var arr1 = [0, 1, 2]; |
此方法雖然簡單,但是若該陣列有被別的變數參照時,會無法清除
將陣列長度設為 0
1 | var arr1 = [0, 1, 2]; |
若想清除其他也參照此陣列的變數,那麼應該採用此方法
應該避免的各種方法….!!
Array.splice()
1
2
3
4var arr1 = [0, 1, 2];
var arr2 = arr1;
arr1.splice(0, arr1.length);
console.log(arr2); // []Array.slice()
1
2
3
4var arr1 = [0, 1, 2];
var arr2 = arr1;
arr1 = arr1.slice(arr1.length); // 需重新 assign
console.log(arr2); // [0, 1, 2]while
迴圈 +Array.pop()
,速度最慢,千萬不要這樣寫!!1
2
3
4
5
6var arr1 = [0, 1, 2];
var arr2 = arr1;
while(arr1.length) {
arr1.pop();
}
console.log(arr2); // []
希望這些小技巧能幫助到那些跟我一樣對 JavaScript 不是太熟的朋友們~
若文章內容有誤,還請不吝指教 <(_ _)>