V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
MrFireAwayH
V2EX  ›  JavaScript

用 JS 把字符串转化成整型

  •  
  •   MrFireAwayH · 2017-06-20 18:28:37 +08:00 · 2792 次点击
    这是一个创建于 2748 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到一道题要求这样做 也有人给出了实现(我用方法 A 指代) 代码 http://jsbin.com/repakimaqu/edit?js

    同时我知道两个波澜号操作的叠加也是可以在一定程度上做到转换字符为数字的(两次取反操作)

    比如说

    ~~"123" === 123; // true

    ~~"123.123" === 123; // true

    对于不能转换的对象 会返回数字 0

    那么问题来了

    原生 parseInt()

    Number()

    方法 A

    双波澜号

    他们之间的差异有哪些?

    😪说起来最近被波澜哥洗脑了所以脑子里总是他……
    9 条回复    2017-06-21 08:50:07 +08:00
    MrFireAwayH
        1
    MrFireAwayH  
    OP
       2017-06-20 18:29:42 +08:00 via Android
    手机码字……格式不好看😪
    zythum
        2
    zythum  
       2017-06-20 19:21:50 +08:00   ❤️ 1
    所有通过位运算的(不管是~, >>, |)方式转的都会遇到整型上限的问题。所以在不知道数组到底多大的情况下谨慎使用,所以尽量用 parseInt。但是如果你自己情况,那就无所谓了。
    v1024
        3
    v1024  
       2017-06-20 19:40:18 +08:00 via iPhone
    楼主也是波澜哥的粉丝吗
    zhuangtongfa
        4
    zhuangtongfa  
       2017-06-20 20:04:35 +08:00
    用 Number 最保险
    noe132
        5
    noe132  
       2017-06-20 20:58:33 +08:00   ❤️ 1
    参考:
    http://ecma-international.org/ecma-262/7.0/index.html#sec-abstract-equality-comparison
    http://ecma-international.org/ecma-262/7.0/index.html#sec-tonumber
    http://ecma-international.org/ecma-262/7.0/index.html#sec-parseint-string-radix
    http://ecma-international.org/ecma-262/7.0/index.html#sec-number-constructor-number-value

    Number("123") 与 ~~"123" === 123 内部处理基本一致,都是调用 ToNumber(value)。因为有两次取反,可能会有取反的坑。
    ToNumber 对于字符串类型的参数,就是按照 js 数值语法的字面量来处理字符串,所有合法的 javascript 数值字面量字符串会被转化为相应的值。所以 Number("1.1") === 1.1。若遇到不合法的返回 NaN

    而 parseInt 有第二个参数为进制,默认为 10,取值范围为 2-36。
    parseInt 的处理方法是将字符串前缀中提取 0-9a-z 的字符,然后一位一位的计算根据进制转化为数值
    例如 "1a.54Q"以 10 为基,有效字符为 0-9,提取出来的有效字符串为"1",得到的值就是 1
    "1a.54Q"以 16 为基有效字符为 0-9a-f,提取出来的有效字符串为"1a",得到的值就是 26
    noe132
        6
    noe132  
       2017-06-20 21:11:49 +08:00   ❤️ 1
    你上面给的方法 A 相当于一个用 JS 实现的的 parseInt,逻辑和 parseInt 基本一致
    0915240
        7
    0915240  
       2017-06-20 22:08:51 +08:00   ❤️ 1
    ~~这种黑科技有整数上线问题 21 亿

    慎用,用时需注意。
    MrFireAwayH
        8
    MrFireAwayH  
    OP
       2017-06-21 08:49:47 +08:00 via Android
    谢谢各位!👍😳
    MrFireAwayH
        9
    MrFireAwayH  
    OP
       2017-06-21 08:50:07 +08:00 via Android
    @v1024 😂对啊……波澜~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2571 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:47 · PVG 11:47 · LAX 19:47 · JFK 22:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.