簡體   English   中英

JavaScript Array元素僅僅是Array對象屬性嗎?

[英]Are JavaScript Array elements nothing more than Array object properties?

我觀察到以下內容:

var o = {}; // empty JS object
var a = []; // empty JS array

o.myproperty = "I am property";
a.push("I am array element");

alert(o['myproperty']); // alerts "I am property"
alert(o.myproperty); // alerts "I am property"
alert(a[0]); // alerts "I am array element"
alert(a['0']); // alerts "I am array element"

/* Of course, accessing an array element using dot notation (e.g. a.0) would cause a
   SyntaxError: Unexpected number (in JavaScript variable names cannot begin with numbers.)
*/

也:

'myproperty' in o // evaluates to true
0 in a // true
'0' in a // true

delete o.myproperty; // true, o is now empty
delete o['myproperty']; // true, o is now empty
delete a[0]; // true, a contains now 1 undefined element
delete a['0']; // true, a contains now 1 undefined element

似乎將元素添加到數組中實際上在數組對象上創建了一個帶編號的屬性,該屬性隨后用於通過引用訪問該元素。 但是有些事情不能像在普通對象屬性上那樣對這些數組元素屬性起作用(例如,上述刪除操作)。 所以...

TL; DR ...是否可以通過看不見的編號數組對象屬性通過引用訪問javascript數組元素?

編輯似乎是這樣: 為什么在數組迭代中使用“ for ... in”是個壞主意?

ArrayObject上添加的唯一唯一內容是.length屬性,以及一些特定於數組的方法,例如.push 就是這樣,在幕后, Array只是一個Object .length參數實際上使它可以用作數組。 它允許您使用for (i = 0; i < arr.length; i++)循環以有序方式迭代屬性。 當您將.push()新元素插入數組或進行某些其他特定於數組的操作時, .length屬性將更新。 實際上,這就是使對象作為已索引的有序列表工作所需的全部。

要使訪問器值成為數組中的索引 ,它應該:

  • 是一個非負整數( 01100200 );
  • 如果轉換為數字(從string ),則應為非負整數(“ 0”,“ 1.000”)

例如:

a['100'] // as index a[100]
a['0']   // as index a[0]
a[1.00]  // as index a[1]

在所有其他情況下,訪問器都被視為數組對象的屬性

a[-1]       // as a property a['-1']
a['myProp'] // as a property a['myProp']

是什么使數組與常規對象不同:使用索引時, length屬性會自動更新。 length應始終比最高索引大1。

數組是對象,最簡單的查看方法是[] instanceof Object ,它返回true

是的,通過與對象屬性相同的引用來訪問數組元素。

刪除對象的屬性時,實際上是將該屬性設置為undefined,因此對象或數組的屬性相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM