我想明白怎么算三元的工作,我碰到这个例子就是:奇怪的三元运算符的Javascript
b.d >= mystr.length && (function1(b, a), a=0);
是什么& &是什么意思?它是否像AND运算符一样使用?这如何转化为正式声明? a = 0之前的昏迷是什么意思?谢谢!
我想明白怎么算三元的工作,我碰到这个例子就是:奇怪的三元运算符的Javascript
b.d >= mystr.length && (function1(b, a), a=0);
是什么& &是什么意思?它是否像AND运算符一样使用?这如何转化为正式声明? a = 0之前的昏迷是什么意思?谢谢!
&&
是AND运算符。如果它的左边是真的,它就评估右边(并返回它)。 ,
是逗号运算符。 (逗号运算符评估它的两侧,从左到右,并返回右侧)。所以这个代码是这样的:
if (b.d>=mystr.lengh) {
function1(b,a);
a=0;
}
(除非你的代码返回0)
(我的母语是C
,所以也许我错了,但我认为,在这种情况下,JavaScript的像工作C)
的&&
运算符是逻辑运算符。它从左至右计算表达式并返回第一个falsey值或最后一个表达式的值..
如果它获得的最后一个表达式,它返回它的价值,不管它是什么。
所以:
var x = (1 < 2) && (4 > 3) && 'fred';
套X为 “弗雷德”,而:
var y = (1 < 2) && 0 && 'fred';
套Ÿ到0
。
这不是一个三元。
同样,分组运算符内的逗号基本上确保了组将总是返回最后一个表达式a=0
,它是0。
即例如将总是为有误或0(这是falsy的值)。
编辑:
为了完整起见,这里是一个三元运算符:
a > b ? functionIfTrue() : functionIfFalse();
这在逻辑上是相同的:
if (a > b){
functionIfTrue();
} else {
functionIfFalse();
}
谢谢。你能告诉我它是如何看起来像一个正常的声明? “> =”是什么意思?这不是一个三元运算符吗?函数在什么条件下被调用? – user1015551
'> ='表示“大于或等于”。三元运算符是编写if/else语句的简写方式。 在这种情况下,'function1'将调用只有'mystr.length'小于b.d'的'价值。如果'mystr.length'不小于'b。那么'&&'后面的语句的其余部分并不重要,因此不会被评估。 –
这不是一个三元运算符。 –
&&是AND,因为它在很多语言中。但同时,中http://stackoverflow.com/q/8916679/422184 – Ktash
重复这是可笑的不可读的代码。谁写这样的代码? ಠ_ಠ –