/*
* 逻辑非非
* 在非的基础上在一个非
* 将值转换成布尔值boolean返回
* 可以确定变量中存贮的值是否满足某些条件,再做处理
* */

var val = "";//false
var val = null;//false
var val = undefined;//false
var val = 0;//false
var val = false;//false

var val = true;//true
var val = "1";//true
var val = 1;//true
var val = [1,2,3];//true
var val = {name:"name",age:21};//true
console.log(val);
console.log(!!val);

/*可以看出!!逻辑非非可以用来检测某一变量值是否为 null,undefined,"",0,false。
* 如果时这些值中的一个返回false,否则返回true,方便一些限制
* */

/*实现原理
* 逻辑非可以将一个值转换为与其对应的布尔值,同时使用连个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为,
* !! 第一个!,会基于无论什么操作数返回一个布尔值,第二个!,则根据上一个!取得布尔值取反,得到这个值真正的布尔值。
* 最终结果与使用Boolean()
console.log(Boolean(null));//false
console.log(Boolean(undefined));//false
console.log(Boolean(""));//false
console.log(Boolean(0));//false
console.log(Boolean("1"));//true