Javascript "tuple" notation: what is its point?

На wtfjs я обнаружил, что следующее является законным javascript.

",,," == Array((null,'cool',false,NaN,4)); // true

Аргумент (null,'cool',false,NaN,4) выглядит как кортеж, но у javascript нет кортежей!

Несколько быстрых тестов в моей консоли javascript дают следующее.

var t = (null,'cool',false,NaN,4); // t = 4
(null,'cool',false,NaN,4) === 4; // true
(alert('hello'), 42); // shows the alert and returns 42

Похоже, он ведет себя точно так же, как список утверждений, разделенных точкой с запятой ; , просто возвращая значение последнего утверждения.

Есть ли где-нибудь ссылка, описывающая этот синтаксис и его семантику? Почему он существует, т.е. когда его следует использовать?

26
задан Grilse 1 August 2019 в 15:32
поделиться

3 ответа

Вы видите эффект оператора запятой .

Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда.

Результирующее значение при вычислении a,b,c,...,n всегда будет значением самого правого выражения, однако все выражения в цепочке все еще оцениваются (слева направо).

35
ответ дан 28 November 2019 в 07:16
поделиться

Как уже объяснялось, такое поведение вызвано оператором ,. В связи с этим выражение (null,'cool',false,NaN,4) всегда будет оцениваться как 4. Итак, у нас

",,," == Array(4)

Array(4) - создается новый массив с выделенными 4 элементами. Во время сравнения со строкой этот массив преобразуется в строку, как это было бы с Array(4).toString(). Для массивов toString действует как метод join(','), вызываемый для этого массива. Таким образом, для пустого массива из 4 элементов объединение будет производить строку ",,,".

8
ответ дан 28 November 2019 в 07:16
поделиться

Попробуйте alert((null,'cool',false,NaN,4)), и тогда вы увидите.

демо

Причина в том, что оператор запятой оценивает все операторы и возвращает последний.

Подумайте об этой строке: a = 1, b = 2, c = 3; он будет запускать каждое выражение, так что, по сути, он установит переменные на то, что вы хотите, и вернет последнее значение (в данном случае 3)

2
ответ дан 28 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: