Код Javascript

Я составляю две переменные и сравниваю их со строкой. Почему предупреждение истинно? Почему это не принуждение ??

 var str1 = "2";
    var str2 = "3";
    var res = str1 + str2 // return 23
    console.log(res) // 23 
    console.log("100") // 100
    alert(res > "100") // alerts true instead of false
-4
Parshuram Kalvikatte 20 Авг 2018 в 17:23

8 ответов

Лучший ответ

Значение в res является строкой. В строках «23» больше, чем «100» (глядя на первый символ).

2
Programmer 20 Авг 2018 в 14:26

Предупреждение: true, потому что «23» лексикографически больше, чем «100» («2»> «1»).

Вы можете использовать parseInt для преобразования строк в числа:

alert(parseInt(res) > 100);
0
jh314 20 Авг 2018 в 14:26

Чтобы далее ответить на ваш вопрос «почему не принуждают JavaScript», я хотел бы процитировать комментарий от Джеймса Торпа

«Обе стороны - струны - принуждать нечего»

Вот пример кода.

console.log (23 > "100")  // false
console.log ("23" > "100")  // true

Первый console.log сравнивает число со строкой - JavaScript.

Второй console.log сравнивает строку со строкой - не к чему принуждать

1
Bergur 20 Авг 2018 в 14:34

Вы можете временно изменить строку на их числовое представление, т. Е. 23 и 100, и использовать оператор сравнения. Либо добавьте к + значения, чтобы изменить их на числовое, либо используйте parseInt():

var str1 = "2";
var str2 = "3";
var res = str1 + str2 // return 23
console.log(res) // 23 
console.log("100") // 100
alert(+res > +"100")
0
Ankit Agarwal 20 Авг 2018 в 14:28

Что касается "почему это не принуждение?" - потому что оба операнда являются строками в обоих случаях, и потому что оба + и > являются допустимыми операциями со строками.

(Использование - (вычитание) приведет к неявному принуждению к числу, потому что для строк это не имеет смысла, но для конкатенации и сложения используется один и тот же оператор. Добро пожаловать в JavaScript!)

0
Rob Hogan 20 Авг 2018 в 14:35

Потому что вы сравниваете строки. «100» ниже, чем «23», потому что «1» <«2». Вам нужно проанализировать int, если вы хотите числовое сравнение, как показано в ответе @ jh314.

0
Kristjan Kica 20 Авг 2018 в 14:27

Значение res равно "23", а не 23. Это означает, что это строка, и поэтому, когда вы alert сравниваете, она сравнивает первую цифру каждого, 2 > 1, то есть true.

0
Karan Dhir 20 Авг 2018 в 14:28

Ваше предупреждение сравнивает строку и строку.

Попробуйте: alert(res > 100)

-1
Vgoose 20 Авг 2018 в 14:27
51932878