+ -
当前位置:首页 → 问答吧 → 一个关于ECMAScript逻辑运算符的问题..疑惑

一个关于ECMAScript逻辑运算符的问题..疑惑

时间:2010-05-28

来源:互联网

javascript:var oBoolean = new Boolean(true);alert(typeof (oBoolean && true));

复制到浏览器地址栏,显示返回的类型是boolean型。

http://www.w3school.com.cn/js/pro_js_operators_boolean.asp

官方的说明是:

如果某个运算数不是原始的 Boolean 型值,逻辑 AND 运算并不一定返回 Boolean 值:
如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
如果两个运算数都是对象,返回第二个对象。
如果某个运算数是 null,返回 null。
如果某个运算数是 NaN,返回 NaN。
如果某个运算数是 undefined,发生错误。


按照说明返回的应该是object呀。

作者: webtonny   发布时间: 2010-05-28

如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
这条在ECMA262中没有找到证据,是个错误的论断:
LogicalANDExpression :
BitwiseORExpression LogicalANDExpression && BitwiseORExpression
Semantics
The production LogicalANDExpression : LogicalANDExpression && BitwiseORExpression is evaluated as follows:
1.
Let lref be the result of evaluating LogicalANDExpression.
2.
Let lval be GetValue(lref).
3.
If ToBoolean(lval) is false, return lval.
4.
Let rref be the result of evaluating BitwiseORExpression.
5.
Return GetValue(rref).

依照上述步骤,oBoolean && true的结果是:
1.左表达式结果:oBoolean
2.oBoolean的值true
3.true转为布尔类型为true(不为false,所以继续对右表达式求值)
4.右表达式结果为true
5.返回true

typeof(true)自然是boolean

作者: 我佛山人   发布时间: 2010-05-28

引用:
原帖由 我佛山人 于 2010-5-28 18:23 发表
如果一个运算数是对象,另一个是 Boolean 值,返回该对象。
这条在ECMA262中没有找到证据,是个错误的论断:
LogicalANDExpression :
BitwiseORExpression LogicalANDExpression && BitwiseORExpression
Semantics ...
谢谢您。依照上述步骤,oBoolean && true的结果是:
1.左表达式结果:oBoolean
2.oBoolean的值true
3.true转为布尔类型为true(不为false,所以继续对右表达式求值)
4.右表达式结果为true
5.返回true

谢谢您。

作者: webtonny   发布时间: 2010-05-28

相关阅读 更多