Maison > interface Web > js tutoriel > Quelles méthodes sont utilisées pour détecter les types de tableaux en javascript ?

Quelles méthodes sont utilisées pour détecter les types de tableaux en javascript ?

伊谢尔伦
Libérer: 2017-07-18 13:19:49
original
1065 Les gens l'ont consulté

type d'opérateur.

Il n'y aura aucun problème pour les objets de types Function, String, Number et Undefined, mais cela ne sert à rien pour les objets Array :

alert(typeof null); // "object" 
alert(typeof []); // "object"
Copier après la connexion

instanceof

Applicable lorsqu'il n'y a qu'un seul environnement d'exécution global. S'il contient plusieurs frameworks, il y aura plus de deux versions différentes du constructeur Array Si vous passez d'un framework à un autre. frame transmet un tableau, et le tableau entrant et le tableau créé nativement dans le deuxième cadre ont des constructeurs différents, c'est-à-dire des types différents


if (value instanceof Array) {
  //对数组执行某项操作   
}
Copier après la connexion

Array. Méthode isArray()

Comme elle est nouvelle dans ES5, elle ne prend en charge que IE9+, Firefox 4+, Safari 5+, Opera 10.5+ et Chrome


if (Array.isArray(value)) {
  //对数组执行某些操作 
}
Copier après la connexion

Méthode Object.prototype.toString.call()

Applicable à tous les environnements, ne prend en charge que les objets natifs, Object La méthode toString() ne peut pas détecter le nom d'un constructeur non natif. Tout constructeur personnalisé par le développeur renverra [object Object]

Principe : L'appel direct de la méthode native toString() de Object sur n'importe quelle valeur renverra une chaîne au format de [object NativeConstrctorName], chacun Il y a un attribut de classe à l'intérieur de la classe, et cet attribut spécifie le nom du constructeur dans la chaîne ci-dessus.


var value = []
console.log(Object.prototype.toString.call(value))//"[Object Array]"
Copier après la connexion

Étant donné que le nom du constructeur d'un tableau natif n'a rien à voir avec la portée, l'utilisation de la méthode toString() peut garantir que la même valeur est affichée.

Pourquoi ne pas utiliser la propre méthode toString() de l'objet ?


var value = []
console.log(value.toString())//" "
value = ['pp','oo']
console.log(value.toString())//"pp,oo"
value = ['pp',"oo"]
console.log(Object.prototype.toString.call(value))//[object Array]
Copier après la connexion

La méthode tostring() de Array a été remplacée (cela est vrai pour de nombreux objets natifs), elle appellera donc la méthode toString() toute seule constructeur, Renvoie d'autres chaînes

Vous pouvez également utiliser cette méthode pour déterminer s'il s'agit d'une fonction native ou d'une expression régulière


function isFunction(value){
    return Object.prototype.toString.call(value) === “[object Function]”
}//不适用于IE中以COM对象实现的任何函数
function isRegExp(value){
    return Object.prototype.toString.call(value) === “[object RegExp]”
}
Copier après la connexion

constructeur de l'objet Attributs

En plus de instanceof, nous pouvons également utiliser l'attribut constructeur de chaque objet pour déterminer son type, nous pouvons donc faire ceci :

var arr = []; 
alert(arr.constructor == Array); // true
Copier après la connexion

On dirait comme les deux derniers. La solution est étanche, mais l'est-elle vraiment ? Des circonstances imprévues surviennent et lorsque vous faites la navette entre plusieurs frames, des problèmes frustrants surviennent :

var iframe = document.createElement('iframe'); 
document.body.appendChild(iframe); 
xArray = window.frames[window.frames.length-1].Array; 
var arr = new xArray(1,2,3); // [1,2,3] 
// 哎呀! 
arr instanceof Array; // false 
// 哎呀呀! 
arr.constructor === Array; // false
Copier après la connexion

Étant donné que chaque iframe a son propre environnement d'exécution, l'instanciation multi-frames Les objets ne partagent pas la chaîne de prototypes avec les uns les autres, donc le code de détection ci-dessus échoue ! Que dois-je faire? ? Eh bien, JavaScript est un langage dynamique. Peut-être que le "type canard" à l'huile de serpent peut nous aider. "S'il marche comme un canard et cancane comme un canard, alors traitez-le comme un canard, qui peut détecter les capacités uniques." de certains objets du tableau pour porter des jugements. Cette méthode a été utilisée par certaines personnes, comme le framework Prototype. Jetons un coup d'œil à la méthode Object.isArray qu'il implémente :

isArray: function(object) { 
return object != null && typeof object == "object" && 
'splice' in object && 'join' in object; 
}
Copier après la connexion
.

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