|| ('OR')运营商替代方案

时间:2014-11-28 12:14:11

标签: javascript

我显然在这里遇到了一些非常错误,所以我会感激任何好的建议。 为什么如果我写

var x=''; 
var y="12345";
(y.substring(0, 3) === "000"||"999") ? x=1: x=0;

console.log (x, y.substring(0, 3));

答案是1 "123" 而不是0 "123"

谢谢你们!

2 个答案:

答案 0 :(得分:3)

首先,三元运算符语法不是您正常使用它的方式,您必须进行两次比较而不是一次。

var str = y.substring(0, 3);
x = (str === "000"|| str === "999") ? 1 : 0;

MDN 对于condition ? expr1 : expr2

  

如果condition为true,则运算符返回expr1的值;   否则,它返回expr2的值。

答案 1 :(得分:2)

或者操作符的工作方式如下:a || b

如果每个陈述彼此隔离,基本上你可以让我更加明显:

var c1 = y.substring(0, 3) === "000";
var c2 = "999";

if ( c1 || c2 ) { x = 1; } else { x = 0; };

在这里查看问题?

我会重写你的陈述,如下所示:

x = ["000", "999"].indexOf(y.slice(0, 3)) > -1 ? 1 : 0;

请注意我如何使用Array.prototype.indexOf来测试多重案例:

["000", "999"].indexOf(y.slice(0, 3)) // returns the index of the array or -1 if not in the array.