相信刚接触JS的人都会被他的想等性判断给整糊涂,看看下面代码,你能答对几个?
南===南//假的 南==南//假的 对象。(南南)//是真的吗 0==假//真 1==true//真实的 号(null)===0//真实的 null==0//假
Javascript提供了三种不同的值比较操作,分别是严格相等,宽松相等,以及Object.is,希望看完下面的内容,能够彻底弄清楚他的判断逻辑。
1,如果x的数据类型和y的数据类型不相同,返回假;
2,如果x是数字类型
-
<李> x是南返回假李>
<李> y是南返回假李>
<李>的x值和y的值相等,返回真正的李>
<李> x是+ 0,y是0,返回真正的李>
<李> x是0,y是+ 0,返回真正的李>
<李>否则返回假李>
3,其他类型参照SameValueNonNumber (x, y)
-
<李>断言:x, y不类是数字型;李>
<李>断言:x, y的数据类型相同,李>
<李> x是未定义的,y是未定义的返回true;李>
<李> x是null, y是null,返回true;李>
<李> x是字符串类型,当且仅当x, y字符序列完全相同时(长度相同,每个位置上的字符也相同)返回真,否则返回假;李>
<李>如果x是布尔类型,当x, y都为真或者都为假时返回真,否则返回假;李>
<李>如果类x是象征型,当x, y是相同的符号值,返回真,否则返回假;李>
<李>如果x, y是同一个对象值,返回真,否则返回假;李>
南===南//假的 未定义===定义//真实的 null===null//真实的 未定义===null//假的 >之前
<李>如果x, y的类型相同,返回x===y的结果,李> <李>如果x是null, y是未定义的,返回正确的;李> <李>如果x是未定义的,y是null,返回正确的;李> <李>如果x是数值,y是字符串,返回x==当时(y);李> <李>如果x是字符串,y是数值,返回,当时(x)==y;李> <李>如果x是布尔类型,返回,当时(x)==y的结果,李> <李>如果y是布尔类型,返回x==当时(y)的结果,李> <李>如果x是字符串或数字或符号中的一种并且类型(y)是对象,返回x==ToPrimitive (y)的结果李> <李>如果类型(x)是对象并且类型(y)是字符串或数字或符号中的一种,返回ToPrimitive (x)==y的结果李> <李>其他返回假李>
12==0 xc的//真的,0 xc是16进制 12==//真正的“12”//12==12 c”假,说明,当时转换是用的数量()方法注意:
数量===0(零) 但是 null==0//假,
<强> 2.1,当时将一个值转换为数值类型
强>详情参考数值类型转换
-
<李>如果是布尔类型,真正返回1,假返回0;李>
<李>如果是数值,只是简单的传入返回;李>
<李>如果是null,返回0 李>
<李>如果是未定义的,返回南,李>
<李>如果是字符串,字符串如果只包含数字,则将其转换成十进制数,如果是有效的浮点格式,将其转换成对应的浮点数值;如果是二进制或十六进制将其转换成对应的十进制数值;李>
<李>如果是对象,调用对象的返回对象的值()方法,然后依照前面规则转换,如果的返回值是南,则调用toString()方法,再依照前面的规则转换返回的字符串李>
<强> 2.2 ToPrimitive 强>
toPrimitive (A)通过尝试调用一个的A.toString()和A.valueOf()方法,将参数一转换为原始值(原始);
JS中原始类型有:数字、字符串、布尔值、空,未定义的;
不同类型对象的返回对象的值()方法的返回值:
对象 返回值 数组 返回数组对象本身。 布尔 布尔值 日期 存储的时间是从1970年1月1日午夜开始计的毫秒数UTC 函数 函数本身 数量 数字值 对象 对象本身。这是默认情况,可以覆盖自定义对象的的方法 字符串 字符串值