隐式, 显式, 鸭子类型

1. 内容

鸭子类型

2. 搞懂这些,基本上就掌握了这部分知识(基于chrome运行)

  1. [] + [] 结果是什么?

首先,[]被转换成一个原始值,调用valueOf()方法,返回的是它本身,故其次调用toString()方法,返回一个空字符串"",因此[]+[]其实就是两个空字符串的连接。结果还是空字符串""

  1. [] + {} 结果是什么?

同上面步骤,{}调用valueOf()方法,返回的是它本身,故其次调用toString()方法,返回一个"[object Object]",因此[] + {}其实就是一个空字符串和"[object Object]"的连接。结果返回"[object Object]"

  1. {} + [] 结果是什么?

如果左大括号出现在一条语句的开头,则其被解析成一个代码块的开始。结果返回0

  1. {} + {} 结果是什么?

"[object Object][object Object]"

5.[1,2]+[3,4]为什么≠[1,2,3,4]

首先数组先调用valueOf()方法,返回的是它本身,故其次调用toString()方法,返回一个字符串,于是其实最后就变成了两个字符串连接了。

[1, 2].concat([3, 4])   //[1, 2, 3, 4]
复制代码
  1. ++[[]][+[]]+[+[]] = ?

将以上转换为:

++[[]][+[]]
+
[+[]]
复制代码

+[] === 0,简化:

++[[]][0]
+
[0]
复制代码

+++ 优先性更高,[[]][0]:代表获取[[]]0个元素,[[]]返回空数组[],++最后得到的一定是个数字,“加一”,则:

+([] + 1)
+
[0]
复制代码

[] + 1相当于一个空字符串""和数字1的连接,故而结果"1",[0].toString()为字符串"0",最终就变成了数字 + 字符串 ,结果为"10"

关于这道题,这里有优秀的详解

转载于:https://juejin.im/post/5cc7ab03f265da03775c5d3b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值