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

遇到一个很诡异的字符串问题!

  •  
  •   yuuk · 2018-05-07 11:05:35 +08:00 · 5902 次点击
    这是一个创建于 2411 天前的主题,其中的信息可能已经有所发展或是发生改变。
    let str = '‭ 15556268842 ‬';
    console.warn(str.length); // 13
    

    大家可以复制这个字符串到控制打印下。这个数据是从 excel 表中导出来的,疑似字符串前后各有一个隐藏的字符,但是不占位。。。纳尼?

    14 条回复    2018-05-07 17:32:22 +08:00
    BlackGrasshopper
        1
    BlackGrasshopper  
       2018-05-07 11:09:55 +08:00
    空格啊,怎么没占位
    zjp
        2
    zjp  
       2018-05-07 11:13:04 +08:00 via Android
    两个零宽字符 前面有一个 U+202D 后面一个 U+202C
    找个小工具检测下字符不就行了
    btw U+202D 很好玩…
    songz
        3
    songz  
       2018-05-07 11:15:56 +08:00
    复制下来,用左右键移动光标,会有两个隐藏的字符,按下左或右光标不会移动
    yuuk
        4
    yuuk  
    OP
       2018-05-07 11:17:17 +08:00
    很奇怪,发布到 V2EX 后就被解析出空格了。我控制台里面的截图:
    ![Alt text]( )
    rabbbit
        5
    rabbbit  
       2018-05-07 11:17:42 +08:00
    我这输出是 15, chrome
    let str = '‭ 15556268842 ‬';
    console.warn(str.length); // 15
    yuuk
        6
    yuuk  
    OP
       2018-05-07 11:20:04 +08:00
    @rabbbit 去掉那两个可见的占位空格
    rabbbit
        7
    rabbbit  
       2018-05-07 11:22:29 +08:00
    @yuuk520 那就是 13 呀,F12 可以看到前后各有一个隐藏字符
    rabbbit
        8
    rabbbit  
       2018-05-07 11:24:51 +08:00
    讲个好玩的坑
    '𠀀'.length // 2
    Array.from('𠀀').length // 1
    lommo
        9
    lommo  
       2018-05-07 11:30:10 +08:00
    \u0020\u0031\u0035\u0035\u0035\u0036\u0032\u0036\u0038\u0038\u0034\u0032\u0020\u202c
    input2output
        10
    input2output  
       2018-05-07 11:49:16 +08:00
    键盘 左右移动就感觉到了
    broker
        11
    broker  
       2018-05-07 11:50:34 +08:00
    还有一个 U+202E 也比较好玩

    this['‮'&&'alert']`1`
    gongzhang
        12
    gongzhang  
       2018-05-07 12:27:39 +08:00
    Unicode 字符串长度有多种含义,看你要哪种:
    1. 存储字节数
    2. UTF8 或 UTF16 编码后的编码单元数
    3. Unicode Scala 数
    4. 最终显示出来的字符数
    A3m0n
        13
    A3m0n  
       2018-05-07 16:02:45 +08:00   ❤️ 1
    https://i.loli.net/2018/05/07/5af007deb6e4f.gif

    做了个 gif,注意光标位置以及下方的列数。
    linxiaoziruo
        14
    linxiaoziruo  
       2018-05-07 17:32:22 +08:00
    我打印出来 15
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 03:36 · PVG 11:36 · LAX 19:36 · JFK 22:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.