JavaScript garantit-il l'ordre des propriétés des objets ?
P粉287254588
P粉287254588 2023-08-17 17:04:41
0
2
475
<p>Si je crée un objet comme celui-ci : </p> <pre class="brush:php;toolbar:false;">var obj = {}; obj.prop1 = "Foo" ; obj.prop2 = "Barre";</pre> <p>L'objet résultat ressemblera-t-il toujours à ceci ? </p> <pre class="brush:php;toolbar:false;">{ prop1 : "Foo", prop2 : "Bar" }</pre> <p> Autrement dit, les propriétés sont-elles dans le même ordre que celui dans lequel je les ai ajoutées ? </p>
P粉287254588
P粉287254588

répondre à tous(2)
P粉186897465

Oui (mais pas toujours dans l'ordre d'insertion).

La plupart des navigateurs parcourent les propriétés des objets dans l'ordre suivant :

  1. Clés entières positives par ordre croissant (et chaînes qui sont analysées en entiers, comme "1")
  2. Chaînes de clés dans l'ordre d'insertion (ES2015 le garantit, tous les navigateurs le respectent)
  3. Noms des symboles dans l'ordre d'insertion (ES2015 le garantit, tous les navigateurs le respectent)

Certains navigateurs plus anciens fusionnent la catégorie 1 et la catégorie 2, en itérant toutes les clés dans l'ordre d'insertion. Si vos clés sont susceptibles d'être analysées sous forme d'entiers, il est préférable de ne pas s'appuyer sur un ordre d'itération particulier.

La spécification actuelle du langage (depuis ES2015) préserve l'ordre d'insertion, mais différents navigateurs se comportent différemment dans le cas de clés qui se résolvent en entiers positifs (tels que "7" ou "99"). Par exemple, Chrome/V8 ne respecte pas l'ordre d'insertion lorsque les clés sont analysées sous forme de nombres.

Ancienne spécification du langage (avant ES2015) : l'ordre d'itération est techniquement indéfini, mais tous les principaux navigateurs adhèrent au comportement ES2015.

Veuillez noter que le comportement d'ES2015 est un bon exemple de spécifications de langage pilotées par le comportement existant, et non l'inverse. Pour une analyse plus approfondie de cet état d'esprit de compatibilité ascendante, consultez http://code.google.com/p/v8/issues/detail?id=164, un aperçu détaillé des décisions de conception du comportement de l'ordre d'itération de Chrome, des rapports de bogues Chrome. D'après un commentaire (plutôt subjectif) dans ce rapport de bug :

P粉478445671

Depuis ES2015, l'ordre d'itération des objets suit certaines règles, mais il ne suit pas toujours l'ordre d'insertion. En bref, l'ordre d'itération est une combinaison d'ordre d'insertion pour les clés de chaîne et d'ordre croissant pour les clés de type numérique :

// 键的顺序:1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

Cela peut être mieux réalisé en utilisant un tableau ou un objet MapMap对象可以更好地实现这一点。 MapObject. Map présente certaines similitudes avec Object et est garanti pour itérer les clés dans l'ordre d'insertion, sans exceptions :

Il est à noter qu'avant ES2015, l'ordre des propriétés dans les objets n'était pas du tout garanti. Définition d'objet de ECMAScript 3e édition (pdf)  :

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!