在JavaScript逻辑运算中,0、""、null、false、undefined、NaN都会判为false,其他都为true;
在JavaScript运算过程中,首先js 会将 && 和|| 两边的值转成Boolean 类型,然后再算值 ,&&运算如果返回true,则取后面的值,如果|| 返回true,则取前面的值,
转换规则:
对象为true;
非零数字为true;
非空字符串为true;
其他为false;
1、只要“||”前面为false,无论“||”后面是true还是false,结果都返回“||”后面的值。
2、只要“||”前面为true,无论“||”后面是true还是false,结果都返回“||”前面的值。
3、只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
4、只要“&&”前面是true,无论“&&”后面是true还是false,结果都将返“&&”后面的值;
逻辑运算符,“||”和“&&”都是遵行短路原则,只要确定符号前面的真假,既可确定返回值。
需要说明的是“&&”的优先级是高于“||”的;
odi = odi|| attr; //如果foo存在,值不变,否则把bar的值赋给foo
等于
if(!odi){ odi= attr; }
为什么if(!odi),为什么不直接写if(odi)?
其实这是一种更严谨的写法:!的作用是把一个其他类型的变量转成的bool类型。
可以测试选 typeof 5和typeof !5的区别,返回的分别是number和boolean;
补充:
原来不理解类似下面这句表达式:
(a>8) || (b+=a);
其实和上面的或运算的理解一样的,如果a>8为真,则不执行b+=a;如果a>8为false,则执行b+=a;
测试脚本如下:
当a>8是,打印结果为1;当a≤8时,打印结果为a+1;
function test(a){ var b=1; // if(a>6){ // b=b+a; // alert(b); // } (a>8) || (b+=a); alert(b); } window.onload = function(){ test(9); }