JSON和二进制数

时间:2018-02-06 17:53:45

标签: javascript json binary-data

既然新的javascript接受二进制数字(即0b1111)也不应该是JSON吗?或者它们是两个独立的实体?

console.log(Number.isNaN(0b1111); // = 'false' meaning it is a number

JSON.parse('{"a":0b1111}');

不起作用。

3 个答案:

答案 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));