<script>
var arr=[];
alert(arr==false);//true
var arr1=[1];
alert(arr==false);//false
alert(undefined==false);
</script>
哪位大神帮我解释一下,这里面进行了什么隐示转化,undefined和null在和其他类型进行比较时,会不会进行隐示转化
以上截图是怎样一个隐示转化,能不能解释一下
<script>
var arr=[];
alert(arr==false);//true
var arr1=[1];
alert(arr==false);//false
alert(undefined==false);
</script>
哪位大神帮我解释一下,这里面进行了什么隐示转化,undefined和null在和其他类型进行比较时,会不会进行隐示转化
以上截图是怎样一个隐示转化,能不能解释一下
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
// 其他的比较不细说楼主可以自己对照解答了
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
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)也能用,会把()内的隐式转换为布尔值。