关于比较运算符==

<script>

    var arr=[];
    alert(arr==false);//true
    var arr1=[1];
    alert(arr==false);//false
    alert(undefined==false);

</script>
哪位大神帮我解释一下,这里面进行了什么隐示转化,undefined和null在和其他类型进行比较时,会不会进行隐示转化

clipboard.png
以上截图是怎样一个隐示转化,能不能解释一下

阅读 2.8k
4 个回答

1:undefined==null,且与其他类型比较时,都不会转化,即为false;
2:基本类型比较。向Number转。NaN不等于任何。
3:引用数据类型比较。比较指针地址。
4:2和3之间比较,引用数据类型会先调用valueOf()方法,再调用toString方法(已经是String则不调),然后调用Number()方法转为Number类型。需要注意的是Date类型会直接调用toString。


至于,你后面贴的图呢。
1:Number(true)是1.
oUl你可以试试oUl.valueOf().toString()一步一步看看是什么;
2:oUl!=undefined的结果其实还是由oUl==undefined的结果取反的出来的。也可以按照1的来自己试一试
////////////
另:其实有时候不是必须用==做判断,if(oUl)也能用,会把()内的隐式转换为布尔值。

undefined和nul在==比较时不会进行类型转换,并且他们两个相等

javascript权威指南 4.9.1 有说相等运算符 “==”
如果两个操作数类型不同,“==”相等操作符也可能会相等,检测相等将会遵循如下规则和类型转换
--1》 如果一个指是null,一个undefined,则他们类型相等。
--2》 如果一个值是数字,另一个字符是字符串,先将字符串转为数字,然后使用转换后的值进行比较
--3》 如果其中一个值是true,则将其转换为1进行比较,如果其中一个值是false,则将其转换为0进行比较
--4》如果一个值是对象,另一个值是原值(这个是我自己写的可以去查看一下准确的文献,这里不码字了),则先将对象转换为原值(对象获取原值最好你自己去查询相关文献,简单的说先调用valueOf如果是原值则返回,如果不是原值继续调用toString,如果是原值则返回,如果不是原值就报错,原值就是javascript的5中基本类型)
--》说到这里已经可以解释你的问题了,go

var arr=[];
alert(arr==false);//true

// arr 和false比较   对应上面的第4点arr是对象先转原值
arr.valueOf() // []  []不是原值继续调用toString()
arr.toString() // ''  ''是原值所以[]转成原值是''
// 那么现在的问题是 '' == false 对应上面第3点 false 应该先转成 0
// 那么现在的问题是 ‘’ == 0 对应上面的第2点 需要把‘’转数字现在的比较变成
Number('') == 0; 

Number('');//0

// 其他的比较不细说楼主可以自己对照解答了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题