La différence entre la fenêtre[] et la fonction eval() - Javascript
J'ai été en utilisant à la fois en javascript ... ne sais pas vraiment la différence. Googler toujours montre les résultats pour la fenêtre "objet" ou "l'ouverture d'une nouvelle fenêtre en javascript" donc, ne pouvait pas trouver quoi que ce soit là.
eval("v"+e)
window["v"+e]
Parfois fenêtre qui fonctionne pour moi et à d'autres moments eval fonctionne ....
Alors, quelle est la différence entre la fonction eval() et la fenêtre[] ?
Désolé pour le newbie question si !
Norman
Pourriez-vous dire que, comme une question, s'il vous plaît? Plus précisément, ce que vous êtes vraiment se poser?
Quelle que soit la réponse, ne pas utiliser la fonction eval!
Je pense que c'est assez clair que la question est de savoir "s'il vous plaît expliquer la situation à moi".
jasongetsdown - petite question ... pourquoi ne pas eval être utilisé ? Est-il un meilleur moyen d'accéder à des variables locales comme var c = eval("ev"+d), où d=1 localement (cette valeur est transmise à une fonction) et je veux mettre la valeur de c égale à la valeur de locale varable ev1 ?
la réponse à cette question est, si vous êtes nouveau et à l'aide de
Quelle que soit la réponse, ne pas utiliser la fonction eval!
Je pense que c'est assez clair que la question est de savoir "s'il vous plaît expliquer la situation à moi".
jasongetsdown - petite question ... pourquoi ne pas eval être utilisé ? Est-il un meilleur moyen d'accéder à des variables locales comme var c = eval("ev"+d), où d=1 localement (cette valeur est transmise à une fonction) et je veux mettre la valeur de c égale à la valeur de locale varable ev1 ?
la réponse à cette question est, si vous êtes nouveau et à l'aide de
eval
, vous êtes probablement fait quelque chose de mal. Eval a un but, mais les nouveaux venus ne sont probablement pas à l'utiliser pour cela. (c'est une vieille question qui a été récemment mis en place, de sorte que cette question est destinée pour les autres)OriginalL'auteur Norman | 2010-07-20
Vous devez vous connecter pour publier un commentaire.
Un autre point qui n'a pas été abordé, c'est que
eval
permettra de résoudre la variable de référence à l'aide de la appelant variable d'environnement, par exemple:Donc, comme vous pouvez le voir, n'est pas tout à fait équivalents.
Si vous voulez simplement faire référence à un variable globale, je vous recommande d'utiliser le
window[prop]
approche et d'éviter les mauvaises surprises.pour accéder aux variables globales utilisation
window[prop]
, voir question pour savoir pourquoi vous ne devriez pas utilisereval
lorsque vous n'en avez pas besoin..OriginalL'auteur CMS
eval() interprète javascript arbitraire des états, alors qu'avec fenêtre, vous accédez à une propriété de l'objet window.
Dans votre exemple, vous semblez être l'aide d'un nom de propriété dans les deux eval() et la fenêtre[]. Comme la portée mondiale dans un navigateur est le même que l'objet de la fenêtre de la portée qu'ils vont évaluer de la même chose.
Vous pouvez penser à votre
eval("v"+e)
déclaration comme étant équivalent àeval("window['v'" + e +" ]")
.Oui, eval est presque toujours une mauvaise idée.
OriginalL'auteur Paul Grime
À la fois un retour de la variable globale. La différence est que si la variable n'est pas définie, vous obtiendrez un message d'erreur lors de l'exécution de la fonction eval() alors que la fenêtre['variableName'] renvoie undefined(pas une erreur), car l'accès à une propriété non définie n'est pas une erreur, mais l'accès à une variable non définie est une erreur.
OriginalL'auteur Marimuthu Madasamy
"v"+e
-> stringeval(x)
-> évalue la chaîne x, contenant expression javascriptwindow[x]
-> renvoie la fenêtre de propriété du même nom, comme tha valeur dex
est. c'est en fait peut être une variable globalepar conséquent, lorsque vous avez une variable globale
v1 = "foo"
, ete = 1
, puiseval("v"+e)
etwindow["v" + e]
fois de retour "foo"OriginalL'auteur mykhal