0°

北妈每日一题:++[[]][+[]]+[+[]] = 多少?

内容预览:
  • 下面跟着小北哥哥看每日一题:++ === 0 是完全正确的~
  • 让我们把 A 换回成  =="0",因为这是相当于一个有一个元素的数组的...~
  • 各元素会使用,分隔~

原文始发于微信公众号(前端你别闹):北妈每日一题:++[[]][+[]]+[+[]] = 多少?

点击上方“前端你别闹”,关注并星标

喜欢我的都关注我了

北妈每日一题

在社区或者群里,总不定时收到各种“奇葩+天秀的js问题”,比如 []+[]+[] 答案,1+“1”+【】怎么解啊?等等

我不知道这些天才是对编程真爱,还是因为时间很多,但提出这种问题还不算什么,牛鼻的是解答这些问题的牛人们。

下面跟着小北哥哥看每日一题:++[[]][+[]]+[+[]] = ?

这个问题我是不会的,真的,解这类题,要翻很多JS基础属性资料,但不代表牛人们不会或者不想解答,下面来看看牛人的庖丁解牛

这是一个Javascript 语言题目,一个完全有效的等式,不信自己可以试一下,下面看看高人的题解:

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

如果把这段表达式拆分开来,它相等于:

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

在 JavaScript 里,+[] === 0 是完全正确的。 + 会把一些字符转化成数字,在这里,这个式子会变成 +""或 0

因此,我们可以简化一下(++ 比 + 有更高的优先级):

++[[]][0]+[0]

因为 [[]][0] 的意思是:获取 [[]] 的第一个元素,这就得出了下面的结果:

  • [[]][0] 返回内部数组 ([])。根据语言规范,我们说 [[]][0] === [] 是不正确的,但让我们把这个内部数组称作 A,以避免错误的写法。

  • ++[[]][0] == A + 1, 因为 ++ 的意思是”加一”。

  • ++[[]][0] === +(A + 1);换句话说,你得到的永远是个数值( +1 并不一定得到的是个数值,但 ++一定是)。

同样,我们可以把这一堆代码简化的更清晰。让我们把 A 换回成 [] :

+([] + 1)+[0]

在 JavaScript 里,这也是正确的:[] + 1 === "1",因为 [] == "" (这相当于一个空的数组的内部元素连接),于是:

+([] + 1) === +("” + 1),并且 +(" + 1) === +("1"),并且 +("1") === 1

让我们再次简化一下:

1+[0]

同样,在 Javascript 里,这是正确的:[0] == "0",因为这是相当于一个有一个元素的数组的内部元素的连接。 各元素会使用,分隔。 当只有一个元素时,你可以推论出这个过程的结果就是它自身的第一个元素。

所以,最终我们得到 (数字 + 字符串 = 字符串):

1+"0"=== "10" // 牛鼻!


牛鼻不?佩服不,我去验证和查了犀牛书,还真的是,大神基础扎实不得不服啊,也希望各位不单单要钻


牛角尖,而是在钻研的过程中,掌握更多的基础。

北妈每日一题:++[[]][+[]]+[+[]] = 多少?

觉得有帮助,
就尽快转发、传播吧!

每天只想听你们说:小北最帅!

北妈每日一题:++[[]][+[]]+[+[]] = 多少?

长按扫码关注我

前端你别闹

以上就是:北妈每日一题:++[[]][+[]]+[+[]] = 多少? 的全部内容。

本站部分内容来源于互联网和用户投稿,如有侵权请联系我们删除,谢谢。
Email:[email protected]


编程语言
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论