我无法理解JSON.parse
的行为.JSON.parse
应该只适用于字符串.但是,如果字符串只包含数字,则它似乎适用于只包含一个字符串(甚至单引号)的array.
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
我无法理解JSON.parse
的行为.JSON.parse
应该只适用于字符串.但是,如果字符串只包含数字,则它似乎适用于只包含一个字符串(甚至单引号)的array.
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
正如您已经指出的,JSON.parse()
需要的是字符串而不是array.但是,当给定数组或任何其他非字符串值时,该方法将自动将其强制为字符串并继续进行,而不是立即引发.从spec:
- 让JText成为字符串(text).
- ...
数组的字符串表示形式由其值组成,用逗号分隔.所以
String(['1234'])
返回'1234'
,String(['1234as'])
returns '1234as'
, andString(['123', '123'])
返回'123,123'
.请注意,字符串值不会再次被引用.这意味着['1234']
和[1234]
都转换为相同的字符串'1234'
.
So what you're really doing is:
JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')
1234as
and 123,123
are not valid JSON, and so JSON.parse()
throws in both cases. (The former isn't legal JavaScript syntax to begin with, and the latter contains a comma operator that doesn't belong.)
另一方面,1234
是数字文字,因此是有效的JSON,表示其自身.这就是JSON.parse('1234')
(扩展JSON.parse(['1234'])
)返回数值1234的原因.