由/u2028 unexpected token 引发的思考
如图,有时候拷贝代码的时候,不小心就出现错误。
于是查看代码,{}内已经看不到有任何字符了,但其实将鼠标光标焦点放到{}中,按下退格键,居然没有把{这个字符删除,那说明,{}之间确实还有其他字符。
比如“{ }”这里大括号里,就有一个隐藏的特殊字符/u2028。
错误的“{ }”
正确的“{}”
看起来简直一模一样。但是复制下来,用工具进行Unicode编码。
请参看下表:
由此可见,以后再遇到莫名其妙的编辑器报错时,然后查代码又查不到明显语法错误,那极有可能是特殊字符在作祟。
可以试试,去特殊字符的方法。
String xx = "goal String".replace("/u2028", "");//将隐藏换行符号去掉
String xx = "goal String".replace(",", ",");//将全角逗号转换半角
String xx = "goal String".replace(".", ".");//将全角点号转换半角由此可见,以后再遇到莫名其妙的编辑器报错时,然后查代码又查不到明显语法错误,那极有可能是特殊字符在作祟。
可以试试,去特殊字符的方法。
String xx = "goal String".replace("/u2028", "");//将隐藏换行符号去掉
String xx = "goal String".replace(",", ",");//将全角逗号转换半角
String xx = "goal String".replace(".", ".");//将全角点号转换半角
如图,有时候拷贝代码的时候,不小心就出现错误。
于是查看代码,{}内已经看不到有任何字符了,但其实将鼠标光标焦点放到{}中,按下退格键,居然没有把{这个字符删除,那说明,{}之间确实还有其他字符。
比如“{ }”这里大括号里,就有一个隐藏的特殊字符/u2028。
错误的“{ }”
正确的“{}”
看起来简直一模一样。但是复制下来,用工具进行Unicode编码。
看下图是两种写法的区别,不信,你可以直接复制上面两个{}进行Unicode编码。
错误写法Unicode编码后:
正常写法Unicode编码后:
请参看下表:
Unicode 字符值 | 转义序列 | 含义 | 类别 |
---|---|---|---|
\u0008 | \b | Backspace | |
\u0009 | \t | Tab | 空白 |
\u000A | \n | 换行符(换行) | 行结束符 |
\u000B | \v | 垂直制表符 | 空白 |
\u000C | \f | 换页 | 空白 |
\u000D | \r | 回车 | 行结束符 |
\u0022 | \" | 双引号 (") | |
\u0027 | \' | 单引号 (') | |
\u005C | \\ | 反斜杠 (\) | |
\u00A0 | 不间断空格 | 空白 | |
\u2028 | 行分隔符 | 行结束符 | |
\u2029 | 段落分隔符 | 行结束符 | |
\uFEFF | 字节顺序标记 | 空白 |
由此可见,以后再遇到莫名其妙的编辑器报错时,然后查代码又查不到明显语法错误,那极有可能是特殊字符在作祟。
可以试试,去特殊字符的方法。
String xx = "goal String".replace("/u2028", "");//将隐藏换行符号去掉
String xx = "goal String".replace(",", ",");//将全角逗号转换半角
String xx = "goal String".replace(".", ".");//将全角点号转换半角由此可见,以后再遇到莫名其妙的编辑器报错时,然后查代码又查不到明显语法错误,那极有可能是特殊字符在作祟。
可以试试,去特殊字符的方法。
String xx = "goal String".replace("/u2028", "");//将隐藏换行符号去掉
String xx = "goal String".replace(",", ",");//将全角逗号转换半角
String xx = "goal String".replace(".", ".");//将全角点号转换半角