PHP面试题console.log(([][[]]+[])[+!![]]+([]+{})[+!![]++!![]])输出什么
这篇“PHP面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“PHP面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么”文章吧。
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、微信平台小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了盂县免费建站欢迎大家使用!
前言
面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么?
解决这个题目需要的知识
“+”:一元+会执行与使用Number()一样的转换
如果+号是两个数相加,任一操作数是对象、数值或者布尔,则调用它们的toString方法转为字符串
“!”:非操作符,这个操作始终返回布尔值
“!!”:强制转为布尔值
解决这个题目([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]]
首先我们要先理清它的执行顺序
首先执行([][[]] + [])
,先执行里面的[][[]]
,在计算 [][[]]
时,其实就是执行[]空数组里面key为[]的值
首先,JavaScript 引擎解析空数组
[]
。空数组没有任何元素。接下来,引擎尝试使用
[]
作为属性名来访问空数组的属性。在这种情况下,由于[]
本身是一个数组,JavaScript 引擎会尝试将其转换为字符串。由于[]
为空数组,转换成字符串后结果为一个空字符串""
。最后,引擎会尝试访问空数组中名为
""
的属性。由于这个属性并不存在于空数组中,所以结果为undefined
。
所以,执行 [][[]]
的结果是 undefined
。
那么([][[]] + [])
接下去执行就是(undefined + [])
将会执行隐式类型转换,将undefined
转换为字符串"undefined"
,将[]转为“”,然后将两个字符串拼接在一起。因此,结果是"undefined"
其次执行[+!![]],!![]空数组转布尔值为true,一元操作服+会转为数值,+true就是将true
转换为数字1
。得到的结果就是[1]
。于是我们就可以得到([][[]] + [])[+!![]]
为undefined[1]
这个的结果就是字符串'n'
接下来就是执行([]+{})[+!![]+ + !![]]
这一部分,再将这部分的结果和上面的结果相加
先执行
([]+{})
, 计算[]+{}
。这将触发隐式类型转换,将空对象转换为字符串"[object Object]"
,然后将两个字符串拼接在一起。因此,结果是'[object Object]'
。再执行[+!![]+ + !![]],
+!![]
前面有解析过得到的是1,所以这一部分执行过后得到的是数值1相加1+1
,得到的结果是[2]
。那么这两部分合起来就是
'[object Object]'[2]
,就是字符串的第三个值b
最后将前面部分得到的结果 'n'
和后面部分得到的结果 'b'
相加,得到最后的结果'nb'
以上就是关于“PHP面试题console.log(([][[]] + [])[+!![]]+([]+{})[+!![]+ + !![]])输出什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。
本文名称:PHP面试题console.log(([][[]]+[])[+!![]]+([]+{})[+!![]++!![]])输出什么
当前地址:http://scjbc.cn/article/gcpsos.html