回答
它聲明變量「ARR」,並將其值是已在所有腦幹(大概在一些外範圍)的另一變量,除非該變量不爲「truthy」在這種情況下「ARR」是設置爲引用一個新的空數組。
因此,如果已經存在的「ARR」的值爲null
,0
,false
,或""
,或者是undefined
,則本地「ARR」將是一個空數組。否則,它將具有與外部「arr」相同的值。
你會常常看到,在這樣的情況:
var arr;
function whatever() {
var arr = arr || [];
...
}
有時人們這樣做:
function questionable(arr) {
var arr = arr || [];
在這種情況下,var
是不必要的。
這一切都有效,因爲JavaScript中的||
運算符明顯不同於其他類似C語言的堂兄弟。在JavaScript中,||
表達式的值是而不是被強制爲布爾值。相反,它是左手操作數或右手操作數的值。它確實檢查這些值以確定它們是否「真實」,但是布爾轉折是內部的。如果左邊是「truthy」,那麼||
表達式的值就是該值;否則,這是右側的價值。當左邊是「truthy」時,根本不評估右邊。
實例化的Array
如果arr
是falsy一個new
實例。
在C#中,這種模式被稱爲「空合併操作」。如果你熟悉C#你會做類似如下:
string foo = bar ?? String.Empty
基本上在Javascript和其他語言(如Perl)中,||
通常用作短路操作符。如果您有需要被分配到其他5個變量之一的值,以先到爲準定義的變量,你可以嘗試這樣的:
a = b || c || d || e || f;
這將評估b
。如果它的值是true
,那麼a
將被分配b
,就是這樣。如果發現b
爲false
,則搜索將傳播至c
。通常需要將變量與自身進行比較來檢查是否分配新值。這就是a = a || b
所做的。如果是Perl,你可以縮短到a ||= b
。
雖然它實際上是「a | = b」,但語法(如「a || = b」)也存在於C中。儘管如此,感謝您的信息,這非常有幫助。 –
隨時,夥計。繼續編碼! – SexyBeast
- 1. 這段Javascript代碼是做什麼的?
- 2. 這個javascript代碼是做什麼的?
- 3. 這是什麼行代碼是做
- 4. 這行PHP代碼是做什麼的?
- 5. 這行Python代碼是做什麼的?
- 6. jquery - 這行代碼是做什麼的?
- 7. 這行C#代碼是做什麼的?
- 8. 這些代碼行是做什麼的?
- 9. 這行代碼是做什麼的?
- 10. 這些代碼行是做什麼的?
- 11. 這是什麼混淆JavaScript代碼段意味着/做什麼?
- 12. 這是什麼(無用?)JavaScript代碼做什麼?
- 13. 這個javascript代碼在做什麼?
- 14. Javascript:這個代碼做什麼?
- 15. 這個javascript代碼在做什麼?
- 16. 這段JavaScript代碼在做什麼?
- 17. 這段JavaScript代碼做了什麼?
- 18. 這段代碼是做什麼來確定數組的大小?
- 19. 這個javascript代碼是做什麼的?它是惡意的嗎?
- 20. 這個C代碼是做什麼的?
- 21. 這個clojure代碼是做什麼的?
- 22. 這段java代碼是做什麼的?
- 23. 這個Groovy代碼是做什麼的?
- 24. 這是什麼代碼做perl的
- 25. 這個jquery代碼是做什麼的?
- 26. 這個java代碼是做什麼的?
- 27. 這個Scheme代碼是做什麼的?
- 28. 這個rails代碼是做什麼的?
- 29. 這些代碼是做什麼的?
- 30. 這段代碼是做什麼的?
請注意,var arr = foo || [];如果foo未定義,可能會導致錯誤。這兩個陳述是相同的。 – AlexMA
你的意思是「它可能...」?意味着它在什麼情況下會拋出錯誤? –
如果foo未定義,它將*總是*拋出一個錯誤。我重寫了這句話,但沒有改變這個詞。 – AlexMA