使用JSON.parse()报错:为何解析"foo"时'f'未被标记为异常?
为什么JSON.parse("foo")报错提示的是Unexpected token 'o'而非'f'?
- 先明确核心逻辑:
JSON.parse()的参数是要解析的JSON文本,所以JSON.parse("foo")实际是让解析器处理裸文本foo(无双引号包裹),这本身就不是合法的JSON字符串——合法JSON字符串必须用双引号包裹,比如JSON.parse('"foo"')才是正确写法。 - 解析
foo时,JSON解析器会先尝试匹配内置关键字:JSON仅支持true、false、null三个关键字。第一个字符是f,解析器会预判这可能是关键字false,于是继续读取后续字符。 - 读到第二个字符
o时,发现和false的第二个字符a不匹配,此时解析器才判定出错,所以报错信息指向不符合预期的o,而非第一个字符f。 - 而解析
hi时,第一个字符h不是任何JSON关键字的开头,解析器直接识别出非法,因此报错指向h。
内容的提问来源于stack exchange,提问作者AntonHPL
相关产品推荐
相关产品推荐

