我在理解 JSON.parse
的行为时遇到问题。 JSON.parse
应该只适用于字符串。但它似乎适用于只包含一个字符串(甚至单引号)的数组,如果字符串只包含数字。
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
最佳答案
正如您所指出的,JSON.parse()
需要一个字符串而不是数组。但是,当给定一个数组或任何其他非字符串值时,该方法将自动将其强制转换为一个字符串并继续而不是立即抛出。来自 spec :
- Let JText be 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
是数字文字,因此是有效的 JSON,代表它自己。这就是 JSON.parse('1234')
(以及扩展名为 JSON.parse(['1234'])
)返回数值 1234 的原因。
关于javascript - 为什么 JSON.parse(['1234']) 返回 1234?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43718032/