我是JS的初學者。我正在寫一個方法來接收輸入數組,並且需要檢查它是否爲空。我的第一種方法是在方法內的if語句中使用array === []
作爲條件,但它不起作用。它在我編寫條件array.length === 0
時起作用。我以爲他們有相同的意思。有人能解釋爲什麼前者不起作用嗎? 在此先感謝。Javascript中條件「array === []」和「array.length === 0」
回答
比較
if (array === [])
比較同一性兩個對象的。一個對象是從來沒有等於(相同)另一個不同的對象,至少在JavaScript中定義了「平等」的意義上。 JavaScript中的對象比較始終只是測試某個表達式是否引用某個特定的已知對象。比較不會「查看」比較對象。
一個或許非明顯的細節是表達式[]
不是對某些全局概念「空陣列」的引用;它是一個請求,創建一個全新的空陣列。因此,它也是比較
if ([] === [])
將是錯誤的,因爲在===
運營商創建一個新的,不同陣列的兩側的情況。
因爲array === []
正在比較兩個對象是否相同。而在JS中,當兩者完全相同時,兩個對象是相同的。檢查兩個對象是否完全相同的唯一方法是如果它們在內存中佔據相同的空間。
我們該怎麼做?我們檢查兩個對象是否指向相同的內存地址。在其他編程語言中,他們將這個內存地址稱爲指針。
由於[]
正在創建一個對象,因此它是一個新對象,因此比較返回false。
另一方面,array.length === 0
正在比較原始值(數字)和JS中,如果兩個原始值具有相同的內容,他們是相等的,所以它返回true。
第一個檢查:array === []
檢查兩個數組是否具有相同的類型(檢查)以及它們是否是相同的數組。 原因的結果爲否是因爲:
- 儘管它們都是陣列
- 儘管它們都是空的,
- 它們不一樣的陣列(
array
被存儲在位置甲,並且[]
存儲在其他地方
這是由javascript如何處理數組和對象引起的:javascript不檢查內容,它只檢查它們是否指向內存中相同的數組或對象。這就是爲什麼你必須使用第二個選項。
更詳細的例子:
// for strings and numbers, javascript checks CONTENT
let a = 'Bill';
let b = 'Bill';
console.log(a === b); // TRUE
// for arrays and objects, javascript checks POINTERS
let a = ['Bill'];
let b = ['Bill'];
console.log(a === b); // FALSE
// also:
var a = ['Bill'];
var b = a;
console.log(a === b); // TRUE
a = ['Joe'];
console.log(a === b); // TRUE
console.log(b); // 'Joe'
優秀的答案。值得嚴格指出。一個數組被認爲是JS中的一個對象。 –
- 1. Array.length = 0和Array = []之間的區別?
- 2. 多維數組中array.length和array [0] .length之間的區別?
- 3. Javascript/Loopback - array.length返回0
- 4. 可以在Javascript中array.length低於0?
- 5. NodeJS差異Object.keys(array).length和array.length
- 6. 陣列的值與array.length = 0
- 7. Array.length等於0總是
- 8. JavaScript中的Array.length問題
- 9. C#沒有array.length從0開始?
- 10. (數組中的x)和(i = 0; i <array.length; i ++)
- 11. 爲什麼&array!=&array [0]?
- 12. 即使它包含值,Array.length也是0 - Javascript
- 13. JavaScript的array.length是0,直到我做了一個警報()
- 14. 陣列推後的Array.length讀數爲0
- 15. 的JavaScript array`s長度保持爲0
- 16. PostgreSQL的ARRAY ALLOF和ANYOF條件
- 17. Javascript Array Index Minus One
- 18. JavaScript Array
- 19. Javascript Array排序和拼接
- 20. InputStream.read(array)不返回array.length時到達的流結束了嗎?
- 21. JavaScript Array
- 22. Javascript Array和while循環
- 23. Haxe/php Array.length
- 24. array(0)如何與array()不同
- 25. Javascript Array對象和值
- 26. Javascript中的「Double-array」
- 27. Javascript Array
- 28. 關於Javascript Array獨特
- 29. Array.Length VS Array.Count
- 30. 效率調用array.length的在JavaScript
檢查,看是否'.length'屬性是零。 – Pointy
嗯,不,它確實*不*意味着「同樣的事情。 :) – deceze