JavaScript" кортеж " нотация: в чем ее смысл?
At 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
похоже, он ведет себя точно так же, как точка с запятой ; разделенный список операторов, просто возвращая значение последнего оператора.
есть ли ссылка где-то, что описывает синтаксис и семантику? Почему он существует, то есть когда его следует использовать?
3 ответов
вы видите эффект оператор запятая.
оператор "запятая" вычисляет оба операнда (слева направо) и возвращает значение второго операнда.
результирующее значение, когда a,b,c,...,n оценивается всегда будет значение самого правого выражения, однако все выражения в цепочке по-прежнему оцениваются (слева направо).
как уже объяснялось, это поведение вызвано , оператора. Благодаря этому выражение (null,'cool',false,NaN,4) всегда будет оценено 4. Итак, мы имеем
",,," == Array(4)
Array(4) - создает новый массив с 4 элементами. Во время сравнения со строкой этот массив преобразуется в строку, как это было бы с Array(4).toString(). Для массивов toString действует как join(',') метод вызывается в этом массиве. Поэтому для пустого массива из 4 элементов join будет производить строку ",,,".
попробуй такое alert((null,'cool',false,NaN,4)) и тогда вы можете видеть.
причина в том, что оператор "запятая" вычисляет все заявления и возвращает последний.
подумайте об этой строке:a = 1, b = 2, c = 3; он будет запускать каждое выражение, поэтому по сути он установит переменные на то, что вы хотите, и вернет последнее значение (в этом случае 3)