12個非常有用的JavaScript 技巧

在這篇文章中,我將分享12個非常有用的JavaScript 技巧。這些技巧可以幫助你減少並優化代碼

1)使用!!操作符轉換爲布爾類型

有時,我們需要檢查一些變量是否存在,或者它是否具有有效值,將它們視爲true值。做這種驗證時,您可以使用!!(雙反)一個簡單的!!變量,它會自動將任何類型的數據轉換成布爾類型。當變量爲:0null""undefined或者NaN時,!!變量 將返回false,否則將返回true。在實踐中瞭解它,看看這個簡單的例子:

function Account(cash) {  
    this.cash = cash;    this.hasMoney = !!cash;
}var account = new Account(100.50);  
console.log(account.cash); // 100.50 console.log(account.hasMoney); // truevar emptyAccount = new Account(0);  
console.log(emptyAccount.cash); // 0 console.log(emptyAccount.hasMoney); // false

在這種情況下,如果account.cash值大於0,account.hasMoney則爲true。

2)使用+操作符轉換爲數字類型

這個用法太神奇了!這樣做很簡單,但它只適用於字符串的數字,否則將返回NaN(不是數字)。看看這個例子:

function toNumber(strNumber) {  
    return +strNumber;
}console.log(toNumber("1234")); // 1234 console.log(toNumber("ACB")); // NaN

這個用法也可以使用Date,在這種情況下,它將返回時間戳:

console.log(+new Date()) // 1461288164385

3)Short-circuits conditionals

如果您看到類似的代碼:

if (conected) {  
    login();
}

您可以使用&&將變量(將被驗證)和函數的組合起來。例如,上面這段代碼可以在縮短爲:

conected && login();

您可以這樣做來檢查對象中是否存在某些屬性或函數。類似於以下代碼:

user && user.login();

4)使用||來賦一默認值

今天在ES6中有默認參數功能。爲了在舊瀏覽器中模擬此功能,您可以使用||(OR運算符)將默認值作爲要使用的第二個參數。如果第一個參數返回false第二個參數將被用作默認值。看這個例子:

function User(name, age) {  
    this.name = name || "Oliver Queen";    this.age = age || 27;
}var user1 = new User();  
console.log(user1.name); // Oliver Queen console.log(user1.age); // 27var user2 = new User("Barry Allen", 25);  
console.log(user2.name); // Barry Allen console.log(user2.age); // 25

5)在循環中將array.length緩存起來

這個技巧非常簡單,數據較大時用這種方式循環遍歷 對性能造成巨大的影響。基本上,幾乎所有人都寫這個同步for來遍歷一個數組:

for (var i = 0; i < array.length; i++) {  
    console.log(array[i]);
}

如果您使用較小的數組 - 這很好,但是如果處理大數組,則此代碼將在該循環的每次循環中重新計算數組的大小,這將導致一些延遲。爲了避免這種情況,您可以將array.length緩存到一個變量來使用它,而不是在循環中每次調用array.length

var length = array.length;  
for (var i = 0; i < length; i++) {  
    console.log(array[i]);
}

爲了使其精簡,可以寫成:

for (var i = 0, length = array.length; i < length; i++) {  
    console.log(array[i]);
}

6)檢測對象中的屬性

當您需要檢查某些屬性是否存在並避免運行未定義的函數或屬性時,此技巧非常有用。如果您打算編寫跨瀏覽器代碼,可能您也將使用此技術。例如,我們假設您需要編寫與舊版Internet Explorer 6兼容的代碼,並希望使用document.querySelector(),用它們的id來獲取一些元素。但是,在這個瀏覽器中,這個函數不存在,所以要檢查這個函數的存在,你可以使用in運算符,看這個例子:

if ('querySelector' in document) {  
    document.querySelector("#id");
} else {    document.getElementById("id");
}

在這種情況下,如果對象中沒有querySelector函數document,我們可以使用document.getElementById()作爲備用。

7)獲取數組中的最後一個項目

Array.prototype.slice(begin, end)當你設置beginend參數時,它會剪切數組。但是如果沒有設置end參數,這個函數將自動設置數組的最大值。我認爲很少有人知道這個函數可以接受負值,如果你設置一個負數作爲begin參數,你將從數組中獲取最後一個元素:

var array = [1, 2, 3, 4, 5, 6];  
console.log(array.slice(-1)); // [6] console.log(array.slice(-2)); // [5,6] console.log(array.slice(-3)); // [4,5,6]

8)數組截斷

這種技術可以鎖定數組的大小,這對基於要設置的元素數量刪除數組的某些元素非常有用。例如,如果您有一個包含10個元素的數組,但是您只想獲得前五個元素,則可以截斷數組,使其變小array.length = 5。看這個例子:

var array = [1, 2, 3, 4, 5, 6];  
console.log(array.length); // 6 array.length = 3;  
console.log(array.length); // 3 console.log(array); // [1,2,3]

9)全部替換

String.replace()函數允許使用String和Regex替換字符串,本身該函數只替換第一個匹配的值。但是您可以使用/g放在正則表達式的末尾,實現全部替換:

var string = "john john";  
console.log(string.replace(/hn/, "ana")); // "joana john" console.log(string.replace(/hn/g, "ana")); // "joana joana"

10)合併數組

如果需要合併兩個數組,可以使用以下Array.concat()函數:

var array1 = [1, 2, 3];  
var array2 = [4, 5, 6];  
console.log(array1.concat(array2)); // [1,2,3,4,5,6];

但是,它並不是合併大數組最合適的函數,因爲它將消耗大量的內存創建一個新的數組。在這種情況下,您可以使用Array.push.apply(arr1, arr2),它會將第二個數組合併到第一個數組中,而不是創建新的數組,從而減少內存使用量:

var array1 = [1, 2, 3];  
var array2 = [4, 5, 6];  
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];

11)將NodeList轉換爲數組

如果運行該document.querySelectorAll("p")函數,它將返回一個DOM元素數組,即NodeList對象。但這種對象不具有所有數組的功能,如:sort()reduce()map()filter()。爲了使用更多數組的功能,您需要將NodeList轉換爲數組。要實現這個功能只需使用這個技巧[].slice.call(elements)

var elements = document.querySelectorAll("p"); // NodeList var arrayElements = [].slice.call(elements); // Now the NodeList is an array var arrayElements = Array.from(elements); // 這是另一種將NodeList轉換成Array的方法

12)對數組隨機亂序

想要使用Lodash、underscore這樣的插件來實現數組隨機亂序,只需這個神奇的技巧:

var list = [1, 2, 3];  
console.log(list.sort(function() {  
    return Math.random() - 0.5})); // [2,1,3]

結論

現在,你已經學到了一些有用的JS技巧,它們主要用於縮減JavaScript代碼量,其中一些技巧在許多流行的JS框架都使用到,如Lodash,Underscore.js,Strings.js等。如果你知道其他JS技巧,歡迎分享!


原文鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章