При использовании +
оператор Javascript попытается преобразовать элементы суммируются в первую строку, а затем в междунар. Когда вы приводите пустой массив в строку вы получите ""
поэтому "" + "" = ""
[] + [] = "" // equates to "" + "" = ""
При использовании -
оператора Javascript попытается преобразовать элемент в целые числа. Пустые массивы, отлитые в целых будет продукт 0
так 0 - 0 = 0
[] - []= 0 // equates to 0 - 0 = 0
То же самое здесь, пустой массив преобразуется в ""
и объект преобразуется в "[object Object]"
из конкатенации с пустой строкой результат "" + "[object Object]" = "[object Object]"
[] + {} = "[object Object]" // equates to "" + "[object Object]" = "[object Object]"
{}
не может быть приведен к междунар так как вместо того, чтобы бросить в undefined
и 0 - undefined = NaN
[] - {} = NaN // equates to 0 - undefined = NaN
Когда выражение начинается с пустым литералом объектом JavaScript интерпретирует первый {} в качестве пустого блока кода и игнорирует его так оценивает следующие выражения, как + {}
, который NaN
{} + {} = NaN // equates to + {} = NaN
{} - {} = NaN // equates to - {} = NaN
{} + 1 = 1 // equates to + 1 = 1
Принятый Ответ на [Почему is ++ \ [\ [\] \] \ [+ \ [\] \] + \ [+ \ [\] \] = "10"?] (http://stackoverflow.com/questions/7202157/why -is-10) объясняет это очень хорошо. –