Javascript"&引用;。返回1而不是0的长度
好吧,我被这个问题难住了。 我从javascript库中获取字符串值。我调用Javascript"&引用;。返回1而不是0的长度,javascript,string,Javascript,String,好吧,我被这个问题难住了。 我从javascript库中获取字符串值。我调用myStringVar=myStringVar.trim()但是当我调用myStringVar.substring(0,1)时,它会给我一个空字符串。当我调用var arr=myStringVar.split(“”)数组中的第一个元素是和空字符串,当我调用arr[0].trim().length时,它返回1而不是零 我错过什么了吗 编辑 在注释和响应之后,我已经能够将问题归结为字符串开头是否存在非可视unicode字符
myStringVar=myStringVar.trim()
但是当我调用myStringVar.substring(0,1)
时,它会给我一个空字符串。当我调用var arr=myStringVar.split(“”)
数组中的第一个元素是和空字符串,当我调用arr[0].trim().length时,它返回1而不是零
我错过什么了吗
编辑
在注释和响应之后,我已经能够将问题归结为字符串开头是否存在非可视unicode字符。现在,我将尝试找到一种从字符串中删除这些字符的方法……或者更好地提取字符串中感兴趣的部分。
感谢您的帮助。最可能的答案是字符串中有一些不可见的Unicode字符(例如,
“——”
,U+2063不可见分隔符)。对于用户(或程序员)来说,只包含这样一个字符的字符串看起来像一个空字符串,但实际上长度为1,因为它确实包含一个字符
测试这种情况的一种简单方法是使用获取字符串中字符的Unicode字符代码。然后,您可以在Unicode表(例如)中查找该值,该表会告诉您字符串中是否有不可见字符。最可能的答案是字符串中有一些不可见的Unicode字符(例如,
“——”
,U+2063不可见分隔符)。对于用户(或程序员)来说,只包含这样一个字符的字符串看起来像一个空字符串,但实际上长度为1,因为它确实包含一个字符
测试这种情况的一种简单方法是使用获取字符串中字符的Unicode字符代码。然后,您可以在Unicode表(如)中查找该值,该表会告诉您字符串中是否有不可见字符。请尝试
string.charCodeAt(0)
。上面说什么?(我怀疑您的字符串中可能有一些不可见的Unicode字符)请尝试string.charCodeAt(0)
。上面说什么?(我怀疑你的字符串中可能有一些看不见的Unicode字符)你的解释很可能,但如果是真的——看不见的分隔符
s似乎正是trim()
应该摆脱的那种东西。@ChristianTernus我想trim()
只会删除空白,虽然属于“通用标点符号”的范畴,但没有任何类型的Unicode空白。至少在Chrome中,trim()
不会移除不可见的分隔符
。@ChristianTernus trim不会移除不可见的分隔符。它删除了列表中的所有内容:,其中“其他类别”包含以下字符(所有可见的空白):。它还删除了换行符、carraige返回符、行分隔符和段落分隔符,但该列表是详尽的。与此问题无关,但为了进一步讨论trim()-它也不会删除不间断空格(),这意味着带有此空格的字符串似乎只有一个空格,因此有可能被修剪。trim()但即使在.trim()实现之后,nbsp仍将保留。@gavgriftrim()
确实删除了不间断空格。你的解释很可能是正确的,但如果它是真的,我会很恼火--不可见分隔符
s似乎正是trim()
应该去掉的那种东西。@ChristianTernus我想trim()
仅删除空白,但属于“通用标点符号”类别,而不是任何类型的Unicode空白。至少在Chrome中,trim()
不会移除不可见的分隔符
。@ChristianTernus trim不会移除不可见的分隔符。它删除了列表中的所有内容:,其中“其他类别”包含以下字符(所有可见的空白):。它还删除了换行符、carraige返回符、行分隔符和段落分隔符,但该列表是详尽的。与此问题无关,但为了进一步讨论trim()-它也不会删除不间断空格(),这意味着带有此空格的字符串似乎只有一个空格,因此有可能被修剪。trim()但即使在.trim()实现之后,nbsp仍将保持不变。@gavgriftrim()
会删除不间断的空格。