gpt4 book ai didi

JavaScript:字符串与数字进行比较

转载 作者:行者123 更新时间:2023-11-28 13:51:27 25 4
gpt4 key购买 nike

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

obj = document.frm.weight.value;
if( obj < 0 || obj > 5 ){
alert("Enter valid range!");
return false;
}

最佳答案

好吧,作为 EMCAScript实现时,Javascript 将遵循 Ecma-262 的 11.8.5 部分中定义的抽象关系比较算法

首先,Javascript 将对两个操作数应用内部运算符 ToPrimitive,它必须返回一个原始值(未定义 bool 值 stringnullnumber)基于传递给它的参数。如果将原始值传递给ToPrimitive,则返回值是传递给运算符的参数值,如果它是对象,则调用Javascript中所有对象实现的内部方法,它是[[默认值]]。此方法负责返回对象表示的原始类型。根据代码类型,此方法可能会调用对象的 toStringvalueOf 方法。

例如:

 var x = {valueOf: function() { return 3; }};

console.log(x > 2); // true
console.log(x < 1); // false
console.log(x == 3); // true


Javascript如何决定应该调用哪个方法?那么,ToPrimitive 运算符可能会收到一个可选参数,它用于优先考虑特定类型,例如数字字符串。如果传递Number,则首先调用valueOf方法,如果该方法不存在于对象中或不返回原始类型,则toString然后调用 。如果传递String,则会发生相反的情况:首先调用toString,如果它既不存在于对象中也不返回原始值,则valueOf为叫。
这就是为什么在上面的代码片段中,我可以自由地比较对象和原始类型。在进行比较时理解这一点非常重要。

之后,如果两个操作数都是字符串,Javascript 将遵循一些与 Unicode 标准相关的有趣且特定的算法,检查代码点值。否则,Javascript 会将两个操作数转换为 Number 并比较它们的数学值。请注意,如果其中一个为 NaN,则比较结果为 undefined,这在 if 语句中将为 false .

一些例子:

// true => ToNumber(true) > ToNumber(false)
console.log(true > false);
// true => ToNumber("5") < ToNumber(10)
console.log("5" < 10);
// false ToNumber(ToPrimitive(obj, Number)) == ToNumber(10)
console.log(({valueOf: function() { return 10}}) > 10);
// false, it's not related to the length of the strings,
// the code point value of each char is used to evaluate the comparison
console.log('Hello worlds' > 'hello');

希望它有助于澄清一些事情。

关于JavaScript:字符串与数字进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com