Код 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
8 ответов
Значение в res
является строкой. В строках «23» больше, чем «100» (глядя на первый символ).
Предупреждение: true
, потому что «23» лексикографически больше, чем «100» («2»> «1»).
Вы можете использовать parseInt
для преобразования строк в числа:
alert(parseInt(res) > 100);
Чтобы далее ответить на ваш вопрос «почему не принуждают JavaScript», я хотел бы процитировать комментарий от Джеймса Торпа
«Обе стороны - струны - принуждать нечего»
Вот пример кода.
console.log (23 > "100") // false
console.log ("23" > "100") // true
Первый console.log сравнивает число со строкой - JavaScript.
Второй console.log сравнивает строку со строкой - не к чему принуждать
Вы можете временно изменить строку на их числовое представление, т. Е. 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")
Что касается "почему это не принуждение?" - потому что оба операнда являются строками в обоих случаях, и потому что оба +
и >
являются допустимыми операциями со строками.
(Использование -
(вычитание) приведет к неявному принуждению к числу, потому что для строк это не имеет смысла, но для конкатенации и сложения используется один и тот же оператор. Добро пожаловать в JavaScript!)
Потому что вы сравниваете строки. «100» ниже, чем «23», потому что «1» <«2». Вам нужно проанализировать int, если вы хотите числовое сравнение, как показано в ответе @ jh314.
Значение res равно "23"
, а не 23
. Это означает, что это строка, и поэтому, когда вы alert
сравниваете, она сравнивает первую цифру каждого, 2 > 1
, то есть true
.
Ваше предупреждение сравнивает строку и строку.
Попробуйте: alert(res > 100)
Похожие вопросы
Новые вопросы
javascript
Для вопросов, касающихся программирования в ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (исключая ActionScript). Этот тег редко используется отдельно, но чаще всего ассоциируется с тегами [node.js], [jquery], [json] и [html].