逗号运算符在JavaScript中有什么作用?

t8e9dugd  于 2023-05-27  发布在  Java
关注(0)|答案(5)|浏览(149)

如果我用途:

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
3phpmpom

3phpmpom1#

逗号运算符计算其两个操作数(从左到右),并返回第二个操作数的值。

例如,表达式1,2,3,4,5的计算结果为5。显然,逗号运算符只对有副作用的操作有用。

console.log(1,2,3,4,5);
console.log((1,2,3,4,5));
wko9yo5t

wko9yo5t2#

还有一些需要考虑的:

console.log((0, 9));
console.log((9, 0));
console.log(("foo", "bar"));
8ljdwjyq

8ljdwjyq3#

特定的语法允许面包店**功能性地烘焙面包,将其交给客户消费,并且还将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.
irlmq6kh

irlmq6kh4#

向对象添加/修改属性并在同一行中返回它是一个可能的用例:

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)
lskq00tm

lskq00tm5#

看一下here-逗号代表多个表达式/语句。例如,在你的代码中,你可以使用这样的一行:

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

这将声明所有三个变量而不写入:

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

希望能帮上忙。

相关问题