Почему знак + является исключением в JavaScript?
Я сделал это
> 5 + 2 // 7, this is correct
> 5 - 2 // 3 , obviously
> 5 - "2" // 3 , ohh, that's awesome
> 5 % "2" // 1 , :)
> 5 / "2" // 2.5,looks like 2 is automatically converted to integer.Perfect!
> 5 + "2" // "52" Really?
Конечно, что-то дополнительное происходит со знаком плюс. Что это и почему?
4 ответа
Согласно стандартной спецификации ECMA 5.1 для оператора Binary +,
7. If Type(lprim) is String or Type(rprim) is String, then Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)
Таким образом, если любой из операндов имеет тип String, тогда стандарт предписывает реализациям преобразовать оба операнда в строковый тип и объединить их.
Примечание: но унарный оператор + ведет себя по-разному со строками. Он преобразует строки в числа.
1. Let expr be the result of evaluating UnaryExpression. 2. Return ToNumber(GetValue(expr)).
+
используется для объединения в случае строк. Он используется только для добавления в случае чисел.
Для всех перечисленных вами операторов у них нет этой двойной цели и строки "2"
приведен к числу.
5 + "2" // "52" Правда?
ДА
5 как число "2" как текст
Так что в Javascript + ДВА КОНТАКТА
5 + "2", чтобы стать 7, вам нужно использовать parseFloat или parseInt
5 + parseInt ("2") = 7
Из этих операций +
знак - это единственный символ, который выполняет операцию над числами и другую операцию над строками. Все остальные символы работают только с числами, поэтому вывод типа намного проще.
Тем не менее, если +
это унарный оператор, то он преобразует аргумент в число.