2009-12-25 14 views

Répondre

52

Si vous voulez vérifier si un tableau x existe et créer si elle ne le fait pas, vous pouvez faire

x = (typeof x != 'undefined' && x instanceof Array) ? x : [] 
+2

Cela fonctionne dans la plupart des cas, mais il ne vous couvrira pas si vous envisagez de vérifier un tableau instancié à partir d'un constructeur 'Array' global différent - cela peut se produire lors de l'écriture de scripts. – James

+1

C'est vrai. Comment pourrait-on gérer cette affaire? – Rich

+2

@Rich: Voir ma réponse ici: http://stackoverflow.com/questions/1961528/javascript-check-if-array-exist-if-not-create-it/1961653#1961653, il se comportera correctement sur plusieurs environnements DOM encadrés. – CMS

11

Vous pouvez utiliser le typeof operator pour tester non défini et le instanceof operator pour tester si elle est une instance de Tableau:

if (typeof arr == "undefined" || !(arr instanceof Array)) { 
    var arr = []; 
} 
+0

A mes yeux, cela est plus facile à lire que la version de Rich. – DOK

+0

Vous pouvez ignorer la première vérification, car 'undefined' n'est pas une instance de tableau. – whitfin

+1

@zackehh Si vous le faites, il peut lancer une erreur si 'arr' n'est pas encore défini – David

-4

Si vous parlez d'un environnement de navigateur toutes les variables globales sont membres de l'objet fenêtre. Donc, pour vérifier:

if (window.somearray !== undefined) { 
    somearray = []; 
} 
+0

Désolé, mauvaise réponse. Voir la réponse de Gumbo pour un meilleur code. – slebetman

43
var arr = arr || []; 
+10

Mais cela ne vérifie pas si * arr * est un tableau. – Gumbo

+4

Vous avez raison. Il n'était pas clair à partir de la question s'il est nécessaire de vérifier qu'il s'agissait d'un tableau à l'avance, ou simplement de vérifier si la variable est déjà définie. C'est un idiome commun, et est plus court et plus simple que les autres affichés, donc j'ai pensé que je l'afficherais et laisserais le questionneur décider si c'est suffisant. –

+2

Si 'arr' est déjà défini dans la portée correspondante, alors pourquoi s'embêter avec' var ... '? Vous pouvez juste faire 'arr = arr || []; ' – James

6

Si vous voulez vérifier si la objet est déjà un tableau, pour éviter le well known issues de l'opérateur instanceof lorsque vous travaillez dans des environnements DOM multi-encadrées, vous pouvez utiliser la méthode Object.prototype.toString:

arr = Object.prototype.toString.call(arr) == "[object Array]" ? arr : []; 
+0

Besoin de déclarer' arr' – kangax

+0

@kangax Déclaration n'est pas nécessaire dans ce contexte. –

+0

@Justin Johnson Comment ça? – kangax

9
let list = Array.isArray(x) ? x : []; 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray

Ou si var x pourrait être un tableau et que vous voulez vous assurer qu'il est l'un:

let list = [].concat(x); 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

+0

Jetez 'x n'est pas défini' dans les deux cas –

+1

'x' est la variable qui pourrait être un tableau ou non. Vous définissez cela. Ceci est juste un exemple de code ... – mynameistechno

Questions connexes