Comment déterminer si une variable est un tableau dans ES6

青灯夜游
Libérer: 2023-01-18 18:17:21
original
1385 Les gens l'ont consulté

Méthode de jugement : 1. Utilisez la fonction isArray() de l'objet Array pour déterminer si la variable est un tableau. La syntaxe est "Array.isArray(obj)". renvoie faux. 2. Jugez par "Object.prototype.toString()", la syntaxe est "Object.prototype.toString.apply(a) === '[object Array]'".

Comment déterminer si une variable est un tableau dans ES6

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

Le mécanisme de typage faible de JS fait de la détermination des types de variables une question obligatoire lors des entretiens pour les développeurs front-end juniors. Généralement, je l'utiliserai comme première question lors de l'examen des candidats, puis je procéderai sur cette base.

Déterminer si une variable est un tableau dans ES5

Dans ES5, nous avons au moins les 5 façons suivantes pour déterminer si une valeur est un tableau :

var a = []; 
// 1.基于instanceof 
a instanceof Array; 
// 2.基于constructor 
a.constructor === Array; 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; 
// 5.基于Object.prototype.toString 
Object.prototype.toString.apply(a) === '[object Array]';
Copier après la connexion

Ci-dessus, sauf Object.prototype.toString, aucune autre méthode ne peut correctement déterminer un type de variable.

Il faut savoir que l'environnement d'exécution du code est très complexe, et qu'une variable peut utiliser toutes sortes d'astuces pour confondre son créateur. Jetons un coup d'œil :

var a = {
    __proto__: Array.prototype
}; 
// 分别在控制台试运行以下代码 
// 1.基于instanceof 
a instanceof Array; // => true 
// 2.基于constructor 
a.constructor === Array; // => true 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); // => true 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; // => true
Copier après la connexion

Ci-dessus, les 4 méthodes renvoient vrai. Pourquoi ? Nous venons de spécifier manuellement l'attribut __proto__ d'un objet comme Array.prototype, ce qui a fait hériter de l'objet Array. Cette méthode d'héritage irresponsable a provoqué l'effondrement instantané du système de jugement basé sur l'héritage.

Non seulement cela, nous savons également qu'Array est constitué de données de tas et que la variable pointe uniquement vers son adresse de référence, donc l'adresse référencée par l'objet Array de chaque page est différente. Pour un tableau déclaré dans une iframe, son constructeur est l'objet Array dans l'iframe. Si un tableau x est déclaré dans l'iframe et affecté à la variable y de la page parent, alors y instanceof Array est utilisée sur la page parent et le résultat doit être faux. Le dernier renvoie une chaîne, il n'y a donc pas de problème de référence. En fait, les interactions entre plusieurs pages ou systèmes ne sont possibles qu'avec des chaînes.

Déterminer si une variable est un tableau dans ES6

Compte tenu de l'utilisation courante des tableaux, la méthode Array.isArray est ajoutée dans ES6. Utiliser cette méthode pour déterminer si une variable est un tableau est très simple. , comme suit :

Array.isArray([]); // => true 
Array.isArray({0: 'a', length: 1}); // => false
Copier après la connexion

En fait, utiliser Object.prototype.toString pour déterminer le type d'une valeur est également un standard pour les principales bibliothèques grand public. Par conséquent, le polyfill d'Array.isArray ressemble généralement à ceci :

if (!Array.isArray){ 
    Array.isArray = function(arg){ 
        return Object.prototype.toString.call(arg) === '[object Array]'; 
    }; 
}
Copier après la connexion

[Recommandation associée : Tutoriel d'apprentissage javascript]

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal