标签:
准备两个对象用于下面的讨论。
1 var alice = { 2 name: "alice", 3 toString: function () { 4 return this.name; 5 } 6 }; 7 var smith = { 8 name: "smith", 9 toString: function () { 10 return this.name; 11 } 12 }
在 javascript 中,对于 && 不仅仅可以用于 boolean 类型,也不仅仅返回 Boolean 类型的结果。
l 如果第一个操作数是 Boolean 类型,而且值为 false ,那么直接返回 false。
l 如果第一个操作数是 Boolean 类型,而且值为 true,另外一个操作数是 object 类型,那么将返回这个对象。
l 如果两个操作数都是 object 类型,那么,返回第二个对象。
l 如果任何一个操作数是 null,那么,返回 null。
l 如果任何一个操作数是 NaN,那么返回 NaN。
l 如果任何一个操作数是 undefinded,那么返回 undefined。
1 alert(false && alice); // false 2 alert(true && alice); // alice 3 4 alert(alice && smith); // smith 5 alert(smith && alice); // alice 6 7 alert(null && alice); // null 8 alert(NaN && alice); // NaN 9 alert(undefined && alice); // undefined 10 alert(alice && undefined); // undefined
对于 || 来说,同样也不仅仅用于 Boolean 类型,也不仅仅返回 Boolean 类型的结果。
事实上,null、undefined、NaN 都将被看作 false。而对象被当作 true。
l 如果第一个操作数是 boolean 类型,而且值为 true, 那么,直接返回 true。
l 如果第一个操作数是 Boolean 类型,而且值为 false ,第二个操作数为 object,那么返回 object 对象。
l 如果两个操作数都是 object 类型,那么返回第一个对象。
l 如果两个操作数都是 null,那么,返回 null。
l 如果两个操作数都是 NaN,那么返回 NaN。
l 如果两个操作数都是 undefined,那么,返回 undefined。
1 alert(false || alice); // alice 2 3 alert(true || alice); // true 4 5 alert(alice || smith); // alice 6 7 alert(smith || alice); // smith 8 9 alert(null || alice); // alice 10 11 alert(alice || null); // alice 12 13 alert(null || null); // null 14 15 alert(NaN || alice); // alice 16 17 alert(alice || NaN); // alice 18 19 alert(NaN || NaN); // NaN 20 21 alert(undefined || alice); // alice 22 23 alert(alice || undefined); // alice 24 25 alert(undefined || undefined); // undefined
不用搞得这么复杂 推荐大家看这部分的说明
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回a
a || b : 将a, b转换为Boolean类型, 再执行逻辑或, true返回a, false返回b
转换规则:
对象为true
非零数字为true
非空字符串为true
其他为false
标签:
原文地址:http://www.cnblogs.com/510blog/p/4518947.html