Why {} != ( {} ) in JavaScript?

前端 未结 2 1541
闹比i
闹比i 2020-11-27 21:10

It\'s commonly known that {} is shorter way to define an object like [] is for an array.

But now I am wondering why:

{} !=          


        
相关标签:
2条回答
  • 2020-11-27 21:31

    {} != {} is true because both {}'s are completely different objects. However, variables that are referencing the same object hold equality:

    ​var a = {},
        b = a;
    
    assert( a == b )​
    
    0 讨论(0)
  • 2020-11-27 21:40
    {} != ({})
    

    This is a syntax error.

    SyntaxError: Unexpected token !=

    {} is ambigious like that. Is it an empty block, or an empty object literal? It's failing because a comparison operator can not follow a block.

    Wrapping it with parenthesis makes the parser treat it as an expression. An expression can't contain a block, so it knows it's an object.

    However, if you wrap that comparison in an expression...

    ({} != ({}))
    

    ...it's still true because variables which have an object assigned to them's values are a pointer to them and as a consequence, they are never copied around by their contents (though this is irrelevant to your example). Because of this, their pointer is always different and the comparison fails.

    This also implies that comparing two variables which point to the same object will work as expected, as their pointers will be the same.

    0 讨论(0)
提交回复
热议问题