Что делает запятая в выражениях JavaScript?
Если я использую:
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
6 ответов
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значение второго операнда.
Источник: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator
Например, выражение 1,2,3,4,5
оценивает 5
, Очевидно, оператор запятой полезен только для операций с побочными эффектами.
Еще несколько предупреждений для рассмотрения:
alert((0, 9));
alert((9, 0));
alert(("foo", "bar"));
Кроме того, посмотрите на консоль Firebug, если вы хотите попробовать это в интерактивном режиме.
Посмотрите здесь - запятая обозначает несколько выражений / операторов. Например, в вашем коде вы можете использовать такую строку:
var a=0, b=0, c=0;
Это объявит все три переменные без записи:
var a=0;
var b=0;
var c=0;
Надеюсь, это поможет.
Оператор запятой оценивает оба своих операнда (слева направо) и возвращает значениеsecond
операнд.
/questions/30065119/chto-delaet-zapyataya-v-vyirazheniyah-javascript/30065139#30065139
Так и должно быть!
Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение
last
операнд.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
The specific syntax allows you to functionally bake bread and hand it to the customer to consume with no
return
s.
(new Array(3)).fill()
.map(()=>({state:"dough", bake(){this.state="baked"}, consume(){this.state="consumed"}}))
.map(bread=>(console.log(`Adding ${bread.state} to oven.`), bread.bake(), bread))
.map(bread=>(console.log(`Consuming ${bread.state} bread.`), bread.consume(), bread))
.map(bread=>console.log(`Bread is now ${bread.state}.`))
Adding dough to oven.
Adding dough to oven.
Adding dough to oven.
Consuming baked bread.
Consuming baked bread.
Consuming baked bread.
Bread is now consumed.
Bread is now consumed.
Bread is now consumed.
Добавление / изменение свойств к объекту и возвращение его в одной строке - это возможный вариант использования:
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
имущество.
Это все еще синтаксический сахар (например, функции стрелок), но он сокращает количество строк... Интересно, некоторые минификаторы 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)