Maison > interface Web > js tutoriel > le corps du texte

JavaScript détermine si un objet est un résumé de la méthode tableau

伊谢尔伦
Libérer: 2017-07-26 11:41:03
original
1374 Les gens l'ont consulté

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

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

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

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]'; 
}
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!