对两个表达式执行逻辑“或”。
result = expression1 || expression2
参数
result
任何变量。
expression1
任何表达式。
expression2
任何表达式。
说明
如果两个表达式中有一个或两个等于 True,则 result 是 True。下面的表举例说明了 result 是如何被决定的:
expression1 expression2 result
True True True
True False True
False True True
False False False
JScript 使用下面的规则来把非 Boolean 值转换为 Boolean 值:
所有对象都被认为是 true。
字符串当且仅当为空时才被认为是 false。
null 和 undefined 被认为是 false。
数字当且仅当为 0 时才是 false。
上面是JS帮助文档中关于逻辑“或”的说明,但是今天在Ajax在源框架prototype.js中可以看到
Object.extend(this.options, options || {});
的用法(关于Object.extend()实现对象的继承)
影响中 “||” 运算符一直都用作逻辑运算,返回boolean类型数据。那么这里“options || {}”会返回boolean数据吗?
下面看一个小实验
代码:
<script>
var a = {
b :'b'
};
document.write(a || {});
</script>
运行结果:
[object Object]
代码:
<script>
var a = {
b :'b'
};
document.write((a || {}).b);
</script>
运行结果:
b
代码:
<script>
var a = {
b :'b'
};
document.write(({} || a).b);
</script>
运行结果:
undefined
代码:
<script>
var a = {
b :'b'
};
document.write(true || a);
</script>
运行结果:
ture
所以我们可以得出结论
expression1为true(这时不考虑expression2)
判断是否为boolean类型,
是 返回true
否 返回expression1
expression1为false
expression1为true,判断是否为boolean类型,
是 返回true
否 返回expression2
expression1为false
expression1为false,判断expression1是否为boolean类型
是 判断expression2是否为boolean类型
是 返回false
否 返回expression2
否 返回expression1
<div style="background:red">aaaaa</div>