Maison  >  Article  >  interface Web  >  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 ?

伊谢尔伦
伊谢尔伦original
2017-07-18 13:19:491045parcourir

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"

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) {
  //对数组执行某项操作   
}

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)) {
  //对数组执行某些操作 
}

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]"

É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]

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]”
}

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

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

É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; 
}
.

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