2016-09-23 3 views
0

Я новичок в JavaScript, может кто-нибудь объяснить, почему эти 3 результата разные?JavaScript Variables Query understanding


Пример 1.

var x = 5 + 2 + 3; 
document.getElementById("demo").innerHTML = x; 

Выход: 10


Пример 2.

var x = 5 + 2 + "3"; 
document.getElementById("demo").innerHTML = x; 

Выход: 73


Пример 3.

var x = 5 + "2" + 3; 
document.getElementById("demo").innerHTML = x; 

Выход: 523

+0

Это не имеет ничего общего с HTML или JQuery КСТАТИ. –

+0

@ Felix Kling - это HTML в том, что перенастроенный вывод помещается в HTML после вычисления. и jQuerify it - $ ('# demo'). html (x); или более правильно - $ ('# demo'). text (x); :) – gavgrif

ответ

2

+ перегружен для выполнения конкатенации и дополнение, и это left-to-right associative.

Поскольку оператор перегружен, должно быть правило, как разрешить ситуацию, когда оба операнда имеют разные типы данных. Это правило прост:

Если один операнд является строкой, преобразуйте другой операнд в строку.

Это означает, что код оценивается как

// 1. 
((5 + 2) + 3) 
= 7 + 3 
= 10 

// 2. 
((5 + 2) + "3") 
    = 7 + "3"   // number + string -> convert number to string 
    = "7" + "3" 
    = "73" 

// 3. 
(("5" + 2) + 3)  // number + string -> convert number to string 
    = (("5" + "2") + 3) 
    = "52" + 3   // number + string -> convert number to string 
    = "52" + "3" 
    = "523" 
0

Несколько менее технический вариант ответов, полученных (которые все более правильным, чем этот ответ), но, чтобы позволить вы не отменяете отображаемый вывод - все о строках и числах - если два элемента являются числами, и вы их добавляете, вы получите числовое дополнение. Если у вас есть число и строка - при их добавлении вывод будет числом, за которым следует строка.

так, чтобы посмотреть на ваши примеры:

var x = 5 + 2 + 3; 
Output: 10 

5,2 и 3 являются все числа, так что вывод, что все они складываются вместе

var x = 5 + 2 + "3"; 
Output: 73 

5 и 2 являются числами, поэтому складываются вместе, чтобы дать 7, но «3» является строкой, поэтому она дает число, за которым следует строка, т. е. 7, затем 3 или 73

x = "5" + 2 + 3; 
    Output: 523 

5 представляет собой строку и 2 и 3 являются числами, но не добавляются друг к другу, но отображается рядом друг с другом - 523

var x = 5 + "2" + 3; 
Output: 523 

5 представляет собой число и " 2" представляет собой строку, и 3 представляет собой число, но не добавляются друг к другу, но отображается рядом друг с другом - 523

0

+ идет слева направо, и какая операция выполняется зависит от аргументов. Если оба аргумента являются числами, он выполняет добавление. Если какой-либо из аргументов не является числом, он выполняет конкатенацию. 5 + 2 - 7, но "5" + "2" - "52" (как раз "a" + "b" - "ab"). Кроме того, 5 + "2" и "5" + 2 также являются "52". Затем он работает с 52 + 3, 52 + "3" и "52" + 3 аналогичным образом.

0

Это связано с тем, что JavaScript имеет слабо типизированные типы данных. В вашем первом примере все числа суммируются, потому что все они рассматриваются как целые числа.

В других примерах инструкции обрабатываются слева направо. Таким образом, число + число + строка сначала добавляет числа, а затем пытается добавить число и строку, что сделает возвращаемый результат строкой.

В случае числа + строка + число при добавлении первых двух операндов вывод является строкой, поэтому при добавлении строки и числа она вернет строку.

Дальнейшее чтение: http://www.w3schools.com/js/js_datatypes.asp