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
答案 0 :(得分:2)
res
中的值是一个字符串。在字符串中,“ 23”大于“ 100”(从第一个字符开始)。
答案 1 :(得分:1)
为进一步回答您的问题“为什么不使用JavaScript强制”,我想引用James Thorpe的评论
“双方都是弦乐器-没什么可胁迫的”
这是一个代码示例。
console.log (23 > "100") // false
console.log ("23" > "100") // true
第一个console.log将数字与字符串进行比较-javascript强制。
第二个console.log将字符串与字符串进行比较-没什么可强迫的
答案 2 :(得分:0)
警报为true
,因为在字典上'23'大于'100'('2'>'1')。
您可以使用parseInt
将字符串转换为数字:
alert(parseInt(res) > 100);
答案 3 :(得分:0)
因为您正在比较字符串。 “ 100”比“ 23”低,因为“ 1” <“ 2”。 如果要进行数值比较,则应解析为int,如@ jh314答案所示。
答案 4 :(得分:0)
您可以暂时将字符串更改为其数字表示形式,即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")
答案 5 :(得分:0)
res的值为"23"
而不是23
。这意味着它是一个字符串,因此当您进行比较时,alert
会比较每个字符串的第一位2 > 1
,即true
。
答案 6 :(得分:0)
至于“为什么不强制?”-因为两种情况下两个操作数都是字符串,并且因为+
和>
都是对字符串的有效操作。
(使用-
(减法)会导致对数字进行隐式强制转换,因为它对字符串没有意义,但是连接和加法使用相同的运算符。欢迎使用JavaScript!)
答案 7 :(得分:-1)
您的警报正在比较一个字符串和一个字符串。
尝试:alert(res > 100)