这是有效的JavaScript吗?我看到有人在三元运算符条件下使用逗号的示例,并且在我的编辑器中将其标记为错误,并且示例未在Chrome中运行.但是,它确实在Firefox中运行.将所有三元语句转换为if/else语句后,应用程序在Chrome上运行.
a!==b ? (a=1, b=2) : (a=2, b=1)
Run Code Online (Sandbox Code Playgroud)
编辑:
这是代码中的实际语句:
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
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 36
是的,它是有效的,它在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);Run Code Online (Sandbox Code Playgroud)
我并不是说这是人类想要阅读的代码中的一个好主意.:-)我希望jamietre在评论中是正确的,当他/她说它看起来像缩小的结果.
的逗号操作者是一个二进制运算符(操作者接受两个操作数).它评估它的左侧操作数(因此导致它具有的任何副作用,例如赋值),抛出该结果,然后评估其右侧操作数(从而导致其副作用,如果有的话)并将该结果作为其结果值.如果连续有多个逗号运算符,则按从左到右的顺序计算整个表达式,最终结果是从最右侧操作数求值得到的值.
当然,您知道条件运算符(三元运算符 - 一个接受三个操作数)用于根据初始表达式选择要评估的两个子表达式之一.
因此,这条线非常......富有表现力... 内部共有七个*不同的表达式.
因此,在该示例中,如果a !== b最初,或者1如果a === b最初,具有设置a和的副作用,则整体表达的结果是2 b.
在我看来,它的副作用使它成为一个值得怀疑的选择.当然,如果左侧操作数没有副作用,则没有理由使用逗号运算符.
*是的,有七个人被整合到整个三元组中:
a !== ba = 1b = 2a = 2b = 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);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
max-height: 100% !important;
}Run Code Online (Sandbox Code Playgroud)
但是,哇,我希望这是缩小的,因为如果一个人写了这个,他们必须真的有一个东西反对任何人应该保留它以后...... ;-)
Sar*_*raz 25
是:
a=1;
b=2;
a!==b ? (a=1, b=2) : (a=2, b=1)
console.log(a); // 1
console.log(b); // 2
Run Code Online (Sandbox Code Playgroud)
和:
a=1;
b=2;
a===b ? (a=1, b=2) : (a=2, b=1)
console.log(a); // 2
console.log(b); // 1
Run Code Online (Sandbox Code Playgroud)
正如您可以分析的那样,如果您查看结果,更改相等运算符会对我们的测试做出正确反应.
或者你可以这样做:
b = a!==b ? (a=1,2) : (a=2,1);
Run Code Online (Sandbox Code Playgroud)
在此处阅读有关逗号运算符的信息。
逗号运算符计算其每个操作数(从左到右)并返回最后一个操作数的值。
使用 ES6 代码示例扩展此主题。如果您使用 TRUE : FALSE 参数的一侧来迭代一个 IF 中的所有情况,则将代码分开是有意义的,就像它是一个 switch | 一样。案例陈述。
嵌套意味着存在分支逻辑,虽然它是逻辑嵌套的,但编写嵌套的 IF 会使我们在示例中所做的事情变得复杂。就像律师向陪审团解释问题一样。IMO,您想以最简单的形式解释这一点。例如,我发现这个例子是表达执行 TRUE 的嵌套 if 的最合乎逻辑的方式。最后的 false 是最后一个 else {} ChoreDoor 是 0,1 或 2:
choreDoor === 0 ?
(openDoor1 = botDoorPath,
openDoor2 = beachDoorPath,
openDoor3 = spaceDoorPath)
: choreDoor === 1 ?
(openDoor2 = botDoorPath,
openDoor1 = beachDoorPath,
openDoor3 = spaceDoorPath)
: choreDoor === 2 ?
(openDoor3 = botDoorPath,
openDoor1 = beachDoorPath,
openDoor2 = spaceDoorPath)
: false;
Run Code Online (Sandbox Code Playgroud)