Console is not defined javascript как исправить

Я был с помощью console.log() в каком-то JavaScript я написал и ошибку:console is not defined был брошен в Internet Explorer (отлично работал в других браузерах).

Я был с помощью console.log() в каком-то JavaScript я написал и ошибку:console is not defined был брошен в Internet Explorer (отлично работал в других браузерах).

Я заменил его с:

if (console) console.log("...");

если console is undefined, Я ожидал бы, что состояние будет оцениваться как false. Следовательно, утверждение console.log не будет выполнен и не должен выдавать ошибку.

вместо ошибка: console is not defined at character 4 бросается.

это IE жучок? Или это условие «если» действительно незаконно? Это кажется абсурдным, потому что если if (console) незаконно, то if (console==undefined) должно быть тоже незаконным.

как вы должны проверить для undefined переменные?

9 ответов


если console не существует, он выдает ошибку, потому что вы обращаетесь к неопределенной переменной. Прямо как if(abc) {} выдает ошибку.

С console проживает в window и window тут всегда существуют, это должно работать:

if(window.console) ...

в основном, к свойства это не существует бесплатно и не бросает ошибку (она просто оценивается в undefined, не if состояние). Однако, доступ к необъявленному переменная.


другие ответы дали вам первопричину.
Однако, есть лучшее решение, чем использование if перед любым вызовом console.*

добавьте это (один раз) перед включением любого из ваших скриптов, использующих консоль:

//Ensures there will be no 'console is undefined' errors
window.console = window.console || (function(){
    var c = {}; c.log = c.warn = c.debug = c.info = c.error = c.time = c.dir = c.profile = c.clear = c.exception = c.trace = c.assert = function(s){};
    return c;
})();

это создаст «псевдо» консоль, только если она не существует, так что ошибки «консоль не определена» исчезнут, и вам не придется спрашивать, существует ли консоль каждый раз.
С этим, вы просто позвоните console.log или любой метод консоли везде, без проблемы.

надеюсь, что это помогает.
Ура!—5—>

31

автор: Edgar Villegas Alvarado


в internet explorer объект консоли фактически не определен, если средства разработчика не открыты во время загрузки окна.

чтобы устранить проблему, оберните все отпечатки консоли в Оператор if:

if (typeof window.console !== 'undefined') {
    ...
}

вам также необходимо обновить каждую страницу после открытия инструментов разработчика, чтобы увидеть отпечатки консоли.


это забавная вещь о необъявленных переменных. Движок JS пытается разрешить переменную свойству window. Так обычно,foo == window.foo.

но, если это свойство не существует, он выдает ошибку.

alert(foo); // Syntax error: foo is not defined

(должно быть «foo is not объявил» ИМХО, но это неважно.) Эта ошибка не возникает, когда вы явно ссылка на свойство окна:

alert(window.foo); // undefined

…или заявить, что переменная:

var foo;
alert(foo); // undefined

…или используйте его для инициализации:

foo = 1; // window.foo = 1

странно то, что typeof оператор также предотвращает эту ошибку:

alert(typeof foo); // "undefined"

Итак, подводя итог: вы не можете использовать необъявленные переменные в выражениях, если нет свойства window С тем же именем, или вы используете его как операнд typeof. В вашем примере, window.console не существует, и нет декларации var. Вот почему вы получаете ошибку.

4

автор: user123444555621


Как насчет этого? Не пробовал, хотя

if (typeof console == "undefined" || typeof console.log == "undefined") var console = { log: function() {} };

правка @yckart это

использование c.длина в качестве входных данных для функции, которая определяет c, не будет работать. Также вы просто переназначаете элементы в массиве с помощью noop, когда вы должны добавлять методы в окно.приставка.

(function(w){
  var c = 'assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,table,time,timeEnd,timeStamp,trace,warn'.split(','),
  noop = function () {};

  w.console = w.console || (function (len) {
    var ret = {};
    while (len--) { ret[c[len]] = noop; }
    return ret;
  }(c.length));
})(window);

вы можете использовать НИЖЕ, чтобы дать дополнительную степень страхования, что у вас есть все базы покрыты. Используя typeof во-первых, будет избегать любых undefined ошибки. Используя === также гарантирует, что имя типа на самом деле является строкой «undefined». Наконец, вы захотите добавить параметр в сигнатуру функции (я выбрал logMsg произвольно) для обеспечения согласованности, так как вы передаете все, что хотите напечатать на консоли, в функцию журнала. Это также держит вас intellisense точным и избегает любых предупреждений/ошибок в вашей JS-среде IDE.

if(!window.console || typeof console === "undefined") {
  var console = { log: function (logMsg) { } };
}

вдохновленный @Edgar Villegas Alvarado ответ, завершил методы и сделал его немного проще:

(function(w){
  var c = 'assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,table,time,timeEnd,timeStamp,trace,warn'.split(','),
  noop = function () {};

  w.console = w.console || (function (len) {
    var ret = {};
    while (len--) { ret[c[len]] = noop; }
    return ret;
  }(c.length));
})(window);

отредактировано, чтобы поместить в IIFE и исправить синтаксическую ошибку!


некоторые браузеры не имеют console включено, когда dev-tools закрыт. Кроме того, возникнет эта проблема с WebViews или iFrames, где консоль отключена.

ошибка в этих случаях —Uncaught ReferenceError: console is not defined

вдохновленный многими ответами здесь, я разработал библиотеку для этого usecase:https://github.com/sunnykgupta/jsLogger

характеристики:

  1. он спокойно перекрывает приставка.бревно.
  2. заботится, если консоль недоступна (О да, вам нужно учитывать это тоже.)
  3. хранит все журналы (даже если они погашены) для последующего извлечения.
  4. обрабатывает основные функции консоли, такие как log, warn, error, info.

As shown in this post logging to the console can be very useful when writing JavaScript code. Unfortunately, the JavaScript console is not evenly supported by all browsers. You first have browsers which don’t know it at all (like IE8) and will throw the error which I use as the title of this post. And then even two browsers which do have a console object do not all implement the same functions.

Here’s a short overview of what’s supported by which browser (note that if you do not have the latest version of a specific browser, this particular version may not support all listed functions):

Function Firefox Chrome Internet Explorer Safari Opera
assert X  X  X
clear X  X
count X X  X  X  X
debug X X  X  X  X
dir X X  X  X
dirxml X  X  X  X
error X X  X  X
_exception X
group X X  X  X  X
groupCollapsed X X  X  X  X
groupEnd X X  X  X  X
info X X  X  X
log X X  X  X
markTimeline  X
profile X X  X
profileEnd X X  X
table X
time X X  X  X  X
timeEnd X X  X  X  X
timeline X
timelineEnd X
timeStamp X
trace X  X  X  X
warn X X  X  X

So even though there are quite a few functions supported by all browsers, you should still check whether the console exists and whether the particular function you want to use exists. But adding before each call to a console function a check for the console and for the function quickly becomes a pain.

A way to work around it is to:

  1. Create a dummy console object if console is not defined
  2. Create dummy functions for all functions not supported by the console object in this particular browser

The dummy console object is created by this code:

if (!window.console) {
        window.console = {};
}

So simple, if the global console variable doesn’t exist, create one as an empty object. Now we’ve got either a real console object or a dummy object, we got rid of the error message saying that console is undefined. But we’ll still get errors when our code calls undefined functions. So let’s go through all functions and for each of them create a dummy function if missing:

(function() {
	var funcList = ["assert", "clear", "count", 
		"debug", "dir", "dirxml", "error", 
		"_exception", "group", "groupCollapsed", 
		"groupEnd", "info", "log", "markTimeline", 
		"profile", "profileEnd", "table", "time", 
		"timeEnd", "timeline", "timelineEnd", 
		"timeStamp", "trace", "warn"];

	var funcName;

	for (var i=0; i < funcList .length; i++) {
		funcName = funcList [i];
		if (!window.console[funcName]) {
			window.console[funcName] = function() {};
		}
	}
})()

Here a few explanations how this works. First wrapping it all in (function() { … })() is used to scope the variables we define in there, so that we do not pollute the global scope.

Then we define an array containing all known console functions and iterate through them. For each function, we check whether the console object (the real one or the dummy one) have such a function defined. If not, we assign an empty function. This is done by using the fact that functions of an object are just special properties of the object and that object properties are indexed.

So, using this, you will get rid of all errors related to the console being undefined or console functions being undefined, but of course since we add empty implementations, using these empty implementations will still have no effect.

Of course, instead of using empty implementations you could log the calls to console functions somewhere (e.g. an array) so that you can access it. If I ever need it, I might actually write some code for it and update this post.

Welcome to the Treehouse Community

The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.

Posted by Barbara Robertson

I’m trying to use myscript.js within a basic website («Programming.html») that is in the same directory. In the console, «Uncaught ReferenceError Console is not defined» is the message I get.

Below is the source code for myscript.js, and Programming.html, respectively — please let me know if I need to format either differently to allow others to see it.Thanks!

»’Console.log(«Hello from myscript.js»);»’

»'<!DOCTYPE HTML>

<html lang=»en»>
<head>
<title>Javascript Practice</title>

<style> html {
background: #FAFAFA;
font-family: sans-serif;
}
</style>
<script src="myscript.js"></script>

</head>

<body>
<h1>Introduction to Programming</h1>
<h2>Using Javascript</h2>

</body>
</html>»’

2 Answers

miguelcastro2 July 29, 2014 9:49pm

Javascript is case sensitive. The proper command should look like:

console.log(«Hello from myscript.js»);

Barbara Robertson July 29, 2014 9:54pm

Posted by at 8:50pm on October 13, 2008.

If you have recently changed your Firefox configurations (and upgraded to Firebug 1.2) then you may have experienced some difficulties with console.log throwing the following error:

ReferenceError: console is not defined

It turns out that this is by design. If you want to make use of the console object that Firebug offers, you need to do so with a call to window.loadFirebugConsole() first.

A little bit of testing, and the following code can be safely put in your javascript source to enable use of the Firebug console object safely (without breaking other browsers).

if (window['loadFirebugConsole']) {
	window.loadFirebugConsole();
} else {
	if (!window['console']) {
		window.console = {};
		window.console.info = alert;
		window.console.log = alert;
		window.console.warn = alert;
		window.console.error = alert;
	}
}

Whilst you are at it, why not check out some of the other nifty commands available on the Firebug console object at the Get Firebug website.

Post to Twitter

Tags: JavaScript

This entry is filed under the following categories: JavaScript.

You can follow any responses to this entry through the RSS 2.0 feed.

Both comments and pings are currently closed.

There is one response to this post.

Skip to content

Testing if a function or object is defined can sometimes cause as many errors as not doing so. What to do?

When developing JavaScript using either Firebug in Firefox or Chrome’s built-in console you will probably at some point be using console.log either for debugging messages or for exception information.

However, when you come to run this code in Internet Explorer, it throws an exception “console is undefined”:

[code lang=”javascript”]
try {
… // code throwing error
} catch (e) {
console.log(e); // throws script error «console is undefined»
}
[/code]

“A-ha” you think; “easily solved will just test if its defined before use”. However things are not so straight forward:

[code lang=”javascript”]
try {
… // code throwing error
} catch (e) {
if (console && console.log) // throws script error «console is undefined»
console.log(e);
}
[/code]

Even though now you are testing to see if it exists before use, you still get:

Console is undefined

While this would normally work for attributes of objects, globally scoped variables work differently. Luckily, all variables in global scope will be declared as attributes on the global window variable. This enables you to test for existence on the window.

Here we’ve wrapped the test up in a LogException function to ease changing of logging methodologies:

[code lang=”javascript”]
function LogException(e) {
if (window.console // check for window.console not console
&& window.console.log) window.console.log(e);
// Other logging here
}

try {
… // code throwing error
} catch (e) {
LogException(e); // works fine
}
[/code]

Note: Its isn’t exclusive to Internet Explorer, it just most visible there; so checking existence of globally scoped functions and variables against window rather than just by name is good practice!

Здравствуйте.
Сегодня случилась такая хня с лисой, как можно исправить?

Ничего нового на лису не ставили вчера и сегодня (никакие дополнения, скрипты и т.д)
С утра включаю комп, включаю лису, захожу на сайт Вконтакте, чтобы послушать музыку.
Тут в firefox вылазеет сообщение слева:

fdc9bdae216ft.jpg

Сразу после этого (если еще раз нажать на иконку воспроизведения музыки)
происходит «крах адоб флэш» :

c5fd10d138act.jpg

После чего лиса намертво зависает.

Я уже пробовала переустановить его, отключала все дополнения, запускалась в автономной режиме и т.д. — не помогает.
Сразу после запуска лисы каждый раз происходит одно и тоже 1)зависает примерно на 3 минуты, 2)отвисает, 3)выдает JavaScript error, 4)выдает крах флэш плеера, 5)намертво виснет.
Это происходит только на сайте Вконтакте (и подобных сайтах, где можно запустить что-то типо музыки, видео и т.д)
При этом все остальные сайты очень сильно тупят, даже гугл открывается минут 5.

Что можно сделать? Помогите пожалуйста.

Информация по браузу:

скрытый текст

Сведения о приложении

        Имя
        Firefox

        Версия
        3.6.18

        Папка профиля

          Открыть его папку

        Установленные плагины

          about:plugins

        Конфигурация сборки

          about:buildconfig

  Расширения

        Имя

        Версия

        Включено

        ID

        Adblock Plus
        1.3.1
        true
        {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d}

        Download Master Plugin
        1.4.1
        true
        dmpluginff@westbyte.com

        Download Master Remote Download
        1.3
        true
        dmremote@westbyte.com

        Download Master Toolbar
        1.5.0
        true
        dmbarff@westbyte.com

        DownloadHelper
        4.9.3
        false
        {b9db16a4-6edc-47ec-a1f4-b86292ed211d}

        Greasemonkey
        0.9.5
        true
        {e4a8a97b-f2ed-450b-b12d-ee082ba24781}

        ICQ Toolbar
        1.1.9
        false
        {800b5000-a755-47e1-992b-48a1c1357f07}

        Multirow Bookmarks Toolbar
        5.0.1
        false
        {FBF6D7FB-F305-4445-BB3D-FEF66579A033}

        NoScript
        2.0.5.1
        true
        {73a6fe31-595d-460b-a920-fcc0f8843232}

        WebMoney Advisor
        0.99.6
        false
        {3AFFD7F7-FD3D-4C9D-8F83-03296A1A8840}

        WebMoney Advisor
        1.0.16
        false
        {3095DD7A-4815-42db-88C9-FE267B33C4EC}

        QipAuthorizer
        1.1
        false
        {32a1fd71-835e-4b11-8e54-886fda0b4c89}

        Flashblock
        1.5.14.2
        false
        {3d7eb24f-2740-49df-8937-200b1cc08f8a}

        Спутник @Mail.Ru
        2.5.0.90
        false
        {37964A3C-4EE8-47b1-8321-34DE2C39BA4D}

        Firefox Synchronisation Extension
        7.3.4.74
        false
        {A27F3FEF-1113-4cfb-A032-8E12D7D8EE70}

        Java Console
        6.0.24
        true
        {CAFEEFAC-0016-0000-0024-ABCDEFFEDCBA}

        Поиск по AG.ru
        1.1
        false
        search@ag.ru

        VKontakte.ru MP3 Музыка Качалка
        1.10
        true
        ffvkontaktemusic@chupakabr.ru

        Rambler-Ассистент для Firefox
        2.1.7
        false
        rambler_toolbar@rambler.ru

        Kaspersky Virtual Keyboard
        11.0.2.579
        true
        virtualKeyboard@kaspersky.ru

        Kaspersky URL Advisor
        11.0.2.579
        true
        linkfilter@kaspersky.ru

        Anti-Banner
        11.0.2.579
        true
        KavAntiBanner@Kaspersky.ru

  Изменённые настройки

      Имя

      Значение

        accessibility.typeaheadfind.flashBar
        0

        browser.history_expire_days.mirror
        180

        browser.places.importBookmarksHTML
        false

        browser.places.smartBookmarksVersion
        2

        browser.startup.homepage
        http://google.ru/

        browser.startup.homepage_override.buildID
        20110615151330

        browser.startup.homepage_override.mstone
        rv:1.9.2.18

        extensions.lastAppVersion
        3.6.18

        font.minimum-size.x-cyrillic
        9

        font.name.serif.x-cyrillic
        Arial

        font.size.fixed.x-cyrillic
        16

        general.useragent.extra.MRA
        MRA 5.6 (build 03403)

        general.useragent.extra.sputnik
        sputnik 2.5.0.90

        keyword.URL
        http://go.mail.ru/search?utf8in=1&fr=fftbUFix&q=

        network.cookie.prefsMigrated
        true

        places.history.expiration.transient_current_max_pages
        128821

        places.last_vacuum
        1305373159

        privacy.cpd.formdata
        false

        privacy.cpd.sessions
        false

        privacy.sanitize.migrateFx3Prefs
        true

        privacy.sanitize.timeSpan
        0

        security.warn_viewing_mixed
        false

Понравилась статья? Поделить с друзьями:
  • Consensus error grid
  • Connectivity with the vpn service is lost checkpoint как исправить
  • Connection was terminated unexpectedly error 104
  • Connection was terminated unexpectedly error 101 fort client
  • Connection was refused with error