1. 程式人生 > >JavaScript奇淫技巧(一)

JavaScript奇淫技巧(一)

這裡寫圖片描述

if-else簡化寫法

  • 程式碼中若出現多層if-else巢狀,程式碼就會顯得臃腫不堪,這時可採用替代方案來濃縮程式碼。
  • 常規寫法:(臃腫不堪)
if(){
    if(){
        //……
    }
    else{
        //……
    }
}
else{
    //……
}
  • 簡化寫法:(一行搞定)
(a) && (b) || (c);

上述表示式含義:若條件a為true則執行表示式b,否則執行表示式c。
原本多行的if-else語句一行就可以搞定。
此外,該句式支援多層巢狀,從而可以實現複雜的條件判斷。

  • 缺點:這種方式將原本多行的if-else濃縮成一行,可讀性大大降低,因此在實際開發中要慎用。雖然逼格很高,很像是大神寫的程式碼,但過一陣子也許你自己都很難讀懂。因此,面對高逼格和可讀性時你要慎重選擇。

清空陣列的快速做法

  • 常規方法:
var array = [1,2,3,4,5];
array = [];

通常我們採用上述辦法,但這種方法有嚴重缺陷!它實際上並沒有清空原本的陣列物件!
它建立了一個新的、空的陣列物件[],然後將它賦給原本的**陣列變數**array,因此原本非空的陣列物件並沒有清空,而是等待垃圾回收機制處理。

此外,這種方式用在函式中會有風險,示例:

var array = [1,2,3,4,5];

//清空函式方法1
function clearArray1(array){
    array = [];
    return array
; } //清空函式方法2 function clearArray2(array){ array = []; } array = clearArray1(array);//array為[] clearArray2(array);//array仍為[1,2,3,4,5]

上述示例定義了兩種清空陣列的方法,他們都採用給陣列賦上[]的方式,clearArray1成功清空陣列,而clearArray2卻不行。

  • 冷門方法:
    為了避免上述方法的種種弊端,可以使用以下方式來清空陣列:
array.splice(0,array.length);

本方法藉助JS提供的splice函式,刪除本陣列的所有元素。由於splice函式是對陣列物件本身進行操作,從而不會出現上述問題。

  • 快速方法:
    清空陣列最簡單明瞭的方式如下:
array.length;

一句話搞定!
由於陣列的length屬性是一個可讀寫的值,JS就是通過它來判斷當前陣列的長度,因此我們完全可以使用它決定當前陣列的長度。

一句話描述“閉包”

閉包:當一個函式作為引數傳給另一個函式,或作為外層函式的返回值,只要內層函式沒有結束,外層函式就不會被銷燬,內層函式可以獲取外層函式的任意屬性。

i++和++i作為函式引數的區別?

function func(i){
 alert(i);
}

var i=1;
func(i++);//1
func(++i);//3

這個問題很常規。
i++會先執行後續操作,再進行+1操作,因此函式內部得到的是1;
++i會先+1,再執行後續操作,因此函式得到的是+1後的結果。

JQuery物件與JS DOM物件相互轉化

  • JQuery——>DOM物件
//現有一個JQuery物件:
$("#id");
//轉化成DOM物件
$("#id")[0]

PS:$(“xxx”)返回結果一定是一個數組,即使是根據ID來取。

  • DOM物件——>JQuery物件
//現有一個DOM物件:
var dom = document.getElementById("id");
//轉化成JQuery物件
$(dom)

判斷陣列中是否存在某物件

  • JS原生indexOf
var array = [obj1, obj2];
array.indexOf(obj1);//若存在返回下標,不存在返回-1

這種方法用的最常用,但某些IE不相容。

  • JQuery inArray
$.inArray(value, array)//若存在返回下標,不存在返回-1
  • 自己寫一個
if (!Array.indexOf) {  
    Array.prototype.indexOf = function (obj) {  
        for (var i = 0; i < this.length; i++) {  
            if (this[i] == obj) {  
                return i;  
            }  
        }  
        return -1;  
    }  
}  

初始化二維陣列

二維陣列本質上是一個元素為一維陣列的一維陣列,因此你首先需要初始化一個一維陣列:

var array = [];

再給這一維陣列新增一維陣列作為元素:

for(var i=0; i<10; i++){
    array.push([]);
}

JS除法會有小數部分

JS除法和Java不同,兩個整數相除會有小數部分,如果只需整數,則需呼叫相關函式取整。

//向下取整
parseInt(5/2)
Math.floor(5/2)

//向上取整,有小數就整數部分加1
Math.ceil(5/2)

//四捨五入.
Math.round(5/2)

這裡寫圖片描述