Internet Explorer: “de la console n'est pas défini” Erreur
J'ai été en utilisant console.log()
en JavaScript, j'ai écrit et une erreur de: console is not defined
a été jeté dans Internet Explorer (a bien fonctionné dans d'autres navigateurs).
Je l'ai remplacé par:
if (console) console.log("...");
Si console
est undefined
, j'attendrais la condition à évaluer que false
. Ergo, la déclaration console.log
ne serait pas exécutée et ne renvoie pas d'erreur.
Au lieu de cela, une erreur d': console is not defined at character 4
est levée.
Est-ce un IE bug? Ou est-ce "si" condition de vraiment illégal? Il semble absurde, car si if (console)
est illégal, alors if (console==undefined)
devrait être illégal aussi.
Comment êtes-vous censé vérifier undefined
variables?
console
n'existe pas dans IE, sauf si la console est en fait ouvert.- BTW, vous avez peut-être une autre
console
objet, donc à toute épreuve solution serait de vérifier queconsole.log
existe et est une fonction. - double possible de 'console" n'est pas défini d'erreur d'internet explorer
- Ai-je vraiment écrire "Ergo"??? Ou est-ce que @Matt McDonald édité?
- Ergo a été ajoutée par l'éditeur "user1385191" 🙂
Vous devez vous connecter pour publier un commentaire.
Si
console
lui-même n'existe pas du tout, il déclenche une erreur, car vous avez accès à une variable non définie. Tout commeif(abc) {}
renvoie une erreur.Depuis
console
réside danswindow
, etwindow
ne existent toujours, cela devrait fonctionner:Fondamentalement, l'accès à une propriété qui n'existe pas est gratuit et ne renvoie pas d'erreur (il n'évalue à
undefined
, à défaut de laif
condition). Cependant, il est illégal pour accéder à un non déclarées variable.if ('console' in window)
fonctionnera aussi bienif('console' in window)
, mais travaillent tous les deuxD'autres réponses vous a donné la cause racine.
Cependant, il existe une meilleure solution que d'utiliser
if
avant tout appel àconsole.*
Ajouter cette (fois), avant d'intégrer l'un de vos scripts qui utilisent la console:
Cela va créer un "pseudo" console uniquement si elle n'existe pas, alors que "la console est undefined' erreurs disparaîtront et vous n'aurez pas à demander si la console existe à chaque fois.
Avec cela, vous appelez simplement
console.log
ou de toute méthode console de n'importe où, sans problèmes.Espère que cette aide.
Cheers
logMsg
arbitrairement) dans la fonction de signature pour être cohérent, puisque vous serez en passant quelque chose à être imprimé dans le journal. Cela permet aussi d'éviter toute intellisense les erreurs JS activé IDEdans internet explorer, l'objet de console n'est pas réellement définie, sauf si votre outils de développement sont ouverts au moment où la fenêtre de charges.
pour résoudre votre problème, l'emballage de tous vos console de tirages dans une instruction if:
vous devez également actualiser chaque page une fois que vous ouvrez les outils de développement afin de voir la console de tirages. <3 IE
C'est une drôle de chose sur les variables non déclarées. La JS moteur essaie de résoudre la variable à une propriété de
window
. Ainsi, habituellement,foo == window.foo
.Mais, si cette propriété n'existe pas, il renvoie une erreur.
(Qui devrait être "foo n'est pas déclaré" à mon humble avis, mais peu importe.) Cette erreur ne se produit pas lorsque vous explicitement de référence de la fenêtre de propriété:
...ou déclarer cette variable:
...ou l'utiliser pour l'initialisation:
La chose étrange est que la
typeof
opérateur empêche aussi cette erreur:Donc, pour résumer les choses: Vous ne pouvez pas utiliser les variables non déclarées dans les expressions, sauf si il y a une propriété de
window
avec le même nom, ou de l'utiliser comme un opérande detypeof
. Dans votre exemple,window.console
n'existe pas, et il n'y a pas var déclaration. C'est pourquoi vous obtenez une erreur.Comment à ce sujet? N'ai pas essayé mais
Modifier de @yckart réponse
À l'aide de c.la longueur comme entrée à une fonction qui définit c ne fonctionne pas. Aussi, vous êtes juste de réaffectation des éléments du tableau avec noop quand vous devriez ajouter des méthodes à la fenêtre.console.
Vous pouvez utiliser le ci-dessous pour donner plus d'assurance que vous avez obtenu toutes les bases couverts. À l'aide de
typeof
première permettra d'éviter touteundefined
erreurs. À l'aide de===
veillera également à ce que le nom du type est en fait la chaîne "undefined". Enfin, vous pourrez vous souhaitez ajouter un paramètre à la fonction de signature (j'ai choisilogMsg
arbitrairement) pour assurer la cohérence, puisque vous ne passer que vous voulez afficher dans la console de la fonction log. Cela aussi vous garder intellisense précis et évite tous les avertissements/erreurs dans votre JS conscient de l'IDE.Inspiré par @Edgar Villegas Alvarado réponse, terminé les méthodes et en a fait un peu plus simple:
Édité pour mettre dans une IIFE et de corriger une erreur de syntaxe!
Certains navigateurs n'ont pas
console
activée lorsque la dev-tools est fermé. Aussi, on rencontre ce problème avec WebViews ou des iFrames où la console est désactivée.L'erreur dans ces cas est -
Uncaught ReferenceError: console is not defined
Inspiré par beaucoup de réponses ici, que j'ai développé une bibliothèque pour ce cas d'utilisation: https://github.com/sunnykgupta/jsLogger
Caractéristiques:
log
,warn
,error
,info
.