这是有效的 JavaScript 吗?我看到一个示例,其中有人在三元运算符条件中使用逗号,它在我的编辑器中被标记为错误,并且该示例未在 Chrome 中运行。然而,它确实在 Firefox 中运行。当我将所有三元语句转换为 if/else 语句后,该应用程序就可以在 Chrome 上运行了。
a!==b ? (a=1, b=2) : (a=2, b=1)
Edit:
这是代码中的实际语句:
a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0
是的,它是有效的,并且在 Chrome 中运行良好:
var a, b, c;
a = 6;
b = 7;
c = a !== b ? (a = 1, b = 2) : (a = 2, b = 1);
console.log("a = " + a);
console.log("b = " + b);
console.log("c = " + c);
我并不是说这在代码中是一个好主意humans是为了阅读。 :-) 我希望 jamietre 在评论中说它看起来像是缩小的结果时是正确的。
The 逗号运算符是二元运算符(接受两个操作数的运算符)。它评估其左侧操作数(从而导致其具有的任何副作用,例如赋值),丢弃该结果,然后评估其右侧操作数(从而导致其副作用,如果有的话)并将该结果作为其结果结果值。如果一行中有多个逗号运算符,则按从左到右的顺序计算整个表达式,最终结果是最右边的操作数计算得出的值。
当然,您知道条件运算符(三元运算符 - 接受三个操作数)用于在初始表达式的基础上选择两个子表达式之一进行计算。
所以这句话非常...富有表现力...总共seven* 里面有不同的表达方式。
因此,在该示例中,如果a !== b
最初,或1
if a === b
最初,设置的副作用a
and b
.
在我看来,正是副作用使其成为一个值得怀疑的选择。当然,如果左侧操作数是doesn't有副作用。
* Yes, seven将它们打包到整个三元组中:
a !== b
- 第一个逗号表达式
a = 1
b = 2
- 第二个逗号表达式
a = 2
b = 1
用实际的语句重新编辑,该语句也有效:
function test(a) {
var b = 7,
d = 1,
e = 2,
f = 3,
g = 4,
h = 5,
i = 6;
a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0;
console.log("a = " + a);
console.log("b = " + b);
console.log("d = " + d);
console.log("e = " + e);
console.log("f = " + f);
console.log("g = " + g);
console.log("h = " + h);
console.log("i = " + i);
}
test(0);
test(1);
.as-console-wrapper {
max-height: 100% !important;
}
但是哇,我希望这是缩小的,因为如果一个人写了这个,他们必须really对任何应该稍后维护它的人有异议...;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)