Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个表达式(({}+;[])[+;[])在JavaScript中是什么意思?_Javascript - Fatal编程技术网

这个表达式(({}+;[])[+;[])在JavaScript中是什么意思?

这个表达式(({}+;[])[+;[])在JavaScript中是什么意思?,javascript,Javascript,现在我遇到一个奇怪的JavaScript表达式console.log(({}+[])[+[]]),我试图通过下面的测试来理解它 console.log([])output[] console.log(+[])output0 所以[+[]]等于[0],我猜它看起来像一个数组。但是,我无法理解整个表达式({}+[])[+[]]的意思是什么 基于第二个表达式,我想我们可以得到1。我通过console.log(+!![])完成,但是当我尝试通过console.log(+!![]+!![])完成2时,失败

现在我遇到一个奇怪的JavaScript表达式
console.log(({}+[])[+[]])
,我试图通过下面的测试来理解它

  • console.log([])
    output
    []

  • console.log(+[])
    output
    0

  • 所以
    [+[]]
    等于
    [0]
    ,我猜它看起来像一个数组。但是,我无法理解整个表达式
    ({}+[])[+[]]
    的意思是什么

    基于第二个表达式,我想我们可以得到
    1
    。我通过
    console.log(+!![])
    完成,但是当我尝试通过
    console.log(+!![]+!![])
    完成
    2
    时,失败了


    这是我的想法,所以
    +!![]++!![]
    表示
    (+!![])+(+!![])
    。有人能帮我找出它失败的原因吗?

    这没什么用处。正如您所说,它从
    ({}+[])
    的结果中获得
    [0]
    ,即
    [

  • ({}+[])=='[object object]'
    ,因为您连接的两个对象没有常规的相加方式,所以这只返回括号之间的对象
  • '[object object]'[0]=='['
    因为
    [0]
    总是获取字符串的第一个字符(字符串被视为包含单个字母的数组)
  • 考虑到问题的第二部分,它不起作用,因为两个加号相邻,因此它假设您在循环中使用后缀递增(如
    i++
    )。只需在空格之间添加一个空格即可解决此问题:

    console.log(+!![]+ +!![])
    > 2
    
    但是,由于要添加数组的布尔值(此处为1),也可以保留前缀
    +
    ,因为表达式已将此布尔值转换为数字:

    console.log(!![] + !![])
    > 2
    
    !!
    部分只是将后面的内容转换为布尔值。由于
    !myVar
    返回与
    myVar
    的布尔值相反的布尔值,
    !(!myVar)
    ,它与
    !!myVar
    将返回与之相反的布尔值。在这种情况下,
    myVar
    将是您的空数组
    []

    类似,