2013-05-13 3 views
17

Я читал re-introduction to JavaScript on MDN, а в разделе Numbers он сказал, что вы можете преобразовать строку в число, просто добавив перед ним оператор плюс.JavaScript, добавляющий строку к номеру

Например:

+ «42», которое дало бы выход численную 42.

Но дальше в разделе о Операторы он говорит, что, добавив строку «что-то» в любой номер, вы можете преобразовать это число в строку. Они также приводят следующий пример, который меня смутил:

«3» + 4 + 5 предположительно выдаст строку 345 на выходе, поскольку числа 4 и 5 также будут преобразованы в строки.

Однако, если бы 3 + 4 + "5" не выдавали число 12 вместо строки 75, как было указано в их примере?

В этом втором примере в разделе о операторах оператор <+>, стоящий перед строкой «5», преобразует эту строку в число 5, а затем добавит все до 12?

+0

Прочитайте это: [что = + _] (HTTP: // StackOverflow.com/questions/15129137/what-does-mean-in-javascript) –

ответ

23

Что вы говорите, это унарный плюс. Он отличается от плюса, который используется при конкатенации или добавлении строки.

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

> 3 + 4 + "5" 
"75" 
> 3 + 4 + +"5" 
12 

Edit:

Вы должны узнать о порядке операций:

+ и - имеют одинаковый приоритет и связаны с левой:

> 4 - 3 + 5 
(4 - 3) + 5 
1 + 5 
6 

+ сопоставляющего слева:

> 3 + 4 + "5" 
(3 + 4) + "5" 
7 + "5" 
75 

унарные операторы обычно имеют более сильный приоритет, чем бинарные операторы:

> 3 + 4 + +"5" 
(3 + 4) + (+"5") 
7 + (+"5") 
7 + 5 
12 
+0

Значит ли это, что когда строка сочетается с другими числами, она преобразует все остальные числа в строки, за исключением случаев, когда я специально помещаю перед ним другой оператор + в основном два + оператора (+ + "5")), а затем и только тогда JavaScript будет интерпретировать то, что внутри строки, как число? – SineLaboreNihil

+0

@SineLaboreNihil In '(+ +" 5 "))' first для 'add' second, используемого для typecase' "5" 'string to' 5' int ..read link –

+0

@epascarello Я получаю порядок операций I было просто смущено следующим предложением на веб-сайте MDN: «Если вы добавите строку в число (или другое значение), все сначала преобразуется в строку». Он ничего не говорит о порядке, в котором он преобразуется. Кроме того, в замешательство добавлено следующее предложение: «Добавление пустой строки в нечто полезное для ее преобразования». Он не говорит, что он преобразует все в строку только после того, как он будет обнаружен как строка JavaScript и что все до того, как оно останется неповрежденным. В любом случае, спасибо за вашу помощь. – SineLaboreNihil

3

Вы можете также использовать ParseInt() или parseFloat(), как это:

> 1 + 2 + "3" 
"33" 
> 1 + 2 + parseInt(3) 
6 

Я думаю, что это много чище, чем используя + "3", но это только мое мнение.

1

В примере из 3 + 4 + "5" - парсер Javascript будет делать (3 + 4) + "5", так как 3 + 4 - первым, поэтому он добавит 3 + 4, потому что они являются числами , затем соедините строку «5».

+0

Вот что меня путает, и я вставляю его здесь, как написано на веб-сайте MDN: «Если вы добавите строку в число (или другое значение), все будет преобразовано в строку сначала». Таким образом, очевидно, что это работает, только если вы добавите строку сначала перед цифрами. Если вы добавите его после номеров, которые будут добавлены цифры (простая математика), а затем соедините с ним строку. Это означает, что в этом случае все не будет преобразовано в строку. – SineLaboreNihil

+1

Не технически корректно, так как, несмотря на то, что Javascript не набирается, он все равно сохранит типы, если вы не конвертируете, например, int-> string, string-> int. – Modul8

1

Когда вы добавляете число и строку в Javascript, результат всегда является строкой.

Проверить эксперимент здесь - http://jsfiddle.net/xuVur/1/

var a = "3" + 4 + 5; 
var b = 3 + 4 + "5"; 

$("#result1").html(a); // prints 345 
$("#result2").html(b); //prints 75 
+0

Вы печатаете 'a' всегда –

+1

Мой плохой. Я изменил это сейчас. – UnTechie

+1

jsfiddle все еще не так. Я обновил его –

4

Ответ можно найти в разделе Ecma262.pdf 11.6.1:

Если Тип (lprim) является строка или тип (rprim) является Строка, то a. Вернуть Строка, которая является результатом объединения ToString (lprim), следующего за ToString (rprim).

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

4 + 3 + "5" 
"75" 
4 + 3 + "5" + 3 
"753" 

Чтобы прочитать весь стандарт, перейдите на страницу here.

1

Когда вы смотрите на шаге 7 и "Примечание 2" на The Addition operator (+) (§11.6.1) в ES5 спецификации,

это говорит

Если Тип (lprim) является String` или Тип (rprim) является строка, то возвращает строку, которая является результатом конкатенации ToString (lprim), а затем ToString (rprim)


ПРИМЕЧАНИЕ 2 Шаг 7 отличается от шага 3 алгоритма сравнения для реляционных операторов (11.8.5), используя логическую или операцию вместо логической операции и операции.

Значение, если либо 7 (3+4) или"5" (|| не &&) является typeof "string"toString() применяется для обоих операндов.

Таким образом, добавление фактически применяется к

"7" и "5" ->"7" + "5" //"75"

1

smple + оператор в JavaScript используется для конкатенации и не добавлять.

Кронштейн и оператор + перед целочисленной переменной формата строки будут выполнять эту работу каждый раз.

Это всегда хорошо работает.

1 + (+"2") = 3 

Поскольку размещение + перед строкой преобразует переменную строки в число.

скрипку здесь: http://jsfiddle.net/xuVur/2/

Смежные вопросы