Подтвердить что ты не робот

Обозначение "tuple" в Javascript: в чем его смысл?

В 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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

",,," == Array(4)

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

Ответ 3

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

демонстрация

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

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