如果我使用:
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
答案 0 :(得分:79)
逗号运算符评估两者 它的操作数(从左到右)和 返回第二个值 操作数。
来源: https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator
例如,表达式1,2,3,4,5
的计算结果为5
。显然,逗号运算符仅对具有副作用的操作有用。
答案 1 :(得分:5)
答案 2 :(得分:4)
看看here - 逗号代表多个表达式/语句。例如,在您的代码中,您可以使用如下所示的行:
var a=0, b=0, c=0;
这将声明所有三个变量而不写:
var a=0;
var b=0;
var c=0;
希望有所帮助。
答案 3 :(得分:2)
<德尔>
逗号运算符评估两者
它的操作数(从左到右)和
返回second
的值
操作数。
德尔>
https://stackoverflow.com/a/3561056/5934465
应该是这样的!
逗号运算符计算每个操作数(从左到右)并返回
last
操作数的值。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator
答案 4 :(得分:0)
向对象添加/修改属性,在同一行中返回是一种可能的用例:
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
属性中的数组中的输入值本身。
它仍然是语法糖(如arrow functions),但它确实缩短了行数......我想知道一些JS minifiers是否会以类似的方式自动检测和调整代码。在您的控制台中运行它:
((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)
答案 5 :(得分:0)
特定的语法允许您功能性地烘烤面包并将其交给客户食用,而无需return
。
(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.