js ==与===区别(非严格相等与严格相等)
-
基本数据类型:number、string、boolean、undefined、null
高级数据类型:object -
表格形式比较:
比较的类型 | == | === |
---|---|---|
基础类型 | 不同基础类型间比较,“转化成同一类型后的值”看“值”是否相等 | 如果类型不同,其结果就是不等 |
高级类型 | 进行“指针地址”比较,没有区别 | 进行“指针地址”比较,没有区别 |
基础类型与高级类型 | 将高级转化为基础类型,进行“值”比较 | 因为类型不同,结果为false |
-
最好永远都不要使用操作符。=操作符的结果更容易预测,并且因为没有隐式转换,严格相等比较的操作会更快。
-
非严格相等 ==
==比较两个值是否相等,在比较前将两个被比较的值转换为相同类型。在转换后(等式的一边或两边都可能被转换),最终的比较方式等同于全等操作符 === 的比较方式。 相等操作符满足交换律。
==比较2个值,是相同类型时,等同于 === 比较。 -
==对于不同类型的值,进行比较的原则:
- Number、String、Boolean 转换为数字
- Object 转换为基本类型
出处:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
- 对象转换为基本类型的转换规则:
如果要将对象转为字符串,则是采用以下步骤。
- 先调用toString方法,如果toString方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。
- 如果toString方法返回的是复合类型的值,再调用valueOf方法,如果valueOf方法返回的是原始类型的值,则对该值使用String方法,不再进行以下步骤。
- 如果valueOf方法返回的是复合类型的值,则报错。
出处:https://wohugb.gitbooks.io/javascript/grammar/conversion.html