2010-06-22 5 views
7

J'ai une fonction JavaScript où quelqu'un peut passer quoi que ce soit, et j'itérer sur chacune de ses touches en utilisant laVérifiez s'il est sûr de itérer sur une variable JavaScript

for x in obj 
syntaxe

. Cependant, cela entraîne une erreur s'ils passent une primitive (chaîne ou nombre); le comportement correct est que la fonction agisse de la même manière que sur un objet sans clé.

je peux faire un bloc try..catch pour se déplacer, mais est-il une autre façon (plus succincte)?

Répondre

7
x && typeof(x) === 'object' 

Cela est vrai pour les objets et les tableaux (si vous ne voulez pas habituellement des tableaux avec itérer sur for..in).

EDIT: Fix, par CMS.

+3

Bon test, la seule chose que je pourrais ajouter que 'typeof' est un opérateur unaire et non une fonction, de sorte que les parens faites juste une expression autour' x', puis en appliquant l'opérateur. Aussi, alors que je suis pédant et stupide, puisque 'typeof' renvoie toujours une chaîne, l'opérateur' == 'serait probablement une petaseconde plus rapide. Tout ça pour dire, cela est tout à fait bien ... –

+1

Le seul problème peut être 'null', est une primitive et' typeof' est malheureusement complètement faux: 'typeof null == « object'' – CMS

+2

Alex: Pourquoi '= = 'être plus rapide que' === '? Selon la spécification ECMAScript, exactement les mêmes étapes seraient effectuées pour les deux comparaisons dans ce cas. –

2

Il y a un certain nombre de façons dont vous pouvez en déduire que, voici une bonne:

function isIterable(obj) { 
    if (obj && obj.hasOwnProperty) { 
    return true; 
    } 
    return false; 
} 

Vous pouvez choisir un certain nombre d'entre eux.

Questions connexes