【发布时间】:2019-01-31 00:32:28
【问题描述】:
所以字母a十进制是97,十六进制是61,八进制是141。你可以用 JavaScript 写成这样:
var octal = [ '\141', '\141', '\141' ]
var hex = [ '\x61', '\x61', '\x61' ]
var ascii = [ 'a', 'a', 'a' ]
它们的结果都是一样的:
console.log(octal) //=> ["a", "a", "a"]
console.log(hex) //=> ["a", "a", "a"]
console.log(ascii) //=> ["a", "a", "a"]
然而,我想知道的第一部分是,它们实际上是不同数量的 ASCII 字符要定义:
'\141' (4)
'\x61' (4)
'a' (1)
我想知道如果你用八进制或十六进制定义一大块文本,它实际上会占用文件空间的 4 倍。因此,如果您从 /api/resources.json 以八进制返回 JSON 响应,则响应的大小将是您返回 ASCII 时的 4 倍。也就是对此的回应:
'\141\141\141\141\141\141\141\141\141\141\141\141....'
相对于对此的回应:
'aaaaaaaaaaa....'
所以我不确定它是否真的使文件大小/响应大小变大(可能是一个愚蠢的问题,但这个encoding stuff 很难)。只是想确保,是的,它会占用更多空间,因为它看起来就是这样。所以基本上,在 JavaScript 文件中写入“原始十六进制/八进制”会导致它变得比 ASCII 更大。
【问题讨论】:
-
由于 JSON 响应是一个字符串,并且八进制或十六进制在 JSON 中无效,因此您也必须将这些值作为字符串发送。所以,是的,如果你必须将每个字符描述为一个由 4 个字符组成的字符串,那么对我来说这似乎很合乎逻辑,那么文件将大 4 倍左右。只有当您将字符串解析回 String 对象时,它才能在后台更有效地存储。但在那之前,脚本不会知道字符串是八进制还是十六进制。
-
您的观察是正确的,并且构成了编译语言和解释语言之间差异的一部分。在编译语言中,生成的目标代码是相同的,唯一的大小差异在于源代码。在规模的这一端(即指定单个字符),开销并没有那么大,但是如果您以这种方式定义大量文本,或者执行诸如以 ASCII 格式编码二进制图像文件(例如URL 编码),然后使用的数据变得很重要,影响页面加载时间
-
原则上是的。如果您使用需要更多字节来表示相同数据的编码来传递数据,那么它会更大,但是如果您使用 express 创建了一个简单的节点服务器并返回一个字符串作为结果,那么该字符串将被编码为相同的不管你如何在你的 js 文件中表达它。
标签: javascript hex ascii octal