JavaScript 中有兩個不同的 Buffer 物件(不同的值),但在 JavaScript 物件中,它們被視為相等。知道為什么嗎?如何強制它們成為 JavaScript 的不同鍵?謝謝
我的 node.js 版本在 Ubuntu 18.04 上是 10.15.1。
var buf1 = Buffer.from([
10,
33,
45,
77,
10,
33,
46,
166,
140,
190,
5,
241
]);
var buf2 = new Buffer.from([
10,
33,
45,
77,
10,
33,
46,
168,
215,
216,
5,
241
]);
let a = {};
a[buf2] = "jon";
console.log(a[buf1]); //output jon
uj5u.com熱心網友回復:
a[buf2]相當于a[buf2.toString()], 相當于a[buf2.toString('utf-8')], 這是您的問題的原因:您的緩沖區不保存有效的 UTF-8 資料,因此在轉換為 UTF-8 字串時,無效的代碼點被替換為 Unicode 替換字符, U FFFD(在 UTF-8 中編碼為 0xEF 0xBF 0xBD)。
為了顯示這一點,您可以運行以下代碼:
console.log('buf1', Buffer.from(buf1.toString()).toString('hex'));
console.log('buf2', Buffer.from(buf2.toString()).toString('hex'));
結果是每個緩沖區的十六進制表示,因為它用作屬性“名稱”(替換字符突出顯示):
buf1 0a212d4d0a212eefbfbdefbfbdefbfbd05efbfbd
^^^^^^^^^^^^^^^^^^ ^^^^^^
buf2 0a212d4d0a212eefbfbdefbfbdefbfbd05efbfbd
如您所見,它們是等價的。
uj5u.com熱心網友回復:
a[buf2] = "jon";和 完全一樣a['[object: Object]'] = "jon";,因為 object 的 key 必須是 a string,如果不是string,則使用方法將其轉換為字串toString。
你想做的是:
var buf1 = Buffer.from([
10,
33,
45,
77,
10,
33,
46,
166,
140,
190,
5,
241
]);
var buf2 = new Buffer.from([
10,
33,
45,
77,
10,
33,
46,
168,
215,
216,
5,
241
]);
let a = {};
a['buf2'] = "jon";
console.log(a[buf1]); //outputs undefined
console.log(a['buf2']); // outputs "jon"
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/497754.html
標籤:javascript
上一篇:非閏月2月份的JS問題
