先看一道面试题 让 a==1&&a==2&&a==3,这个问题主要查看对js隐式转换的理解,首先a不可能是一个原始类型,那么a只有可能是个对象类型了,查阅犀牛书52页《3.8.3对象转换为原始值》章节得知,对象转换到字符串或者数字类型调用了toString()和valueOf()两个方法中的一个,具体细节如下
- 对象转换为字符串
文章插图
对象转换为字符串例子1
如果对象没有toString()方法,或者这个方法并不返回一个原始值,那么就调用valueOf()方法,如果valueOf()返回原始值,则将它转换为字符串类型,例如:
文章插图
对象转换为字符串例子2
对象转换为数字的过程调用valueOf()方法返回一个原始值,并转换为数字类型,如果没有valueOf()方法,则调用toString()方法,过程同对象转换为字符串相似
文章插图
对象转换为数字例子
详细的js类型转换方式看下表格:
文章插图
文章插图
== 相等比较
- 一个值是undefined,另一个值是null,则它们相等,即 undefined == null;
- 一个值是数字,另一个值是字符串,则先将字符串转换为数字,然后比较, '123' == 123 转换为123 == 123 // true
- 如果有一个是true,则先转换为1,再比较,false则转换为0再比较
- 如果有一个是对象,另一个是原始类型,见本章所述
- 先查看类型是否相等,不相等就false
- null === undefined // false
- NaN === NaN // false
- 0 === -0 // true
- 先查看类型是否相等,不相等就false,相等就查看值是否相等,原始类型比较的是值,对象类型则比较地址是否相等,不相等就false,相等就true
【javascript 类型的隐式转换】
推荐阅读
- 上古三大神器 最厉害的上古神器
- 吃山楂上火吗?山楂的营养价值有哪些?
- 吃猕猴桃上火吗?猕猴桃的营养价值有哪些?
- 现象学家所理解的现象 世界上科学家无法解释的现象
- 吃豆腐皮上火吗?豆腐皮的营养价值有哪些?
- 为什么杀牛的时候牛会跪下来 为什么牛用一头
- 吃薏仁粉上火吗?薏仁粉的营养价值有哪些?
- 吃青豆上火吗?青豆的营养价值有哪些?
- 吃菱角上火吗?菱角的营养价值有哪些?
- 吃北京烤鸭上火吗?北京烤鸭的营养价值有哪些?