En développement, nous avons souvent besoin de déterminer si un objet est de type tableau
Opérateur 1.typeof Pour plusieurs types d'objets tels que Fonction, Chaîne, Nombre, Undéfini, etc., c'est entièrement. capable , mais quand il s'agit d'un Array
var arr=new Array("1","2","3","4","5"); alert(typeof(arr));
vous recevrez une réponse d'objet, ce qui est un peu décevant
2. Une valeur booléenne indiquant si l'objet est une instance d'une classe spécifique.
Utilisation : result = object instanceof class, toujours le tableau à l'instant, réessayez, eh bien, il renvoie true avec succès
var arrayStr=new Array("1","2","3","4","5"); alert(arrayStr instanceof Array);
Petit résumé : Il semble que les questions dont nous avons discuté aujourd'hui aient été. a répondu, mais en fait, la navette entre plusieurs images entraînera de gros problèmes
Code
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1","2","3","4","5");//这个写法IE大哥下是不支持的,FF下才有 alert(arr instanceof Array); // false alert(arr.constructor === Array); // false
renvoie deux faux résultats, ce qui est décevant.
ECMA-262 écrit
Object.prototype.toString( ) Lorsque la méthode toString est appelée, les étapes suivantes sont suivies :
1. Obtenez la propriété [[Class]] de cet objet.
2. Calculez une valeur de chaîne en concaténant les trois chaînes « [objet », Résultat (1) et « ] ».
3. Renvoie le résultat (2)
La définition de la spécification ci-dessus. comportement de Object.prototype.toString : obtenez d'abord une propriété interne [[Class]] de l'objet, puis renvoyez une chaîne similaire à "[object Array]" comme résultat basé sur cette propriété (vous devriez avoir lu l'ECMA standard Comme nous le savons tous, [[]] est utilisé pour représenter des attributs utilisés en interne dans le langage et non directement accessibles de l'extérieur, appelés "attributs internes"). En utilisant cette méthode, combinée à l'appel, nous pouvons obtenir les attributs internes [[Class]] de n'importe quel objet, puis convertir la détection de type en comparaison de chaînes pour atteindre notre objectif. Jetons d'abord un coup d'œil à la description d'Array dans la norme ECMA :
ECMA-262 écrit
new Array([ item0[, item1 [,…]]])
Le [[Class ]] la propriété de l'objet nouvellement construit est définie sur « Array ».
Profitant donc de cela, la troisième méthode apparaît.
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
} l'appel modifie la référence this de toString à l'objet à détecter; et renvoie La représentation sous forme de chaîne de cet objet est ensuite comparée pour voir si cette chaîne est « [object Array] » afin de déterminer s'il s'agit d'une instance de Array. Peut-être voulez-vous demander, pourquoi pas o.toString() directement ? Eh bien, bien que Array hérite d'Object, il aura également une méthode toString, mais cette méthode peut être réécrite et ne pas répondre à nos exigences, et Object.prototype est la crosse d'un tigre, et peu de gens osent le toucher, donc il peut garantir sa "pureté" dans une certaine mesure :)
Différent des solutions précédentes, cette méthode résout très bien le problème de la construction d'objets cross-frame Après tests, la compatibilité des principaux navigateurs est également très bonne, donc vous. peut être assuré d'une utilisation. La bonne nouvelle est que de nombreux frameworks, tels que jQuery, Base2, etc., prévoient d'utiliser cette méthode pour implémenter certains types d'objets spéciaux, tels que des tableaux, des expressions régulières, etc., sans avoir à les écrire nous-mêmes.
De plus, Ext3 a également été modifié pour cette façon d'écrire
isArray : function(v){ return toString.apply(v) === '[object Array]'; }
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!