Aks*_*tap 75 javascript arrays json
我在理解行为方面遇到了问题JSON.parse
.JSON.parse
应该只适用于字符串.但它似乎适用于只包含一个字符串(甚至是单引号)的数组,如果字符串只包含数字.
JSON.parse(['1234']) // => 1234
JSON.parse(['1234as']) // => throws error
JSON.parse(['123', '123']) // => throws error
Run Code Online (Sandbox Code Playgroud)
Bol*_*ock 179
正如您所指出的,JSON.parse()
期望一个字符串而不是一个数组.但是,当给定数组或任何其他非字符串值时,该方法将自动将其强制转换为字符串并继续而不是立即抛出.从规格:
- 让JText成为ToString(文本).
- ...
数组的字符串表示由其值组成,以逗号分隔.所以
String(['1234'])
回来'1234'
,String(['1234as'])
回归'1234as'
,和String(['123', '123'])
回报'123,123'
.请注意,不会再次引用字符串值.这意味着,['1234']
和[1234]
两个转换为相同的字符串,'1234'
.
所以你真正做的是:
JSON.parse('1234')
JSON.parse('1234as')
JSON.parse('123,123')
Run Code Online (Sandbox Code Playgroud)
1234as
并且123,123
不是有效的JSON,因此JSON.parse()
抛出两种情况.(前者不是合法的JavaScript语法,后者包含不属于的逗号运算符.)
1234
另一方面,是一个数字文字,因此有效的JSON,代表自己.这就是为什么JSON.parse('1234')
(并通过扩展名JSON.parse(['1234'])
)返回数值1234.
nao*_*tor 21
如果JSON.parse没有获取字符串,它将首先将输入转换为字符串.
["1234"].toString() // "1234"
["1234as"].toString() // "1324as"
["123","123"].toString() // "123,123"
Run Code Online (Sandbox Code Playgroud)
从所有这些输出中,它只知道如何解析"1234".
归档时间: |
|
查看次数: |
7140 次 |
最近记录: |