Что делает запятая в выражениях JavaScript? - PullRequest
75 голосов
/ 25 августа 2010

Если я использую:

1.09 * 1; // returns "1.09"

Но если я использую:

1,09 * 1; // returns "9"

Я знаю, что 1,09 - это не число.

Что делает запятая в последнем фрагменте кода?

Дополнительные примеры

if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert

alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too

alert("2",
    foo = function (param) {
        alert(param)
    },
    foo('1')
)
foo('3'); // alerts 1, 2 and 3

Ответы [ 5 ]

80 голосов
/ 25 августа 2010

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

Источник: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator

Например, выражение 1,2,3,4,5 оценивается как 5.Очевидно, оператор запятой полезен только для операций с побочными эффектами.

5 голосов
/ 25 августа 2010

Еще несколько предупреждений для рассмотрения:

alert((0, 9));
alert((9, 0));
alert(("foo", "bar"));

Кроме того, взгляните на консоль Firebug , если хотите попробовать это в интерактивном режиме.

4 голосов
/ 25 августа 2010

Посмотрите здесь - запятая означает несколько выражений / операторов.Например, в вашем коде вы могли бы использовать следующую строку:

var a=0, b=0, c=0;

. Здесь будут объявлены все три переменные без записи:

var a=0;
var b=0;
var c=0;

Надеюсь, это поможет.

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

https://stackoverflow.com/a/3561056/5934465

Это должно быть так!

Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращаетзначение операнда last.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator

0 голосов
/ 21 марта 2018

Добавление / изменение свойств объекта и возвращение его в той же строке - возможный вариант использования:

console.log(
  ((x) => (o = {biggerCond: r => r >= x},
           o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
           o.isAnyBigger = o.r5.some(o.biggerCond),
           o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
  )(5e4)
);
// Example
// {
//   bigger: [58414, 56500, 63397],
//   isAnyBigger: true,
//   isBiggerCond: r => r >= x,
//   r5: [58414, 12015, 56500, 63397, 43861]
// }

Приведенная выше анонимная функция возвращает объект со случайными значениями, большими, чем входное значение, или, если его нет, с самим входным значением в массиве, содержащемся в bigger property.

Это все еще синтаксический сахар (например, функции стрелок ), но он сокращает количество строк ... Интересно, обнаруживают ли некоторые JS-минификаторы и корректируют ли код вПохожий способ автоматически.Запустите его в своей консоли:

((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)
...