Skip to content

一、下列表达式输出多少

js
    console.log(++[[]][+[]] + [+[]]);

题解:

  • 遇到一些很长的复杂的表达式,用优先级最低的函数进行分割。
  • 那么这个表达式里面最低的运算法+,于是把这个表达式分成两个部分++[[]][+[]][+[]]
  • 先来看++[[]][+[]],同样的这个表达式优先级最低的是++,那可以分成++[[]][+[]]
  • [[]][+[]]表达式[[]]不就是数组里面的元素是个数组么,[[]][]表示取数组里面的第几个元素,[[]][+[]]中的+[],数组前面一个+号,表示 把这个对象变成一个数字,进行类型转换,首先调用对象的valueOf(),看能不能得到原始类型,发现得不到,还是数组,然后调用数组的toString()方法,看 能不能得到原始类型,得到了,得到了是一个'',当调用数组的toString()的时候,是把数组里面每一项依次罗列出来,当数组里面是空的时候,得到的自然是''。 把''转成数字是多少?是0,于是[[]][+[]]表达式就相当于[[]][0],得到的值就是[]
  • 再把前面++加上,得到++[],根据上面的原理,所以其值为数字1
  • [+[]]根据上面的原理,可以知道[+[]]就相当于[0]
  • 两边合在一起就是1 + [0],不是同类型,无法加减,只能转类型,[0]调用valueOf(),再调用toString(),得到字符串'0',加上有连接作用 所以最后答案'10'

Released under the MIT License.