语言设计师是否有理由这样做?
的javascript:
sys.parameters
C ++:
var a = 1 + (2 || 3); // ==> 3
答案 0 :(得分:3)
Logical OR运算符的行为在两者中都不同。这个序列将解释
的JavaScript
1 + (2 || 3)
1 + ((2 != 0) ? 2 : 3)
1 + 2
3
C ++
1 + (2 || 3)
1 + ((2 != 0) || (3 != 0)) // <-- gets reduced to boolean
1 + 1
2
仅供参考:1 + (2 | 3)
将导致4
。亲眼看看。
答案 1 :(得分:0)
在js版本中,如果a || b
为真值(非零数字,对象,非空字符串等),a
将返回a
,否则返回{{ 1}}。因此b
将返回2 || 3
,2
等于a
在c ++版本中,当评估3
时,a || b
将转换为a
类型,如果bool
为(bool)a
,则true
将是a || b
。 true
的结果为2 || 3
值bool
,当true
添加true
时,int
将始终转换为{{1}所以true
等于1