gpt4 book ai didi

javascript - 逗号在 Javascript if 语句中是否意味着语法有效?

转载 作者:行者123 更新时间:2023-12-03 12:42:28 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What does the comma operator do in JavaScript?

(5 个回答)


8年前关闭。




最近几天,我一直在帮助 friend 学习 Javascript。这是他多年来的第一语言,他几乎什么都不记得,所以他几乎完全从头开始。他一直在学习一个简单的教程,我一直在为他提供一些练习来帮助他练习。我给他的最新练习是(显然)经典的 FizzBuzz problem .他在一些帮助下解决了这个问题,但在制定解决方案时他做了一些非常有趣的事情。他想出了以下代码:

for (var x = 1; x <= 100; x++) {
if (x%3 == 0, x%5 != 0) {
console.log("Fizz");
}
else if (x%3 != 0, x%5 == 0) {
console.log("Buzz");
}
else if (x%3 == 0, x%5 == 0) {
console.log("FizzBuzz");
}
else {
console.log(x);
}
}

他不熟悉 bool 比较运算符,所以没有使用 &&。而是使用逗号。我的预期是它会崩溃并说明语法错误,但令我惊讶的是,它最终运行良好,只是打印出一堆“Fizz”和“Buzz”行,没有“FizzBu​​zz”或数字。不用说,我很困惑,所以我做了一些实验。我的第一个测试是运行这个:
if (true, true) console.log('true, true');
if (true, false) console.log('true, false');
if (false, true) console.log('false, true');
if (false, false) console.log('false, false');

这给了我两行输出:
'true, true'
'false, true'

由此,我猜测所有逗号所做的只是导致它只评估列表中的最后一个表达式。然后我尝试运行此代码:
for (var i = 0; i < 16; i++) {
if ((Math.floor(i / 8) == 1), (Math.floor(i / 4) == 1), (Math.floor(i / 2) == 1), (i % 2 == 1)) {
console.log(i);
}
}

我得到的输出是 1-15 中的所有奇数,这证实了我在第一次测试中的猜测(因为逗号分隔列表中的最后一个 bool 值每隔一次迭代就会翻转一次)。

在所有冗长的上下文之后,我的问题是:这个逗号语法是 Javascript 引擎的已知和有意的部分,还是解释器的一个奇怪的、被忽视的怪癖?我知道逗号可以用于其他一些事情(在一行中初始化多个变量、声明数组和分隔参数),但我从未听说过它们被用于任何语言的条件语句中,并且我很好奇其他人是否知道这段代码是否应该运行。

作为引用,我运行的 FizzBu​​zz 代码和第二个测试都是使用节点完成的,而我运行的第一个测试是在 Chrome 的 Javascript 控制台中完成的,所以它似乎不仅仅是浏览器或节点专有的怪癖如果确实是一个。另外,如果你真的读到这里,谢谢。

最佳答案

逗号是一个实际的运算符。它计算它的两个操作数(从左到右)并返回第二个操作数的值。

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

它最常见的用法是在 for 中提供多个参数。循环,但它也可以用于其他目的。

关于javascript - 逗号在 Javascript if 语句中是否意味着语法有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com