2012-01-23 53 views
0

我想明白怎么算三元的工作,我碰到这个例子就是:奇怪的三元运算符的Javascript

b.d >= mystr.length && (function1(b, a), a=0); 

是什么& &是什么意思?它是否像AND运算符一样使用?这如何转化为正式声明? a = 0之前的昏迷是什么意思?谢谢!

+4

这不是一个三元运算符。 –

+1

&&是AND,因为它在很多语言中。但同时,中http://stackoverflow.com/q/8916679/422184 – Ktash

+0

重复这是可笑的不可读的代码。谁写这样的代码? ಠ_ಠ –

回答

1

&&是AND运算符。如果它的左边是真的,它就评估右边(并返回它)。 ,是逗号运算符。 (逗号运算符评估它的两侧,从左到右,并返回右侧)。所以这个代码是这样的:

if (b.d>=mystr.lengh) { 
function1(b,a); 
a=0; 
} 

(除非你的代码返回0)

(我的母语是C,所以也许我错了,但我认为,在这种情况下,JavaScript的像工作C)

0

&&运算符是逻辑运算符。它从左至右计算表达式并返回第一个falsey值或最后一个表达式的值..

如果它获得的最后一个表达式,它返回它的价值,不管它是什么。

所以:

var x = (1 < 2) && (4 > 3) && 'fred'; 

X为 “弗雷德”,而:

var y = (1 < 2) && 0 && 'fred'; 

Ÿ0

2

这不是一个三元。

同样,分组运算符内的逗号基本上确保了组将总是返回最后一个表达式a=0,它是0。

即例如将总是为有误或0(这是falsy的值)。

编辑:

为了完整起见,这里是一个三元运算符:

a > b ? functionIfTrue() : functionIfFalse(); 

这在逻辑上是相同的:

if (a > b){ 
    functionIfTrue(); 
} else { 
    functionIfFalse(); 
} 
+0

谢谢。你能告诉我它是如何看起来像一个正常的声明? “> =”是什么意思?这不是一个三元运算符吗?函数在什么条件下被调用? – user1015551

+0

'> ='表示“大于或等于”。三元运算符是编写if/else语句的简写方式。 在这种情况下,'function1'将调用只有'mystr.length'小于b.d'的'价值。如果'mystr.length'不小于'b。那么'&&'后面的语句的其余部分并不重要,因此不会被评估。 –