0

0

晕!面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么

藏色散人

藏色散人

发布时间:2023-04-12 15:29:22

|

1064人浏览过

|

来源于juejin

转载

本篇文章给大家带来了关于前端的相关知识,其中主要跟大家分享一道有关console.log的面试题,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

前言

面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么?面试遇到了这一个面试题,该面试题考察了类型转换,隐式类型转换,操作符等,我没答出来,不是我不会,是我光看题就很晕了。然而它确实是面试题,那就试着解决看看咯。

5f4abdec908895a6ec7b7c15ff07394.png

解决这个题目需要的知识

  • “+”:一元+会执行与使用Number()一样的转换
  • 如果+号是两个数相加,任一操作数是对象、数值或者布尔,则调用它们的toString方法转为字符串
  • “!”:非操作符,这个操作始终返回布尔值
  • “!!”:强制转为布尔值

解决这个题目([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]

首先我们要先理清它的执行顺序

首先执行([][[]] + []),先执行里面的[][[]],在计算 [][[]]时,其实就是执行[]空数组里面key为[]的值

  1. 首先,JavaScript 引擎解析空数组 []。空数组没有任何元素。
  2. 接下来,引擎尝试使用 [] 作为属性名来访问空数组的属性。在这种情况下,由于 [] 本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于 [] 为空数组,转换成字符串后结果为一个空字符串 ""
  3. 最后,引擎会尝试访问空数组中名为 "" 的属性。由于这个属性并不存在于空数组中,所以结果为 undefined

所以,执行 [][[]] 的结果是 undefined

那么([][[]] + [])接下去执行就是(undefined + []) 将会执行隐式类型转换,将undefined转换为字符串"undefined",将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"

其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true转换为数字1。得到的结果就是[1]。于是我们就可以得到([][[]] + [])[+!![]]undefined[1]这个的结果就是字符串'n'

接下来就是执行([]+{})[+!![]+ + !![]] 这一部分,再将这部分的结果和上面的结果相加

轻竹AI PPT
轻竹AI PPT

AI自动生成PPT

下载
  1. 先执行([]+{}),  计算[]+{}。这将触发隐式类型转换,将空对象转换为字符串"[object Object]",然后将两个字符串拼接在一起。因此,结果是'[object Object]'

  2. 再执行[+!![]+ + !![]], +!![]前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1,得到的结果是[2]

  3. 那么这两部分合起来就是'[object Object]'[2],就是字符串的第三个值b

最后将前面部分得到的结果 'n' 和后面部分得到的结果 'b' 相加,得到最后的结果'nb'

总结:这个题目一时解决不了的话,可能有以下几个原因,第一个就是不太清楚执行顺序,其次就是不太理解[][[]]这个,实际上就是获取空数组key为[]的值,又因为数组的key为字符串,所以会将[]转为''是找不到的所以返回undefined。现在你会这道面试题了吗?

推荐学习:《web前端开发视频教程

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

123

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

85

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

47

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

Vue 教程
Vue 教程

共42课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号