我在理解 JSON.parse
的行为时遇到问题。 JSON.parse
应该只适用于字符串。但它似乎适用于只包含一个字符串(甚至单引号)的数组,如果字符串只包含数字。
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
最佳答案
正如您所指出的, JSON.parse()
需要一个字符串而不是一个数组。但是,当给定一个数组或任何其他非字符串值时,该方法会自动将其强制转换为字符串并继续进行而不是立即抛出。从 spec :
数组的字符串表示由其值组成,以逗号分隔。所以
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/