簡體   English   中英

JavaScript中的關聯數組是一個錯誤嗎?

[英]Associative arrays in javascript is a bug?


我們知道JavaScript不支持帶有命名索引的數組。 (關聯數組)
但是,當我們在javascript中聲明關聯數組時,它不會引發錯誤,而且效果驚人。

let arr = [];
arr.name = 'John';
arr.lastName = 'Doe';
arr.age = 46;

let obj = {name: 'John', lastName: 'Doe', age: 46};


console.log('arr') ,它將顯示:

[name: "John", lastName: "Doe", age: 46] //Shown with a special array sign
   age: 46
   lastName: "Doe"
   name: "John"
   length: 0
   __proto__: Array(0) //Shown Array Not Object


和:

console.log(arr instanceof Array);  //true
console.log(arr instanceof Object); //true

console.log(obj instanceof Array);  //false
console.log(obj instanceof Object); //true


如您所見,JavaScript顯示具有數組特定符號的關聯數組。 [] (括號)
但這將其視為具有該數組的對象,因為某些數組方法和屬性(例如length )將產生錯誤的結果。
另外,如果JavaScript將這種類型的數組用作對象,為什么不對對象使用特殊標記? {} (大括號)
簡而言之,這是JavaScript解釋器中的錯誤還是某種能力?

在Javascript中,數組不僅被“視為”對象,而且是對象。 如您所見,由於arr instanceof Object是true。

因此,與所有對象一樣,您可以將屬性分配給數組。

length是數組的特殊屬性,它表示數組元素的數量。 因為在您的示例中, arr沒有元素,所以其length屬性正確為0。對象不會自動具有特殊的length屬性。

數組是一個對象-它帶有您可以使用的自己的方法。 該對象不是數組-您不能使用Array-object的方法。

我發現此文字用幾句話描述了它: http : //www.javascripter.net/faq/arrayobject.htm

要添加上面提到的Cyber​​sam:

讓arr = [];

這將創建一個“數組文字”。 它基本上是一個數組(是一個對象),長度為0。如果您推入值,例如:

arr.push( '你好')

那么它的長度將為1。但是,您添加了如下屬性:

arr.name ='約翰';

現在,它看起來更像是一個關聯數組,但這實際上只是預期的行為,因為您可以將其應用於任何對象。

為了使事情變得更加混亂,還有Array(),它是另一個對象(不是文字)。 它的行為相同,只是您可以實例化它,就像類對象一樣。 但是,幾乎幾乎不需要這樣做,所以請堅持使用文字。

一些鏈接對此進行了更多解釋:

https://www.w3schools.com/js/js_arrays.asp

https://www.w3schools.com/js/js_datatypes.asp

https://www.w3schools.com/js/js_objects.asp

暫無
暫無

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

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