[譯] 新手和老手都將受益的JavaScript小技巧

這篇文章會分享一些不爲人知但卻很強大的JavaScript技巧, 各個級別的JavaScript開發者都會從中受益.
 
1. 用數組的length屬性清空數組
 
咱們知道在JS中對象類型是按引用傳遞的, 有時候咱們卻會被這個規則所制約. 好比下面的例子:
 
var arr1 = arr2 = [1, 2, 3];   
 
//Change arr1 
arr1 = []; // arr2 will still be [1,2,3]

 

arr1和arr2在初始化的時候指向同一個數組 [1, 2, 3] , 以後arr1從新指向 [] , arr2的引用並無變化, 仍然指向 [1, 2, 3]. 可是若是咱們想讓arr1和arr2都指向 [] 該怎麼作呢? 咱們可使用數組的   length  屬性. 當咱們設置 arr1.lenget = 0 , 數組arr1中的元素被清空. 然而引用關係並無變化, 因此 arr1 和 arr2 如今都指向了空數組 [] .
 
2. 用push方法合併數組
 
咱們習慣用 concat() 方法來合併2個數組, 好比:
var arr1=[1,2,3];
var arr2=[4,5,6];
var arr3=arr1.concat(arr2);
arr3;
[1, 2, 3, 4, 5, 6]

 

 
咱們一樣能夠用 push() 方法來實現:
var arr1=[1,2,3];
var arr2=[4,5,6];
Array.prototype.push.apply(arr1,arr2);
arr1
[1, 2, 3, 4, 5, 6]

 

 
(譯者注: 關於二者速度的比拼, 我在Firefox和Chrome下獲得了不一樣的結果, 請看   http://jsperf.com/javascript-array-concat-vs-push 更全的測試用例:  http://jsperf.com/array-concat-vs-push-2/14 )
 
3. 特徵檢測
 
許多API裏咱們都能見到特徵檢測的代碼, 查看瀏覽器是否支持某個屬性或方法爲了有更好的瀏覽器兼容性. 好比:
 
if(window.opera){
    console.log("OPERA");
}else{
    console.log("NOT OPERA");
}

 

這段代碼是正確的, 可是可能不夠效率. 它會在瀏覽器中初始化一些資源, 更效率的作法是檢查對象中是否有這個key.
 
if("opera" in window){
    console.log("OPERA");
}else{
    console.log("NOT OPERA");
}

 

4. 檢驗一個對象是不是數組
 
在JavaScript裏, 能夠用 typeof 來檢查變量類型. typeof 能夠返回:   number  ,   boolean,   string,   object,   function    undefined. 並無   array  . 實際上數組是object類型. 那麼怎麼來驗證對象是不是數組呢? 在最新的ECMAScript 5中, 能夠用 Array.isArray(object) 來檢驗. 可是ECMAScript 5尚未推廣開.
 
咱們能夠用下面的方法:
 
var obj=[];
Object.prototype.toString.call(obj)=="[object Array]";
true

 

 
相關文章
相關標籤/搜索