Chrome / Firefox console.log завжди додає рядок із написом "undefined"


81

Кожного разу, коли console.logвиконується, undefinedдо журналу виводу додається рядок із заголовком.

Це трапляється як у Firefox, так і в Chrome у Windows і Linux.


5
То яке питання? Не могли б ви показати приклад коду, який створює це? Якої поведінки ви очікуєте?
kapa

Це, мабуть, недостатньо інформації для вирішення вашої проблеми
Тітуан де Байоль

1
Я зробив свій найкращий постріл, хоча в ньому справді бракує інформації :)
talkol

2
console.log()повертається undefined.
Racket Hazmat

Моя проблема полягала в тому, що я відображав лише помилки та попередження , відображав повідомлення та інформацію, які працювали для мене.
Лев

Відповіді:


100

Якщо ви використовуєте console.log()файл JS, цей undefinedрядок не слід додавати.

Якщо ви працюєте console.log()з самої консолі, це має сенс. Ось чому: У консолі ви можете ввести ім'я змінної (наприклад, спробуйте ввести window), і вона надрукує інформацію про неї. Коли ви запускаєте будь-яку функцію void (наприклад console.log) із консолі, вона також виводить інформацію про повернене значення, undefinedв даному випадку.

Я протестував обидва випадки на своєму Chrome (Mac версії 23.0.1271.101) і справді бачу undefinedрядок, коли запускаю його всередині консолі. Це undefinedтакож з'являється, коли я пишу цей рядок у консолі:var bla = "sdfdfs"


Дякую за відповідь. Я запускаю його з самої консолі, я намагався зупинити всі розширення, але я отримую той самий результат.
N. Chamaa

3
Ну, це очікувана поведінка. Все працює як слід. Ви можете повернути вам розширення назад :) Просто запустіть console.log із файлу JS, і ви цього не побачите. Чому ви все одно запускаєте console.log із консолі? Ви можете просто ввести будь-яке ім'я змінної без console.log
talkol

але це було не раніше, ось чому !!
N. Chamaa

Можливо, ваш Chrome був оновлений, і ця поведінка розпочалася в нових версіях .. Оскільки те саме відбувається в моєму Chrome (на Mac), я дуже сумніваюся, що це проблема ..
talkol

40

Хоча відповідь Talkol - це нормально, я намагаюся сказати це більш прямо:

JavaScript розроблений як динамічна мова, що означає, що тип (рядок, порожнеча, логічне значення ...) значення функції, що повертається, не визначений заздалегідь. Якщо функція не використовує оператор return або порожній оператор повернення без значення, JavaScript автоматично повертає невизначений. Це означає, що в JavaScript кожна функція повертає щось, принаймні невизначене.

Отже, функція console.log()в консолі Chrome або використовує відсутність, або порожній оператор повернення, так що значення повернення цієї функції не визначено. Повернене значення цієї функції також відображається на консолі Chrome.

[Якщо хтось знає, де знайти визначення console.log()функції у вихідному коді Google Chrome, будь ласка, прокоментуйте за посиланням, тоді ми можемо навіть піти далі і подивитися на реальний код, було б непогано.]

Джерела:


Посилання на інші публікації - це нормально, але це не повна відповідь, тому краще підійде як коментар до відповіді, на яку ви посилаєтесь.
Dan

5
Я намагався це зробити, але я не можу коментувати через відсутність достатньої репутації ("Ви повинні мати 50 репутації, щоб коментувати"), тому я думав, що використання "неоптимального" способу відповіді замість коментування було б краще, ніж не проводка.
Пол Вінсент Бейганг

Це справедливо. Я не можу зняти свій голос проти, якщо ви не відредагували публікацію. Розум детальніше обговорити, що знаходиться за цим посиланням у відповіді? Якщо ви можете це зробити, то я можу змінити свій голос :)
Дан


6

Консольне середовище у вашому браузері призначене для отримання останнього виразу оператора в програмі та оцінки його за значенням, а потім показати вам це значення.

Результатом виразу присвоєння є значення, яке було призначене. Отже, механізм JavaScript просто виконує призначення, але консоль робить один додатковий крок, який полягає у встановленні будь-якого мого останнього твердження, повертає вам це значення. Ось чому друкується 2:

тут.

У твердженнях, які не мають поверненого значення, ви отримуєте щось на зразок невизначеного.


Можливо, трохи не в темі, але чому a=2повертає 2, а var b=2нічого не повертає? (Я здогадуюсь, оскільки =це оператор, який повертає значення, але чому він не робить те саме у заяві про оголошення?)
floatingpurr

@Fatima, яке посилання на цю відповідь?
Містер Перфекціоніст,

1

Що ви можете зробити, це просто створити власну функцію, подібну до console.log, із поверненням, щоб змінити цю поведінку, виконуючи велику кількість кодування на консолі розробника. Ось приклад того, як це виглядає на консолі розробника:

console.log('I hate seeing the next line stating the obvious.')
I hate seeing the next line stating the obvious.
undefined
log = function(l){return l}
function log()
if(1 === 2){console.log('1 is not equal to 2.')}else{log('No Shit Sherlock.')}
"No Shit Sherlock."

0

undefined- це повернене значення console.log () в інструментах розробника Chrome. Ви отримаєте невизначену, якщо зробите наступне в інструментах розробника Chrome, і побачите, що отримаєте невизначену, хоча x має значення 3.

> let x = 3
> undefined

-3

Якщо ви використовуєте console.logдля випуску декількох значень в одному рядку, ось шалена альтернатива:

var1 + ' ' + var2 + ' ' + var...

(Кращі ідеї вітаються, це може підірватися за певних обставин)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.