JavaScript 强制:控制台与脚本
JavaScript Coercion: Console vs Script
今天遇到了一件比较奇怪的事情。考虑以下代码(我用它来将范围滑块与输入元素同步):
// val = "50"
// other_val = 100
if( val > other_val ){
console.log(val + '>' + other_val); // => 50 > 100
console.log( val > other_val); // => true
$input_max.val( other_val );
}
这是怎么发生的?当我输入
"50" > 100
进入我的控制台(Chrome & FireFox),它说 false,这是我所期望的。我用 parseInt() 修复了由此产生的错误,但我仍然不知道 为什么 会发生这种情况。另外,我不知道为什么我不能在这个脚本之外重现它。
有什么想法吗? :)
干杯!
更新:
正如 Bergi 指出的那样,它是 "50">"100",而不是 "50" > 100。非常感谢你的想法。现在,我真正的问题似乎是:
为什么 return 正确:
"50">"100" // => true
您编辑的问题的答案是,当您比较字符串时,它会从字符串的开头逐个字符地进行比较。并且字符 5 "larger" 比 1.
今天遇到了一件比较奇怪的事情。考虑以下代码(我用它来将范围滑块与输入元素同步):
// val = "50"
// other_val = 100
if( val > other_val ){
console.log(val + '>' + other_val); // => 50 > 100
console.log( val > other_val); // => true
$input_max.val( other_val );
}
这是怎么发生的?当我输入
"50" > 100
进入我的控制台(Chrome & FireFox),它说 false,这是我所期望的。我用 parseInt() 修复了由此产生的错误,但我仍然不知道 为什么 会发生这种情况。另外,我不知道为什么我不能在这个脚本之外重现它。
有什么想法吗? :)
干杯!
更新:
正如 Bergi 指出的那样,它是 "50">"100",而不是 "50" > 100。非常感谢你的想法。现在,我真正的问题似乎是:
为什么 return 正确:
"50">"100" // => true
您编辑的问题的答案是,当您比较字符串时,它会从字符串的开头逐个字符地进行比较。并且字符 5 "larger" 比 1.