开发者社区> 问答> 正文

为什么JSON.parse(['1234'])返回1234?

我在了解的行为时遇到了问题JSON.parse。JSON.parse应该只适用于字符串。但是,对于仅包含一个字符串(甚至用单引号引起来)的数组,如果该字符串仅包含数字,则似乎可以正常工作。

JSON.parse(['1234']) // => 1234 JSON.parse(['1234as']) // => throws error JSON.parse(['123', '123']) // => throws error 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-08 19:56:29 458 0
1 条回答
写回答
取消 提交回答
  • 如您所指出的,JSON.parse()期望一个字符串而不是一个数组。但是,当给定数组或任何其他非字符串值时,该方法将自动将其强制为字符串并继续操作,而不是立即抛出。从规格:

    令JText为ToString(text)。 ... 数组的字符串表示形式由其值组成,并用逗号分隔。所以

    String(['1234'])返回'1234', String(['1234as'])返回'1234as',并且 String(['123', '123'])返回'123,123'。 注意,字符串值不再被引用。这意味着['1234']和[1234]都将转换为相同的字符串'1234'。

    因此,您真正要做的是:

    JSON.parse('1234') JSON.parse('1234as') JSON.parse('123,123') 1234as并且123,123不是有效的JSON,因此JSON.parse()在两种情况下均会引发。(前者不是合法的JavaScript语法,而后者包含不属于的逗号运算符。)

    1234另一方面是Number文字,因此是表示自己的有效JSON。这就是为什么JSON.parse('1234')(以及扩展名JSON.parse(['1234']))返回数字值1234的原因。

    2020-02-08 19:56:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载