'b' + 'a' + + 'a' + 'a'.toLowerCase() === 'banana'?

蓝字关注,回复“1”加入前端进阶群 与大家一起成长

前段时间在 Twitter 上看到一个问题

其实这是一道基础题目,考察点是类型转换以及操作符优先级。

首先这道题目中的加号并不全是用于加法的,++'a' 中的第二个加号其实是一元操作符。

一元加号操作符的优先级其实是比加法运算符高的

因此这道题目应该先看成:

'b' + 'a' + (+'a') + 'a'

那么接下来我们来学习一下一元加号操作符的作用。其实在 JS 中总共有九种一元操作符,分别为:

  • +

  • -

  • !

  • ++

  • --

  • ~

  • typeof

  • delete

  • void

当然本文主题不是介绍所有一元操作符作用的,因此我们就简单来了解一下 + 的作用即可。

这个操作符的作用是尝试把任何东西都转成 number,如果转换失败的话就会返回 NaN,以下是一些转换的例子:

// 1
+1
// 1
+'1'
// 1
+true
// 0
+null
// 另外还有个骚操作,如果一个对象有 valueOf 的话
// 那么转换的是该函数的返回值
+{
  valueOf: () => 1
}

因此对于 +'a' 来说,返回值应该是 NaN

现在的题目就转换成了这样:

'b' + 'a' + (NaN) + 'a'

虽然 NaN 代表这个值不是数字,但是它的类型还是 number。加法操作符在数字和字符串相加的过程中会将数字转换为字符串,因此现在的题目就转换成了这样:

'b' + 'a' + 'NaN' + 'a'

所以结果就是 baNaNa,通过调用 toLowerCase() 就变成了 banana

最后

虽然题目看着简单,但是考察的内容还是多方面的,当然最想说的还是 fuckJS 了。


- END -

觉得有启发,点个“在看”转给朋友们

长按二维码关注,漫漫前端路,结伴同行

来自恺哥的推荐阅读

我就知道你在看!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值