2018-06-13 js中的类型和其值对布尔值的转换

var st={name:"bob",age:11,addr:"",email:null,country:[],points:[11,12,45,21],goal:[{os:"ios",cap:21}]}

mongos> if(st.goal && st.goal[0])print("ok");else print("no")
ok
mongos> if(st.country && st.country[0])print("ok");else print("no")
no

mongos> if(st.country)print("ok");else print("no")
ok
mongos> if(st.goal[0])print("ok");else print("no")
ok

mongos> if(st.name)print("ok");else print("no")
ok
mongos> if(st.addr)print("ok");else print("no")
no

mongos> if(st.email)print("ok");else print("no")
no
mongos> if(st.email1)print("ok");else print("no")
no

mongos> if(st.email1.name)print("ok");else print("no")
2018-06-13T15:55:47.447+0800 E QUERY    [thread1] TypeError: st.email1 is undefined :
@(shell):1:1

//如下可应对属性不存在情况,&&会在属性不存在时结束而不会继续访问子属性导致报错
mongos> if(st.members)print("ok");else print("no")
ok
mongos> if(st.membersa)print("ok");else print("no")
no
mongos> if(st.members && st.members.sta)print("ok");else print("no")
no
mongos> if(st.membersa && st.membersa.sta)print("ok");else print("no")
no


mongos> if(st.members.length)print("ok");else print("no")
no
mongos> if(st.country.length)print("ok");else print("no")
no

对象存在,访问其不存在的属性不会报错,只是会得到undefined
再继续访问属性或者使用[0]这样的角标的话,会报错。因为undefined不支持该操作!
所以使用 st.goal && st.goal[coutry]这样的句法可以避免报错!
st.goal 不存在 则结束掉。st.goal="" 逻辑上将返回false,如果值是[]或者{},返回true,继续访问country属性,也不会报错,最多得到的是undefined
所以只要在底层函数默认处理undefined即可。

你可能感兴趣的:(2018-06-13 js中的类型和其值对布尔值的转换)