2012-07-03 22 views
4

我最近写了没有工作,我所期望的代码令人惊讶的秩序,它是:的javascript:操作

message = 'Thank You'; 
type = 'success'; 

message = message || type == 'success' ? 'Success' : 'Error'; 

有人告诉我这个消息,在该message年底被设置为“成功”

我想,既然这个消息的truthy值true,该or的右侧会评估。

周围或右边括号解决了这个,但我仍然不明白为什么右边侧在所有

回答

11

评估您的代码就相当于

message = (message || type == 'success') ? 'Success' : 'Error'; 

这就是为什么。 :)

+7

是的,'?:'具有最低的优先级... https://developer.mozilla.org/zh/JavaScript/Reference/Operators/Operator_Precedence –

3

message的值不会最终为"success"而是"Success"

?操作符比||操作者的优先级低,所以代码被评价为:

message = (message || type == 'success') ? 'Success' : 'Error'; 

message || type == 'success'结果将是"Thank You",并且当被评估作为?操作者一个布尔值,结果是true

+0

你是对的,纠正我的问题 – mkoryak