javascript和c ++布尔转换

时间:2016-05-24 08:40:49

标签: javascript c++

语言设计师是否有理由这样做?

的javascript:

sys.parameters

C ++:

var a = 1 + (2 || 3); // ==> 3

2 个答案:

答案 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 || 32等于a

在c ++版本中,当评估3时,a || b将转换为a类型,如果bool(bool)a,则true将是a || btrue的结果为2 || 3bool,当true添加true时,int将始终转换为{{1}所以true等于1