/*
! 非运算
!就是对一个布尔值进行取反操作,true变false,false变true
-如果对一个值进行两次取反,它不会变化
-如果对非布尔值进行运算,则会将其转换成布尔值,然后再取反
所以可能利用这一特点将其他数据类型转换为布尔值
为任意数据类型取两次反,转换为布尔值
*/
var a = 10;
// a = "hello";
// a = undefined;
// a = null;
// console.log(a);
// console.log(typeof a);
// a = !!a;
// console.log(a);
// console.log(typeof a);
/*
&& 与运算
&&可以对符号两侧的值进行运算并返回结果
-只要有一个false,则返回false.(都为真才是真)
-JS中的“与”属于短路与,如果第一个值为false,则不会看第二个值
*/
// var result = false && true;
// console.log("result = " + result);
/*
|| 或运算
||可以对符号两侧的值进行运算并返回结果
-只要有一个true,则返回true.(都假才假)
-JS中的“或”属于短路或,如果第一个值为true,则不会看第二个值
*/
/*
&& || 非布尔值的情况
-对于非布尔值进行运算时,会先将其转换为布尔值,再运算,并返回原值
-与运算:
如果果两个值都为true,则返回后边的。
如果有一个值为false,则返回靠前的false的值。
-或运算:
如果果两个值都为false,则返回后边的。
如果有一个值为true,则返回第一个true的值。
(ps:运算在哪中止,就返回哪个值)
*/
//返回2
var result = 1 && 2;
//返回0
result = 0 && 2;
//返回NaN
result = NaN && 0;
//返回1
result = 1 || 2;
//返回undefined
result = 0 || undefined;
//返回2
result = NaN || 2;
console.log("result = " + result);