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

标签 javascript arrays json

我在理解 JSON.parse 的行为时遇到问题。 JSON.parse 应该只适用于字符串。但它似乎适用于只包含一个字符串(甚至单引号)的数组,如果字符串只包含数字。

JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error

最佳答案

正如您所指出的,JSON.parse() 需要一个字符串而不是数组。但是,当给定一个数组或任何其他非字符串值时,该方法将自动将其强制转换为一个字符串并继续而不是立即抛出。来自 spec :

  1. Let JText be ToString(text).
  2. ...

数组的字符串表示形式由其值组成,以逗号分隔。所以

  • String(['1234']) 返回'1234',
  • String(['1234as']) 返回'1234as',并且
  • String(['123', '123']) 返回 '123,123'

请注意,字符串值不再被引用。这意味着 ['1234'][1234] 都转换为相同的字符串 '1234'

所以你真正在做的是:

JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')

1234as123,123 不是有效的 JSON,因此 JSON.parse() 在这两种情况下都会抛出。 (前者从一开始就不是合法的 JavaScript 语法,而后者包含不属于的逗号运算符。)

另一方面,

1234 是数字文字,因此是有效的 JSON,代表它自己。这就是 JSON.parse('1234')(以及扩展名为 JSON.parse(['1234']))返回数值 1234 的原因。

关于javascript - 为什么 JSON.parse(['1234']) 返回 1234?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43718032/

相关文章:

php - 测试数组中的任何结果是否在特定节点中具有值

ruby-on-rails - Ruby on Rails 中的 JSON 格式显示

javascript modulu 执行不清楚

javascript - jquery 范围 slider : set max of slider 1 to min of slider 2

javascript - 如何识别插入 Canvas 的 fabric js 图像对象?

javascript - Html 5 文件系统 API,我收到 DOMError "NotSupporteError"

javascript - 如何将这个对象的对象转换为对象数组?

PHP JSON 多重回显值

java - 如何使用 Jackson 序列化/反序列化 ASP.NET JSON 日期?

MYSQL 不允许 JSON 数据类型