man*_*ish 4 javascript arraybuffer
想要在其中存储一个json对象 ArrayBuffer
function stringToUint(string) {
var string = btoa(unescape(encodeURIComponent(string))),
charList = string.split(''),
uintArray = [];
for (var i = 0; i < charList.length; i++) {
uintArray.push(charList[i].charCodeAt(0));
}
return new Uint8Array(uintArray);
}
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(atob(encodedString)));
return decodedString;
}
var str = {'x':'aaaa'},
enc = stringToUint(str),
dec = uintToString(enc);
console.log(dec.x);
Run Code Online (Sandbox Code Playgroud)
console.log(dec.x);正在打印`未定义。我做错了吗?这是jsfiddle http://jsfiddle.net/DQJyX/137/
因为stringToUint需要一个字符串,并将一个对象传递给它,将转换为{'x':'aaaa'},[Object object]并返回一个表示该对象对象的数组,因此在调用时uintToString,该数组会转换回[Object object]。
一个简单的解决方案是在JSON.stringify将对象传递给函数之前使用该对象,然后使用JSON.parse转换为原始对象。
function stringToUint(string) {
var string = btoa(unescape(encodeURIComponent(string))),
charList = string.split(''),
uintArray = [];
for (var i = 0; i < charList.length; i++) {
uintArray.push(charList[i].charCodeAt(0));
}
return new Uint8Array(uintArray);
}
function uintToString(uintArray) {
var encodedString = String.fromCharCode.apply(null, uintArray),
decodedString = decodeURIComponent(escape(atob(encodedString)));
return decodedString;
}
var str = {'x':'aaaa'},
enc = stringToUint(JSON.stringify(str)),
dec = JSON.parse(uintToString(enc));
document.write(dec.x);Run Code Online (Sandbox Code Playgroud)