或的高级用法
console.log(true || true); // true console.log(true || false); // true console.log(false || true); // true console.log(false || false); // false console.log(0 || false); // false console.log(false || 0); // 0 console.log(0 || true); //true console.log(true || 0); //true console.log(1 || false); //1 console.log(false || 1); //1 console.log(1 || true); //1 console.log(true || 1); //true
总结:0 为false,1为true ,判断语句中,只要有一个是true,则返回的结果为true,否则为false。执行顺序为从上至下,从左至右,如果找到一个结果为true则返回true并且不再往下执行,如果第一个结果为false,则继续往下找,知道true为止,返回true,如果没有true,则返回最后一个false的结果(0或false)
且的高级用法
console.log(true && true); // true console.log(true && false); // false console.log(false && true); // false console.log(false && false); // false console.log(0 && false); // 0 console.log(false && 0); // false console.log(0 && true); //0 console.log(true && 0); //0 console.log(1 && false); //false console.log(false && 1); //false console.log(1 && true); //true console.log(true && 1); //1 console.log(2 && true); //true console.log(true && 2); // true console.log("" && true); // "" console.log(true && ""); // "" console.log("a" && true); // true console.log(true && "a"); // "a" console.log({} && true); // true console.log(true && {}); // {} console.log([] && true); // true console.log(true && []); // [] console.log(null && true); // null console.log(true && null); // null console.log(undefined && true); // undefined console.log(true && undefined); // undefined console.log(NaN && true); // NaN console.log(true && NaN); // NaN
总结:0为false,1为true,判断语句中,必须两个条件都为true,返回true,否则返回false,执行顺序自上而下,自左至右,第一个条件不满足时直接返回左边的值false或0,不再往下执行,第一个条件为true或者1时,继续看第二个条件,如果第二个条件也为true或者1时,则返回右边的值true或1,如果第二个条件不满足时,则返回右边的值false或0,
如果是数值进行比较非0即为true,就是说上面的1都可以替换成非0的任何数字,结果不变。
如果是字符进行比较的话非""空即为true,就是说""空的话在执行中会转换成false按照false的规则执行,但是结果会显示成""空字符,如果字符""里面有任何东西的话会按照true来执行,但是结果还是显示原来的字符
如果是数组[],对象,函数{}进行判断的时候会隐式转换成true,在运行的时候遵循true的规则,但是结果还是以前的表达方式
如果是null,undefined,NaN进行判断的话,隐式转换时,全部按照false的规则进行运算,但是结果依然会是原来的表达方式,
隐士转换与显示转换(简单描述)
这时顺便说一下,在什么情况下,会进行隐士转换?
就是在进行下面这些运算符操作的时候会进行隐式转换:
算数运算符:+ - * / %
比较运算符:== === != !== < > <= >= ?
逻辑运算符:&& || !
隐式转换中,在运算的时候会发生转换,在运算完成之后,根据判断的结果,显示原来的值,不会改变原值
而显式转换呢?
是手动进行转换,会改变要转换的值,再进行运算,一目了然,能看出来,而我们往往犯错就是在隐式转换当中
记得好好敲代码。
原文地址:https://www.cnblogs.com/goodgoodstudyV/p/12302006.html