Maison  >  Article  >  interface Web  >  Résoudre le problème de savoir pourquoi [1,2] + [3,4] n'est pas égal à [1,2,3,4] en JavaScript

Résoudre le problème de savoir pourquoi [1,2] + [3,4] n'est pas égal à [1,2,3,4] en JavaScript

黄舟
黄舟original
2017-08-10 11:02:182260parcourir

Problème

Je souhaite ajouter un tableau à un autre tableau, j'ai donc écrit le code suivant dans Firebug :


[1,2] + [3,4]

Mais, de façon inattendue , le résultat :


"1,23,4"

mais pas ce à quoi je m'attendais :


[1,2,3,4]

Réponse

L'opérateur + de JavaScript a deux objectifs :

  • Ajouter deux nombres

  • Concaténer les deux chaînes ;

La spécification ne définit pas le comportement de l'opérateur + sur les tableaux, donc JavaScript convertit d'abord le tableau en chaîne, puis effectue l'opération + sur la chaîne.

Si vous souhaitez concaténer deux tableaux, vous pouvez utiliser la méthode concat du tableau :


[1, 2].concat([3, 4]) // [1, 2, 3, 4]

Présentation de l'opérateur + en javascript

JavaScript a 6 types de données intégrés : (Annotation : à partir du lien donné, l'auteur original doit désigner les types de données du système de types d'origine. JavaScript a en fait deux systèmes de types. Le premier système de types est utilisé <code><strong><span style="color: #ff0000;">typeof</span></strong> typeofinstanceof  est appelé le système de types primitif, et le deuxième système de types est basé sur celui-ci, il est développé à partir du type d'objet, c'est-à-dire le système de types d'objets. Le système de types d'objets est identifié par

  • )

    .
  • booléen
  • numéro
  • chaîne
  • fonction
  • objet

On notera que, null <strong><span style="color: #ff0000;">[]</span></strong>  et [] sont deux types complètement différents lors de l'utilisation de <code><strong><span style="color: #ff0000;">typeof</span></strong>   objecttypeof. +

opération, ils reviennent tous

数组不是基本类型. Mais lors de l'utilisation de l'opérateur , la façon dont cela fonctionne dans ces deux cas est différente. En JavaScript, Array, son existence n'est qu'une syntaxe enrobée de sucre, c'est en fait function Instance de classe. (ps : Function 

est en fait la syntaxe enrobée de sucre de l'instance de classe javascriptnew Number(5).) Si vous dites Maintenant que votre esprit est encore clair, il est temps d'ajouter un peu d'enthousiasme. Types de wrapper d'objets pour tels que new Boolean(true) <strong><span style="color: #ff0000;">new String("abc")</span></strong> object ,  Number Boolean

et <span style="color: #ff0000;"><code>Number new String("abc") sont également de type , ce ne sont pas des nombres, des booléens ou des chaînes. Cependant, les opérateurs arithmétiques et Boolean représentent des nombres. Vous vous souvenez de l'opérateur + dont j'ai parlé plus tôt ? Ses objets d'opération sont des nombres et des chaînes, c'est-à-dire String, number, boolean ou string,

----------------------------------------------------------------------------------------
           | undefined | boolean | number | string | function | object | null   | array
----------------------------------------------------------------------------------------
undefined  | number    | number  | number | string | string   | string | number | string
boolean    | number    | number  | number | string | string   | string | number | string

number     | number    | number  | number | string | string   | string | number | string

string     | string    | string  | string | string | string   | string | string | string
function   | string    | string  | string | string | string   | string | string | string

object     | string    | string  | string | string | string   | string | string | string
null       | number    | number  | number | string | string   | string | number | string

array      | string    | string  | string | string | string   | string | string | string
-------------------------------------------------------------------------------------------

,

.

Le tableau suivant est le type de résultat obtenu après que l'opérateur + ait opéré sur différents types
var o = { 
    valueOf : function () { return 4; } 
};

Ce tableau est applicable à Chrome 13, Firefox 6, Opera 11 et IE9. Devoir : Vérifiez la compatibilité des autres navigateurs. Remarque : l'opération + sur les objets définis par l'utilisateur ne produit pas toujours un résultat de chaîne. Cela dépend principalement de la façon dont la conversion du type d’objet en type natif est implémentée. Par exemple : Le calcul de o + 2 obtiendra 6, qui est un nombre ; le calcul de o + '2' obtiendra '42', qui est une chaîne de caractères.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn