JavaScript:String与numeric比较

JavaScript:String与numeric比较,javascript,html,string-comparison,autoboxing,type-conversion,Javascript,Html,String Comparison,Autoboxing,Type Conversion,我们知道,默认情况下,下面的“obj”是字符串。如果不使用“parseInt”,JavaScript如何将其与数字进行比较 obj = document.frm.weight.value; if( obj < 0 || obj > 5 ){ alert("Enter valid range!"); return false; } obj=document.frm.weight.value; 如果(obj5){ 警报(“输入有效范围!”); 返回false; } 如果

我们知道,默认情况下,下面的“obj”是字符串。如果不使用“parseInt”,JavaScript如何将其与数字进行比较

obj = document.frm.weight.value;
if( obj < 0 || obj > 5 ){
    alert("Enter valid range!");
    return false;
}
obj=document.frm.weight.value;
如果(obj<0 | | obj>5){
警报(“输入有效范围!”);
返回false;
}

如果
的一个操作数是数字,则另一个操作数将被强制转换为数字

alert("3" > 3);   // false
alert("3.5" > 3); // true
编辑并进一步解释:

如果无法将另一个参数转换为数字,则将其转换为名为
NaN
的特殊值-缩写表示“非数字”。
NaN
值有一个特殊属性,它是绝对不可比较的-如果其中一个参数是
NaN
,则所有关系运算符(如
=
)都将返回
false

alert("" > 3);      // false
alert("3.5?" > 3);  // false
alert({} > 3);      // false
另外,请注意,在第二行中,如果我们使用

alert(parseInt("3.5?") > 3);
它将向
true
发出警报,因为
parseInt
从字符串
“3.5”
中读取
“3.5”
,然后在
“?”
处停止读取,因此计算结果为
3.5
。但是,

alert("3.5?" > 3);

返回
false
,因为从
string
number
的转换不像
parseInt
那样仁慈。由于
“3.5”
实际上不是一个数字,因此它被强制转换为
NaN
如果
的一个操作数是数字,则另一个操作数将强制转换为数字

alert("3" > 3);   // false
alert("3.5" > 3); // true
alert("" > 3);      // false
alert("3.5?" > 3);  // false
alert({} > 3);      // false
编辑并进一步解释:

如果无法将另一个参数转换为数字,则将其转换为名为
NaN
的特殊值-缩写表示“非数字”。
NaN
值有一个特殊属性,它是绝对不可比较的-如果其中一个参数是
NaN
,则所有关系运算符(如
=
)都将返回
false

alert("" > 3);      // false
alert("3.5?" > 3);  // false
alert({} > 3);      // false
另外,请注意,在第二行中,如果我们使用

alert(parseInt("3.5?") > 3);
它将向
true
发出警报,因为
parseInt
从字符串
“3.5”
中读取
“3.5”
,然后在
“?”
处停止读取,因此计算结果为
3.5
。但是,

alert("3.5?" > 3);

返回
false
,因为从
string
number
的转换不像
parseInt
那样仁慈。由于
“3.5”
实际上不是一个数字,它被强制转换为
NaN

,字符串将使用任意规则强制转换为一个数字。通常,您会看到如下规则:

alert("" > 3);      // false
alert("3.5?" > 3);  // false
alert({} > 3);      // false
  • 如果字符串以
    0x
    开头,则将其视为十六进制数
  • 如果字符串以
    0
    开头,则将其视为八进制数。(并非在所有浏览器中)
  • 否则,将其视为十进制
这尤其意味着像“09”这样的输入可能会让浏览器感到困惑,并且可能会被解释为
9
0
(因为9不是有效的八进制数字)


通常,在将字符串与数字进行比较时,应始终使用基数参数
10
手动调用
parseInt
。这样,就不会有什么意外了。

字符串将使用任意规则转换为数字。通常,您会看到如下规则:

  • 如果字符串以
    0x
    开头,则将其视为十六进制数
  • 如果字符串以
    0
    开头,则将其视为八进制数。(并非在所有浏览器中)
  • 否则,将其视为十进制
这尤其意味着像“09”这样的输入可能会让浏览器感到困惑,并且可能会被解释为
9
0
(因为9不是有效的八进制数字)

通常,在将字符串与数字进行比较时,应始终使用基数参数
10
手动调用
parseInt
。这样,就不会有什么意外了。

作为一种实现,Javascript将遵循Ecma-262的11.8.5一节中定义的抽象关系比较算法。

首先,Javascript将对两个操作数应用内部运算符
ToPrimitive
,该运算符必须根据传递给它的参数返回一个基元值(未定义布尔字符串数字)。如果原语值被传递给
ToPrimitive
则返回值是传递给运算符的参数值,如果它是一个对象,则调用Javascript中所有对象的内部方法,则返回值是[[DefaultValue]]。 此方法负责返回对象表示的基元类型。根据代码类型,此方法可以调用对象的
toString
valueOf
方法

例如:

希望这有助于澄清一些事情

作为一种实现,Javascript将遵循Ecma-262的11.8.5一节中定义的抽象关系比较算法。

首先,Javascript将对两个操作数应用内部运算符
ToPrimitive
,该运算符必须根据传递给它的参数返回一个基元值(未定义布尔字符串数字)。如果原语值被传递给
ToPrimitive
则返回值是传递给运算符的参数值,如果它是一个对象,则调用Javascript中所有对象的内部方法,则返回值是[[DefaultValue]]。 此方法负责返回对象表示的基元类型。根据代码类型,此方法可以调用对象的
toString
valueOf
方法

例如:


希望这有助于澄清一些事情

如果另一个可以转换成一个数字,即
(“a”>5)| |(“a”<5))
是f