Не знал как назвать, кто придумает по умнее, буду признателен.
Проблема в том, что PhpStorm не подчеркнул и я упустил из виду:
console.log('hello',)
Данная конструкция роняла сайт на windows машинах, когда на mac все работало.
Не знаю как искать, но как по спецификации, допускается ли такое?
По мне дак вполне нормально, вторая переменная undefined.
Давайте откроем стандарт языка ECMA-262 7-редакция от июня 2016.
Смотрим как вызываются у нас функции 12.3.4 Function Calls.
Как видим при вызове функции ей передается объект Arguments. Который определяется следующим образом.
Arguments[Yield] :
( )
( ArgumentList[?Yield] )
То есть он может быть либо пустым, либо передаваться как ArgumentList.
ArgumentList :
AssignmentExpression
ArgumentList , AssignmentExpression
Как видим список состоит из значений AssignmentExpression, которые разделены запятыми. Тут начинается самое сложное в стандарте, так как AssignmentExpression это целая куча различных вариантов значений.
AssignmentExpression:
ConditionalExpression
YieldExpression
ArrowFunction
LeftHandSideExpression
LeftHandSideExpression AssignmentOperator AssignmentExpression
AssignmentOperator : one of
*= /= %= += ‐= <<= >>= >>>= &= ^= |= **=
То есть мы может указывать просто кучу всяких видов параметров: условные выражения, стрелочные функции, различные комбинации выражений, итераторы и многое другое. Но в общем-то нас интересует простейший вариант: LeftHandSideExpression.
LeftHandSideExpression:
NewExpression
CallExpression
Дальше идет целая вакханалия ссылок. Но в итоге все сводится либо к различным выражениям, либо в нашем случае к простейшим IdentifierName и Identifier. А они в свою очередь имеют такое определение:
IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeIDStart
$
_
\ UnicodeEscapeSequenc
То есть в любом случае должны быть хотя бы одна буква Юникода и таким образом AssignmentExpression не может состоять из пустоты. Там обязательно должно идти хоть что-то, иначе было бы в стандарте AssignmentExpression помечен опционально (opt) для ArgumentList.
P.S. - И пусть потом кто-то попробует сказать, что стандарты это легко.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости