Почему console.log записывает строки с кавычками в некоторых случаях? - PullRequest
0 голосов
/ 12 декабря 2018

Я использую эти примеры Node.js v10.5.0.Когда я только печатаю строки с ним, он печатает строки без окружающих кавычек.

> console.log('foo', 'bar')
foo bar
undefined

Но когда я печатаю строки и числа вместе, тогда он печатает строки с окружающими кавычками.

> console.log(1, 'foo', 'bar')
1 'foo' 'bar'
undefined

Почему возникает эта разница?Я ожидал, что во втором примере будет напечатано следующее:

1 foo bar

Аналогичное поведение можно наблюдать в Chrome 70.

Похоже, console.log() выбирает показывать строку в кавычках, когдаесть аргументы типа числа, но затем в этих примерах все строки выводятся без кавычек, даже если используются числа:

> console.log('foo', 'bar', 1)
foo bar 1
undefined
> console.log('foo', 1, 'bar')
foo 1 bar
undefined

Что здесь происходит?Почему console.log() печатает строки с кавычками в некоторых случаях, а не в других?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Для console.log еще нет законного стандарта, но большинство браузеров, включая Chrome (то есть Chromium), используют спецификацию рабочей группы (WHATWG) :

https://console.spec.whatwg.org/#logger

Согласно этой спецификации, если у вас различное количество параметров, то для вывода данных используются разные методы, в соответствии с текущей спецификацией:

2.1 Logger (logLevel, args)

  1. Если args пусто, вернуть.

  2. Пусть first be args[0].

  3. Пусть rest будут все элементы, следующие за аргументами в начале.

  4. Если rest isпусто, выполните Printer(logLevel, « first ») и вернитесь.

  5. Если first не содержит спецификаторов формата, выполните Printer(logLevel, args).

  6. В противном случае выполните Printer(logLevel, Formatter(args)).

  7. Return undefined.

В конечном итоге количество параметров определяет методы, которыеиспользуется для вывода информацииион.В частности, в вашем примере первый параметр не может содержать спецификатор формата, потому что это число, поэтому он передается в Printer () , но если первый параметр является строкой, он передается в Formatter () .

Итак, вы получите различный вывод в зависимости от порядка:

> console.log('hello',1,'hello')
hello 1 hello

против

> console.log(1,'hello','hello')
1 "hello" "hello"

В конечном счете, как эти методы выводят информацию, это реализация /Зависит от браузера:

То, как реализация печатает аргументы, зависит от реализации, но реализации должны разделять объекты пробелом или чем-то подобным, поскольку это стало ожиданием разработчика.

0 голосов
/ 12 декабря 2018

Это похоже на преднамеренный выбор команды Chrome.Нет никакого стандарта для того, как console.log работает в различных средах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...