Maison  >  Article  >  interface Web  >  JavaScript détermine si un objet est un tableau_javascript astuces

JavaScript détermine si un objet est un tableau_javascript astuces

WBOY
WBOYoriginal
2016-05-16 15:24:191035parcourir

Cet article partage trois méthodes JavaScript pour déterminer si un objet est un tableau,

1. type de

La première chose à laquelle nous penserons est d'utiliser typeof pour détecter le type de données, mais pour les types de base tels que Function, String, Number, Undefined, etc., il peut être détecté en utilisant typeof Par exemple, le code est. comme suit :

function test(){}
console.log(typeof 1); // number
console.log(typeof test); // function 
console.log(typeof "yunxi"); // string
console.log(typeof undefined); // undefined

Mais pour les tableaux ou les expressions régulières, utiliser typeof pour les détecter n'est pas satisfaisant, car lorsque nous détectons des tableaux ou des expressions régulières, le type renvoyé sera un objet, comme le montre le code suivant :

console.log(typeof []); // object
console.log(typeof /\d+/g); // object

2. Instance de

À partir de là, nous pouvons facilement penser à utiliser instanceof pour détecter si un objet est une instance d'un tableau. Cette détection renverra un booléen, s'il s'agit d'un tableau, il retournera vrai, sinon il retournera faux ; à nouveau Le code ci-dessus pour détecter s'il s'agit d'un tableau est le suivant :

console.log([] instanceof Array); // true
console.log(/\d+/g instanceof Array); // false

Comme vous pouvez le voir ci-dessus, l'utilisation de instanceof peut effectivement déterminer s'il s'agit d'un élément de tableau ;
3. Attribut constructeur

En JavaScript, chaque objet a un attribut constructeur, qui fait référence au constructeur qui initialise l'objet, comme déterminer le type d'un objet inconnu, on peut donc écrire une méthode comme suit, le code est le suivant :

function isArray(obj) {
  return typeof obj == 'object' && obj.constructor == Array
}
// 测试demo
console.log(isArray([])); // true
var a = {"a":1};
console.log(isArray(a)); // false

var b = [1,2,3];
console.log(isArray(b)); // true
console.log(isArray(/\d+/g));// false

Comme vous pouvez le voir ci-dessus, vous pouvez également déterminer s'il s'agit d'un élément de tableau en appelant la méthode isArray.
Nous pouvons maintenant voir que pour les deuxième et troisième points, il semble que l'utilisation respectivement de la méthode instanceof et de l'attribut constructor puisse déterminer s'il s'agit d'un tableau, mais il existe également des exceptions, comme lors de l'utilisation d'un tableau dans une page lors de l'utilisation d'un cross -frame iframe. , échouera car les tableaux créés dans différentes iframes ne partageront pas leurs attributs de prototype entre eux, le test de code suivant peut être vérifié~
 ;

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下是不支持的,标准浏览器firefox,chrome下有

console.log(arr); // 打印出 ["1", "2", "3", "4", "5"]
console.log(arr instanceof Array); // false 
console.log(arr.constructor === Array); // false

Nous ne pouvons pas déterminer si un objet est un tableau avec les méthodes ci-dessus ; mais nous pouvons voir dans ECMA262 que nous pouvons utiliser la méthode Object.prototype.toString.call() pour déterminer si un objet est un tableau ; le code suivant :

function isArray(obj) {
  return Object.prototype.toString.call(obj) == '[object Array]';
}
// 代码调用
console.log(isArray([])); // true
console.log(isArray([1,2,3])); // true

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");

console.log(arr); // ["1","2","3","4","5"]
console.log(isArray(arr)); // true

Ce qui précède représente l'intégralité du contenu de cet article pour vous aider à apprendre à déterminer si un objet est un tableau en JavaScript. J'espère que cela vous sera utile pour votre apprentissage.

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