栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么字符串与数字比较在Javascript中有效

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么字符串与数字比较在Javascript中有效

因为Javascript 以允许它们将操作数强制转换为不同类型的方式定义

>=
<=
(以及其他几个运算符)。它只是运算符定义的一部分。

在的情况下

<
>
<=
,和
>=
,山的详细信息在布局[规范的§11.8.5。简短的版本是:如果两个操作数都是字符串(从对象强制转换后,如果需要的话),它将进行字符串比较。否则,它将操作数强制转换为数字并进行数字比较。

因此,您会得到有趣的结果,就像这样

"90" > "100"
(都是字符串,这是字符串比较),但是
"90" <100
(其中一个是数字,是数字比较)。:-)

可以进行这样的比较,还是应该使用parseInt()将x转换为整数?

这是一个见解。有人认为依靠隐性强制是完全可以的。其他人则认为不是。有一些客观的论点。例如,假设您依赖于隐式转换,这很好,因为您拥有这些数字常量,但后来您将其

x
与从输入字段中获得的另一个值进行比较。现在,您正在比较字符串,但是代码看起来相同。但同样,这是一个见解,您应该自行选择。

如果你决定明确转换为数字第一,

parseInt
可能是也可能不是你想要什么,它 不会 做同样的事情,隐式转换。以下是选项的摘要:

  • parseInt(str[, radix])
    -将字符串的开头尽可能多地转换为整数(整数), 而忽略结尾的多余字符 。所以
    parseInt("10x")
    10
    ; 该
    x
    被忽略。支持可选的基数(基数)参数,因此
    parseInt("15", 16)
    21
    15
    十六进制)。如果没有基数,则假定为十进制,除非字符串以
    0x
    (或
    0X
    )开头,在这种情况下,它将跳过这些并假定为十六进制。难道 不是 寻找新的
    0b
    (二进制)或
    0o
    (新款八进制)前缀; 两者都解析为
    0
    。 _(使用的一些浏览器,以开始治疗的字符串
    0
    为八进制;从未指定该行为,并且是[具体不允许] [2]在ES5规范。)_返回
    NaN
    如果找不到可解析的数字。

  • Number.parseInt(str[, radix])
    -与
    parseInt
    上述功能完全相同。(从字面上看
    Number.parseInt === parseInt
    true
    。)

  • parseFloat(str)
    -和一样
    parseInt
    ,但是浮点数并且仅支持十进制。再串上多余的字符被忽略,所以
    parseFloat("10.5x")
    10.5
    (将
    x
    被忽略)。由于仅支持十进制,因此
    parseFloat("0x15")
    0
    (因为解析在处结束
    x
    )。
    NaN
    如果找不到可解析的数字,则返回。

  • Number.parseFloat(str)
    -与
    parseFloat
    上述功能完全相同。

  • 一元

    +
    ,例如
    +str
    - (例如,隐式转换) 使用浮点数和Javascript的标准数字符号将 整个 字符串转换为数字(仅数字和小数点=十进制;
    0x
    前缀=十六进制;
    0b
    =二进制[ES2015 +];
    0o
    前缀=八进制[ES2015 + ]; 一些 实现将其扩展为将前导
    0
    视作八进制,但不是严格模式)。
    +"10x"
    NaN
    因为
    x
    忽略。
    +"10"
    10
    +"10.5"
    10.5
    +"0x15"
    21
    +"0o10"
    8
    [ES2015 +],
    +"0b101"
    5
    [ES2015 +]。有一个陷阱:
    +""
    0
    ,不是
    NaN
    如您所料。

  • Number(str)
    -就像隐式转换一样(例如,像
    +
    上面的一元转换一样),但是在某些实现上速度较慢。 (这并不重要。)

  • 按位或与零个,例如

    str|0
    -隐式转换,例如
    +str
    ,但随后又转换成一个32位的整数(转换和数字
    NaN
    0
    如果字符串不能被转换为有效的数)。

因此,如果可以,则可以忽略字符串上多余的位,

parseInt
或者
parseFloat
可以。
parseInt
用于指定基数非常方便。一元
+
对于确保考虑
整个 字符串很有用。由您选择。:-)

最后,如果您要转换为数字并想知道结果是否为

NaN
,则可能会想这样做
if (convertedValue === NaN)
。但这 是行不通的



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/391593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号