此时的情况满足上转换规则的第三步,在双等号左右两边的类型相等时,采用三等号进行判定
此时的==号两边的地址是不一样的,所以返回为false
有了上面两个经验,不难看出, !{}为布尔类,将转换为0, 因为右边为转换成数值类,所以左边Number({}) =>NaN, NaN连自己都不相等,所以为false
以上三种规则都不满足,在javascript规范中找到了答案
Null类型,代表“空值”,代表一个空对象指针,使用typeof运算得到 “object”,所以你可以认为它是一个特殊的对象值。
undefined: Undefined类型,当一个声明了一个变量未初始化时,得到的就是undefined
实际上,undefined值是派生自null值的,ECMAScript标准规定对二者进行相等性测试要返回true,
你在浏览器地址栏输入这句回车就知道了
javascript:alert(''==false)当然。也可以在控制台输出 ''==false
''==0 //true
''==false//true
也就是说 空字符串 和 0 、false 是基本上等同的,但不绝对
你输出''===0//将得到false
===是严格比较
==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase。
举例说明:
"1" == true
类型不同,"=="将先做类型转换,把true转换为1,即为 "1" == 1;
此时,类型仍不同,继续进行类型转换,把"1"转换为1,即为 1 == 1;
此时,"==" 左右两边的类型都为数值型,比较成功!
如果比较:"1" === true 左侧为字符型,右侧为bool布尔型,左右两侧类型不同,结果为false;
如果比较:"1" === 1 左侧为字符型,右侧为int数值型,左右两侧类型不同,结果为false;
第一个是鼠标按下时触发事件,在这三个事件中第一个触发,此时结果是false,然后第二个是鼠标抬起触发事件,第二触发,此时结果是true,最后一个单击事件,最后一个触发,此时结果改变为false