条件运算符而不赋值给变量

时间:2018-01-05 15:30:29

标签: javascript html5-canvas operators

我正在摆弄html画布上的条件运算符,并且想要一个简单有效的方法来使用条件运算符更改strokecolor。我似乎无法在网上找到一个很好的例子。

以下是没有条件运算符的方法:

if (shape.strokecolor == 'black'){
    shape.strokecolor = 'red';
}
else if (shape.strokecolor == 'red'){
    shape.strokecolor = 'black';
}

我认为我可以通过使用条件运算符来改善这一点。我发现这是有效的:

var strokecol = shape.strokecolor == 'black' ? 
                shape.strokecolor = 'red' : 
                shape.strokecolor == 'red' ? 
                shape.strokecolor = 'black' : 
                shape.strokecolor = 'red';

所以这将是:

  • 评估strokecolor是否为黑色
  • 如果为true,则将其更改为红色,
  • 如果为false,则评估strokecolor是否为红色
  • 如果为true,则将其更改为黑色,
  • 如果错误,请将其留空。

似乎操作员结构需要最后一行,但对我来说是多余的。似乎我必须将结果分配给变量,我不需要,因为变化无论如何都会生效。我认为使用条件运算符会减少我的代码,但这种方式并没有真正帮助。

我认为我没有正确地做到这一点...... 我的主要问题是,如果我可以使用这样的条件运算符而不分配变量,其次,如果有人知道如何尽可能有效地改进给定代码(使用或不使用条件运算符)?谢谢。

2 个答案:

答案 0 :(得分:3)

使用条件运算符生成值,而不是副作用(如赋值)。然后,您可以将该值分配给适当的位置。如果唯一可能的颜色是黑色和红色,你可以这样写:

shape.strokecolor = shape.strokecolor == 'black' ? 'red' : 'black';

要保持其他颜色的原始行为,您需要将该属性分配回自身:

shape.strokecolor = shape.strokecolor == 'black' ? 'red' :
                    shape.strokecolor == 'red' ? 'black' :
                    shape.strokecolor;

但这并不比原来的if好。

答案 1 :(得分:0)

每次你筑三元,一只小狗就会死。

shape.strokecolor = shape.strokecolor.startsWith('b') ? 'red' : 'black';