既然新的javascript接受二进制数字(即0b1111)也不应该是JSON吗?或者它们是两个独立的实体?
console.log(Number.isNaN(0b1111); // = 'false' meaning it is a number
但
JSON.parse('{"a":0b1111}');
不起作用。
答案 0 :(得分:2)
JSON被故意设计为Javascript语法的有限子集。这允许它用于表示常见的数组和对象格式,同时最小化解析器的复杂性。因此,虽然Javascript文字语法允许表示相同事物的许多替代方法,但JSON通常只允许一个。
E.g。在Javascript中,您可以在字符串周围使用单引号或双引号,但JSON只允许使用双引号。密钥对象周围的引号在Javascript中是可选的(如果密钥是有效的标识符),但它们在JSON中是必需的。
更改JSON以允许更多格式会有问题,因为它会导致旧解析器的兼容性问题。因此,JSON设计人员不太可能将其扩展为非真正需要的东西。我认为最近唯一的变化是正式允许不是对象或数组的顶级值;大多数解析器已经接受了这个。因此,除非所有流行库的作者都添加二进制整数,否则他们不太可能将此作为JSON规范的一部分加以保护。
答案 1 :(得分:1)
JSON不是Javascript:)
在https://json.org/(右栏)查看 number 的语法生成,你会发现JSON中没有二进制文字数字。
答案 2 :(得分:1)
来自MDN:
二进制数
二进制数语法使用前导零,后跟小写或大写拉丁字母“B”(0b或0B)。
您所拥有的是二进制类型的数字文字。指定的值是一个数字。该数字稍后在对象中用作十进制类型(标准)。
var object = { v: 0b1111 };
console.log(JSON.stringify(object));