【JS面试题 - 打印结果】++[[]][+[]] + [+[]]

现有一段代码,说出打印结果

++[[]][+[]] + [+[]]

这道题考验的是运算符的基础知识,下面来逐步分析:

先把表达式按照优先级最低的运算符(+)进行分割,得到两部分:
++[[]][+[]] 和 [+[]]

++[[]][+[]]

表达式中++运算符优先级最低,所以先对 [[]][+[]] 进行运算:

这个表达式的目的是:取数组 [[]] 的第 [+[]] 项。
[[]]:表示数组中有一个元素为[]。
[+[]]:+[]会将[]转为Number类型,由于[]是对象类型,所以转换后得到:0,结果为[0]。具体流程为:由于+运算符会将数据转为Number类型,首先查看[].valueOf是否为Number,结果是[],并不是Number。所以需要toString,[].toString()得到 “”。最终把字符""转为数字,即0。隐式转换详情可看另一篇文章:隐式类型转换详解

所以[[]][+[]]结果为:[[]][0]也就是[]

那么++[]的结果为1

结果: 1。

[+[]]

通过上述流程可知,[+[]] 的结果为[0]。

最终运算

经过上述步骤,此时表达式已经转换为:1 + [0]

由于+运算符右侧为非原始类型(复杂类型<对象>),所以需要尝试将其转为原始类型。

流程如下:

  1. [0].valueOf 得到 [0],所以继续转换。
  2. [0].toString 得到字符 “0”,此时数据已为原始类型,停止转换。
  3. 至此,表达式变为:1 + “0”,所以答案为"10"

结果

“10”

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田本初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值