一,&&: 所有条件都为 true, 返回 true; 只要有一个是 false, 返回 false; 不一定返回 boolean 类型值
1, 可以操作任意类型的数据, 不只是布尔型;(除了 null,undefined,NaN 不会隐式转换)
- var a = 33,b=55,c=88
- console.log(a<b&&b<c);// 返回 true
如果在有一个操作数不是布尔值得情况下, 逻辑与就不一定返回布尔值, 此时它遵循下列规则
如果前面操作数隐式类型转换后为 true, 则返回最后一个操作数:
- console.log(77&&33);// 返回 33
- console.log(true&&9&&"您好");// 返回 "您好"
- console.log(80 && true );// 返回 true
如果前面有一个隐式转换后不是 true, 则返回第一个隐式转换为 false 的值 (即短路的值)
- console.log(""&&true);// 返回空格
- console.log(44&&0&&"hello");// 返回 0
- console.log(55&&false&&0);// 返回 false
- console.log(0&&null&&55);// 返回 0
- console.log(NaN && 16 && "");// 返回 NaN
- console.log(""&& NaN && 12);// 返回"" 空字符串
2, 返回值不一定是 boolean 类型. null, 返回 null;undefined, 返回 undefined;NaN, 返回 NaN
- console.log(55*"abc"&&true);// 返回 NaN
- console.log(null&&true);// 返回 null
- console.log(undefined&&true);// 返回 undefined
- console.log(undefined&&null&&9&&NaN);// 返回 undefined
二,||: 只要一个条件为 true, 则返回 true; 都为 false, 则返回 false
1, 可以操作任意类型的数据, 不只是布尔型;
2, 返回值不一定是 boolean 类型.
- (有一个为 true, 则返回 true, 后面就被短路啦; 都为 false, 一直走到最后一个, 打印左后一个)
- console.log(33<22||33>11);// 返回 true
- console.log(undefined || null || 0);// 返回 0
- console.log(undefined || 88 || 99 );// 返回 88
- console.lof(undefined || 33>10 || false);// 返回 true
- console.log(null || undefined || NaN);// 返回 NaN
- console.log(NaN || undefined) ;// 返回 undefined
- console.log("hellow" || NaN);// 返回 hellow
三,!(逻辑非): 返回值一定是 boolean 值
1, 可以操作任意类型的数据, 返回值一定是 boolean 值;
2,!! 同事使用两个逻辑非操作符时 -- 两次求反, 为本来代表的 boolean 值
- console.log(!false);//true
- console.log(!88);//false
- console.log(!NaN);//true
- console.log(!!NaN);//false
- console.log(!!"hell");//true
来源: http://www.bubuko.com/infodetail-3096691.html