为了账号安全,请及时绑定邮箱和手机立即绑定

空的数组和对象字面量转换为布尔值得一点疑惑

空的数组和对象字面量转换为布尔值得一点疑惑

夜千寻 2016-06-10 14:58:33
var  o={};1, alert(o== true);//弹出false2, if(arr){          alert(o==false)//正确弹出,并且还是弹出false;      }上面的例子都能正常运行,不是冲突了吗?var arr=[];1,alert(arr==true)//弹出false,2,if(arr){alert(arr==false)//正确弹出,并且还是弹出true}
查看完整描述

2 回答

?
柠檬酸钠

TA贡献331条经验 获得超534个赞

在if语句中并不是把o和arr转换为布尔值,而是和undefined作比较,如果定义执行if内的语句,未定义则跳过。和arr或者o里面是否有内容无关

查看完整回答
3 反对 回复 2016-06-10
  • 夜千寻
    夜千寻
    还有一点就是为什么alert( { 空的字面量对象 } ==任意布尔值)都是false, 而alert([ 空的数组 ]==false)的时候确实true,虽然书上说的空对象和空数组转换为布尔值都是true,但是实际结果确实不同的,浏览器测试了好几遍才敢提问的,不知道是我编辑器还是浏览器问题?
  • 柠檬酸钠
    柠檬酸钠
    楼主为何要纠结这么一点。。。。 你可以Boolean([])或者Boolean({}),两个的确都是true 至于为啥空数组等于false,我看楼主还是不要纠结了。。。
?
qq_大寒_2

TA贡献173条经验 获得超185个赞

var  o={};//空对象。
alert(o== true);//弹出false 比较运算,两个方面,值比较,类型比较,都不符合所以是false;
var arr=[];
alert(arr==true)//弹出false, 同上道理;

//////////////////////////////////////////

var  o={};
var arr=[];
if(arr){
          alert(o==false)//正确弹出,并且还是弹出false;
      }
//if(条件判断)圆括号里面执行一定是true;才可以执行下面函数体中的命令,执行结果真假,同上。


////////////////////

var  o={};
var arr=[];
if(arr){
alert(arr==false)//正确弹出,并且还是弹出true
}
//执行结果,类型不相等,值相等,满足其一,所以弹出true;


查看完整回答
1 反对 回复 2016-06-10
  • 2 回答
  • 0 关注
  • 1779 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信