每日一问——JS数据转换

1. [] == ![]结果为什么?为什么?

结果是true。首先!会将![]转换为布尔类型false,然后再对象与布尔类型相比较时会都转换为number进行比较,对象转number会先调用tostring转换为字符串再将字符串转换为Number类型。[]->’ '->0,
而false转为number类型也为0,所以结果为true。

2. JS中类型转换有哪几种?

(这里直接借用的是前面的笔记)
(1)把其他数据类型转换为number
发生情况:
1、isNaN检测时浏览器会自主调用Number转换
2、基于parseInt / parseFloat / Number 手动转换
3、数学运算(+ - * / %)
tip:这里需要注意的是+的情况并不一定是转换为number进行数学运算,在出现字符串的时候会变成字符串拼接。
(2)把其他类型转换为字符串
常用发生情况:
1、基于alert / confirm / prompt / docunment.write等方法输出内容的时候,会把值转换为字符串,然后再输出
2、基于“+”进行字符串拼接的时候
3、把引用值转化为数字时,首先会先转化为字符串
4、给对象设置属性名,如果不是字符串,数显转换为字符串,然后再当做属性存储到对象中(对象的属性只能是字符串或者数字)
5、手动调用toString / toFixed / join / String等方法时
(3)把其他值转换为布尔类型
常用发生情况:
1、基于!/ !! / Boolean等方法
2、条件判断中的条件最后均会转换为布尔类型

3. == 和 ===有什么区别?

如果 == 两边的数据类型不同会进行默认的数据类型转换。而 ===是绝对相等,如果两边的数据类型不一样则直接不相等,它要求类型和值完全一样才会相等。

4. 对象转原始类型是根据什么流程运行的?

  1. 对象转换为布尔值:对象到布尔值的转换是非常简单的,所有对象(包括数组和函数)都转换为true。对于包装对象也是如此:new Bolean(false)是一个对象而不是原始值,它将转换为true。
  2. 对象转换为字符串:如果对象有toString()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为字符串(如果本身不是字符串的话),并返回这个字符串结果;如果对象没有toString()方法,或者这个方法不是返回一个原始值,那么JavaScript会调用valueOf()方法,如果存在这个方法,则JavaScript调用它。如果返回一个原始值,JavaScript将他转换为字符串(如果本身不是字符串的话);如果这两种方法都不存在的话,就抛出类型错误异常。
  3. 对象转换为数字(首先使用valueOf()方法):如果对象有valueOf()方法,则调用这个方法。如果它返回一个原始值,JavaScript将这个值转换为数字,并返回这个数字;否则对象具有toString()方法,JavaScript会调用toString()方法,返回一个原始值,JavaScript将其转换为并返回(转换为数字);否则,就抛出类型错误异常
    (具体的细节还不很明白)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值