我正在尝试用Python的slimit包缩小一些javascript。在
import slimit
slimit.minify('[1,2,3,4,5,6,7,8]')
运行正常并返回“[1,2,3,4,5,6,7,8]”
^{pr2}$给出错误:
SyntaxError: Unexpected token (NUMBER, '8') at 1:23 between LexToken(NUMBER,'0',1,22) and LexToken(RBRACKET,']',1,24)
奇怪的是缩小字符串[01,02,03,04,05,06,07]可以正常工作。在
Slimit仅在缩小数组中8个或更多零填充整数时返回错误。在
这要归功于slimit使用的lexer。以“0”(但不是“0x”)开头的数字被视为八进制整数。因此,序列“08”以2个独立的标记(“0”、“8”)结束,因此出现“意外标记”错误。在
注意以下几点:
在查找lexer的the source时,我们看到用于标识数字的正则表达式:
^{pr2}$slimit是应该支持八进制表示还是将它们作为普通的以10为基数的整数,这个问题有待商榷。在
JSON规范明确禁止数字的八进制形式,一些工具会将其标记为无效的JSON(try jsonlint)。从RFC 4627 (2.4. Numbers):
虽然我不确定这是不是相对的。在
这可能是useful(javascript中关于parseInt的问题)
如果我们只是简单地使用
它返回0。(在某些浏览器中)
似乎json也不支持解码以0开头的数字。在
相关问题 更多 >
编程相关推荐