Теперь, когда новый javascript принимает двоичные числа (т.е. 0b1111), также не должен JSON? Или это два отдельных объекта?
console.log(Number.isNaN(0b1111); // = 'false' meaning it is a number
но
JSON.parse('{"a":0b1111}');
Не работает.
JSON намеренно предназначен для ограниченного подмножества синтаксиса Javascript. Это позволяет использовать его для представления общих массивов и форматов объектов, одновременно минимизируя сложность парсеров. Таким образом, в то время как буквенный синтаксис Javascript допускает множество альтернативных способов представления одного и того же, JSON обычно допускает только одно.
Например, в Javascript вы можете использовать одиночные или двойные кавычки вокруг строк, но JSON допускает только двойные кавычки. И цитаты вокруг объектов ключей являются необязательными в Javascript (если ключ является допустимым идентификатором), но они требуются в JSON.
Изменение JSON для обеспечения большего количества форматов будет проблематичным, поскольку это вызовет проблемы совместимости с более старыми анализаторами. Поэтому дизайнеры JSON вряд ли расширят его для чего-то, что действительно не нужно. Единственное изменение, которое, как мне кажется, было сделано недавно, - официально разрешить значения верхнего уровня, которые не являются объектами или массивами; большинство парсеров уже приняли это уже. Поэтому, если авторы всех популярных библиотек не добавят двоичные целые числа, они вряд ли будут благословлять это как часть спецификации JSON.
echo json_encode()
в сценарии PHP для вывода литералов, которые будут подставлены непосредственно в исходный код Javascript.
Из MDN:
Двоичные числа
Синтаксис двоичного числа использует начальный нуль, за которым следует строчная или прописная латинская буква "B" (0b или 0B).
То, что у вас есть, является числовым литералом двоичного типа. Назначенное значение - это число. Это число позже используется как десятичный тип (стандартный) в объекте.
var object = { v: 0b1111 };
console.log(JSON.stringify(object));
JSON не Javascript :)
Посмотрите на выпуск грамматики для номера на https://json.org/ (правый столбец), и вы увидите, что в JSON нет бинарных литералов.