新版JS支持二进制数(0b1111),JSON是否也需支持?生效问题问询
JSON与二进制数表示:为什么
0b格式不被支持? 这问题问得挺到位的!很多人都会因为JSON和JavaScript的名字渊源,误以为他俩是绑定死的,但实际上JSON是完全独立于JavaScript的数据交换格式——这是搞懂这个问题的核心。
先明确:JSON和JavaScript是两个独立实体
JSON确实脱胎于JavaScript的对象字面量语法,但早在2006年就被ECMA标准化(ECMA-404),后来还成为了ISO国际标准。它的设计目标是做跨语言、跨平台的数据交换,所以不会跟着JavaScript的新特性随便更新。像0b1111这种二进制字面量是ECMAScript(JavaScript的标准)后来新增的语法,和JSON的规范完全是两条线。
JSON为什么不支持0b格式?
翻一下JSON的官方规范就会发现,它只认三种数值表示:十进制整数、带小数点的十进制数、科学计数法。0b开头的二进制写法根本不在JSON的语法规则里,所以解析器碰到0b1111时直接就会报语法错误——不是“没生效”,是完全不符合JSON的要求。
那要在JSON里传二进制相关的数据怎么办?
如果你的场景需要传递二进制数值,有两个常用方案:
- 把二进制数转成十进制数字或字符串存储,比如把
0b1111写成15,到JavaScript端再用parseInt("1111", 2)或者直接Number("0b1111")转回去; - 如果是大体积的二进制数据(比如文件、字节流),可以用Base64编码成字符串,接收端再解码还原。
内容的提问来源于stack exchange,提问作者kevdev
相关产品推荐
相关产品推荐

