JSON 和二进制数

JSON and Binary Numbers

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

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

但是

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

无效。

JSON 不是 Javascript :)

查看 https://json.org/number 的语法生成(右栏),您会发现 [=18] 中没有二进制文字数字这样的东西=].

来自MDN

Binary numbers

Binary number syntax uses a leading zero followed by a lowercase or uppercase Latin letter "B" (0b or 0B).

您拥有的是 binary 类型的数字文字。分配的值是一个数字。该数字稍后在对象中用作十进制类型(标准)。

var object = { v: 0b1111 };

console.log(JSON.stringify(object));

JSON 被特意设计为 Javascript 语法的有限子集。这允许它用于表示常见的数组和对象格式,同时最大限度地降低解析器的复杂性。因此,虽然 Javascript 字面量语法允许使用多种不同的方式来表示同一事物,但 JSON 通常只允许一种方式。

例如在 Javascript 中,您可以在字符串周围使用单引号或双引号,但 JSON 只允许使用双引号。键对象周围的引号在 Javascript 中是可选的(如果键是有效标识符),但在 JSON.

中它们是必需的

更改 JSON 以允许更多格式会出现问题,因为它会导致与旧解析器的兼容性问题。所以 JSON 设计师不太可能将它扩展到不需要的东西上。我认为最近所做的唯一更改是正式允许不是对象或数组的顶级值;大多数解析器已经接受了这一点。因此,除非所有流行库的作者都添加二进制整数,否则他们不太可能将此作为 JSON 规范的一部分。