Maison > interface Web > js tutoriel > 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

黄舟
Libérer: 2017-08-10 11:02:18
original
2358 Les gens l'ont consulté

Problème

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


[1,2] + [3,4]
Copier après la connexion

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


"1,23,4"
Copier après la connexion

mais pas ce à quoi je m'attendais :


[1,2,3,4]
Copier après la connexion

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]
Copier après la connexion

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 < code> <strong><span style="color: #ff0000;">[]</span></strong> sont deux types complètement différents lors de l'utilisation de <code><strong><span style="color: #ff0000;">typeof</span></strong> object</span></strong>typeof. <code>+

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
-------------------------------------------------------------------------------------------
Copier après la connexion

,

.

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; } 
};
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Derniers numéros
Qu’est-ce que le garbage collection JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Que sont les fonctions de hook JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Comment obtenir la date actuelle en JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
c++ appelle javascript
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal