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!