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)