2016-06-28 121 views
0

因此,在另一個答案 (How can I create a two dimensional array in JavaScript?) 我看到下面這個JS語法是什麼意思,什麼是'長度'?

function createArray(length) { 
var arr = new Array(length || 0), 
    i = length; 

if (arguments.length > 1) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    while(i--) arr[length-1 - i] = createArray.apply(this, args); 
} 

return arr; 
} 

createArray();  // [] or new Array() 

createArray(2); // new Array(2) 

createArray(3, 2); // [new Array(2), 
        // new Array(2), 
        // new Array(2)] 

這是什麼意思:大約是length || 0跟着逗號的使用

var arr = new Array(length || 0), 
    i = length; 

兩個部分我很困惑由i = length。 對於length || 0我做了一些實驗,我很困惑。 這裏是一個JSFiddle,我嘗試使用變量length,然後與變量blah完全相同,只在第二個上得到錯誤:https://jsfiddle.net/vrp0uhtL/4/您需要進入調試器。我只在鉻上測試過。

對於,i = length這只是簡短的聲明i也是一個var在同一行嗎?

感謝

編輯: 因爲我發現一些奇怪的事情發生,以區分這個問題類似於其他的: 爲什麼說:

var arr = new Array(length || 0) 
    console.log(arr) 

var arr2 = new Array(blah || 0) 
    console.log(arr2) 

將只產生一個錯誤的第二,當其他地方沒有定義長度或等效時,更具體地說,即使我沒有定義長度,爲什麼長度總是爲0(參見上面的JSFiddle)

+0

這意味着創建一個長度爲'length'或長度爲0的數組,如果'length'是虛假的。 falsy意味着表達式被評估爲'false'。此表達式使用稱爲短路的機制 – ftor

+0

['var'語句](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var) – str

+0

您的編輯是一個不同的問題(這是「[爲什麼在我的瀏覽器中定義了一個叫做length的全局變量?](https://developer.mozilla.org/en-US/docs/Web/API/Window/length)」),它只是間接的與「長度||」有關0'問題。 (請注意,在你的原代碼中,'length'是你的函數中的一個局部變量,與這個新問題無關) – Quentin

回答

0

new Array(length || 0)意味着您使用給定的參數創建一個新的數組,如果未定義它,它將是長度爲零的數組。逗號分隔變量聲明只是一種定義變量的方法,不需要爲每個變量使用新行。

1

在JS,如果你在一個賦值操作見||x = a || b這意味着x將只要a定義的值設置爲a,否則將被設置爲b

+0

不完全正確。單獨定義是不夠的,「a」必須評估爲「真實」。 – str

+0

'27!= true'和'0!= true',但是,語句'var a = 27 || 0'將變量'a'設置爲'27'。 –

+4

我沒有說'a''必須*真實,我說'a'必須*評估爲真。這段代碼'var a = 0; var b = a || 1;'雖然定義了'a',但會將'b'設置爲'1'。 – str

0

這裏發生的事情是,有問題的代碼是檢查是否有值傳入長度變量。如果有值,它將使用該值來設置新數組的長度和函數內部的長度var。如果不是,則會產生一個新的數組0.

函數執行此操作的原因是因爲能夠向該函數發送多個參數。在這個例子中,你可以看到你可以用一個或多個參數調用這個函數:createArray(3),createArray(3,2)。 ||運營商在線

var arr = new Array(length || 0) 

將檢查您是否仍然有一個值的長度。如果你已經達到了參數的末尾,最後一個長度將是未定義的,並且會創建一個長度爲0的新數組,這將告訴函數停止創建數組。

在許多編程語言可以在同一行聲明的相同類型的多個變量,以逗號分隔:

int a = 0, b = 1; 
var text, input;