Javascript“”.length返回1而不是0

问题描述:

好吧,我非常难以忍受这个。 我从JavaScript库中获取字符串值。我打电话myStringVar = myStringVar.trim(),但是当我做myStringVar.substring(0,1)它给了我一个空字符串。当我打电话给var arr = myStringVar.split('')时,数组中的第一个元素是空字符串,当我调用arr [0] .trim()。length时,它返回1而不是零。Javascript“”.length返回1而不是0

enter image description here

我这么想吗?

编辑 继评论和回应,我已经能够在字符串的开头隔离问题到非可视Unicode字符的存在。我现在将尝试找到一种方法从字符串中删除这些字符....或者更好地提取字符串中感兴趣的部分。 感谢您的帮助。

+8

尝试'string.charCodeAt(0)'。它说什么? (我怀疑你的字符串中可能有一些不可见的Unicode字符) – Frxstrem

最可能的答案是你的字符串中有一些不可见的Unicode字符(例如,"⁣",U + 2063 INVISIBLE SEPARATOR)。
只包含这样的字符的字符串会像空字符串一样查看用户(或程序员),但实际上具有长度1,因为它确实包含字符。

测试这种情况的一种简单方法是获取字符串中字符的Unicode字符代码,其格式为string.charCodeAt(0)。然后,您可以在Unicode表中查找此值(如this one),该值应告诉您字符串中是否有隐形字符。

+0

你的解释很可能,但如果它是真的,我会感到恼火 - 'INVISIBLE SEPARATOR's看起来就像'trim()'应该是的东西摆脱。 –

+0

@ChristianTernus尽管['INVISIBLE SEPARATOR'](http://unicode-table.com/en/2063/)属于“一般标点符号”类别,我认为'trim()'只能删除空格,而不是任何类型的Unicode空白。至少在Chrome中,'trim()'不会移除'INVISIBLE SEPARATOR'。 – Frxstrem

+1

@ChristianTernus修剪不会摆脱不可见的分隔符。它清除了此列表中的所有内容:http://www.ecma-international.org/ecma-262/6.0/#sec-white-space,其中“其他类别”包含这些字符(所有可见的空格):http: //www.fileformat.info/info/unicode/category/Zs/list.htm。它也摆脱了换行符,卡拉格回车,行分隔符和段落分隔符,但该列表是详尽的。 – Paulpro