我在了解的行为时遇到了问题JSON.parse。JSON.parse应该只适用于字符串。但是,对于仅包含一个字符串(甚至用单引号引起来)的数组,如果该字符串仅包含数字,则似乎可以正常工作。
JSON.parse(['1234']) // => 1234 JSON.parse(['1234as']) // => throws error JSON.parse(['123', '123']) // => throws error 问题来源于stack overflow
如您所指出的,JSON.parse()期望一个字符串而不是一个数组。但是,当给定数组或任何其他非字符串值时,该方法将自动将其强制为字符串并继续操作,而不是立即抛出。从规格:
令JText为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另一方面是Number文字,因此是表示自己的有效JSON。这就是为什么JSON.parse('1234')(以及扩展名JSON.parse(['1234']))返回数字值1234的原因。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。