js中的逻辑运算符
$(function() { if ("") { console.info(" \"\" true"); } else { console.info(" \"\" false"); } if (0) { console.info(" 0 true"); } else { console.info(" 0 false"); } if (undefined) { console.info(" undefined true"); } else { console.info(" undefined false"); } // if (a) {//ReferenceError: aa is not defined if ("a") { console.info(" a true"); } else { console.info(" a false"); } if (null) { console.info(" null true"); } else { console.info(" null false"); } console.info("time" || null); //time console.info("" || null); //null console.info(null || ""); //空字符串 var a; console.info(a); //undefined a = a || []; console.info(a); //[] /** * * undefined的含义其实是定义了一个引用,但是引用没有之上任何变量 * 例如:var a; a的含义就是undefined、 * * 但是如果你直接使用 aa, 没有 var aa; 那么浏览器会直接报错 * 火狐报的错是 ReferenceError: aa is not defined * 也就是说if(aa){} 或者 aa = aa || []; 浏览器都会报错(引用错误) * * 但是,aa="string"; 这种使用方法是没有错误的! * */ //aa = "string";console.info(aa);-->string console.info(aa); //ReferenceError: aa is not defined });
上面代码在火狐上产生的效果如下图:
总结下来就是:
在js 中, 空字符串、null、undefined、0 都代表false。
在学习C++的时候,我们知道,逻辑运算符有“截断”(忘了叫什么名字了)的特性:或运算符|| 当第一次遇见true的时候,就不在往下面执行了!
那么在js中也只这样的。
console.info("time" || null);//time time代表true,后面就不执行了,返回time console.info("" || null);//null "" 代表false,继续执行,返回null console.info(null || "");//空字符串 null 代表false,继续执行,返回""
a = a || [];
那么这句话的意思就是 如果a未定义就创建一个数组对象!