js中对于一些值使用if语句进行判断时,其逻辑值是“真”还是“假”的总结
var data=1;
var data.data=1;
if(data.data)//false
var data={}
var data.data=1;
if(data.data)//true
var data=1;
if(data.data)//false
if(data.data.data)//报错(*1)
if(data)//报错 与(*1)中的报错原因一样
if(null)//false
if(!null)//true
if(undefined)//false 注:(*1)中的data.data.data是由于是未定义而报错,而这里的未定义返回的是false
if(!undefined)//true
if(typeof data)//true
if(typeof data==undefined)//false
/*
看到7的结果可能表示怀疑,请看如下解释
typeof 返回的是一个字符串 由于data未定义,typeof data返回的是undefined字符串
所以if(undefined字符串)结果为真
而undefined相当于是js内置的一个对象吧
所以typeof data==undefined的结果为false
*/
if(typeof data=='undefined')//true
if(0)//false
var n=0;
if(n)//false
var m="0";
if(m)//true
if(m==n)//true
/*
在js中数字0代表false,非0则为true
m是字符串0,所以为true
但是由于js不是强类型语言,在对这些类型做==运算时,如果只是纯数字的话,会当做数字进行比较
如:
if(0.0=='0')//true
if('0.0'==0)//true
但是
alert('0.0'+0)//0.00
alert(0+'0.0')//00.0
alert(0+0.0);//0
alert(0.0+'0')//00
*/
var arr=[];
if(arr=="")//true
//对于纯数字的字符串和数字使用+(加)时,都被当成了字符串
//对于寸数字的字符串和数字使用/(除)时,都被当成了数字
/*
这里用该说js比较灵活吧,因为字符之间的操作就没有/(除)操作
*/
alert('aa'/2)//NaN
if('aa'/2)//false
if(!'aa'/2)//false
if(!('aa'/2))//true
if('')//false
if(!'')//true