2014-09-24 83 views
-1

这是什么代码在做什么?这是什么JS代码做

var buf = new ArrayBuffer(fileContent.length); 
var view = new Uint8Array(buf); 
for (var i=0; i!=fileContent.length; ++i) 
    view[i] = fileContent.charCodeAt(i) & 0xFF; 

在FileSaver.js

saveAs(new Blob([buf],{type:""}), filename); 

的功能方面,我不能让这个代码的整个目标(除了最后一个字符串,即节省了BUF),不能让我们为什么要改变鉴于如果我们节约BUF,以及如何为视图对应于BUF,什么是fileContent.charCodeAt(I)&为0xFF命令的意思是?

+0

*你知道Javascript吗?你知道'&0xFF'这个符号的含义吗? 'charcodeAt()'做了什么? – usr2564301 2014-09-24 18:41:01

+0

首先查看MDN上的不同方法,[这里是Uint8Arrays](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array)等。阅读他们的工作,对它们进行测试,并试图弄明白,你会在这里学到一些东西。 – adeneo 2014-09-24 18:42:11

+0

@Jongware'Barmar'在下面回答了一些问题。我不知道'&0xFF'的逻辑意义是什么? – user1448906 2014-09-30 19:47:06

回答

2

charCodeAt(i)获取fileContent字符串的i字符,并将其字符代码作为数字返回。 & 0xFF在该数字与十六进制数字0xFF之间执行二进制AND操作;掩盖它到低8位。然后将该8位数字存入view[i]

所以这整个事情本质上是从fileContentbuf复制字符串,但剥离任何高阶位获得8位字符。

这里的显式掩码并不是必须的。分配给Uint8Array自动分配模256的值。

+0

问题。 Javascript与其他语言有什么不同,事实上可以在一个定义为'Uint8Array'的数组中存储一个非8位值? – usr2564301 2014-09-24 18:49:08

+0

谢谢,但是这段代码的整个目标是什么?如果我们改变'view'数组,'buf'数组是如何改变的?具有0xFF的二进制AND逻辑的含义是什么? – user1448906 2014-09-30 19:45:22

+1

'AND'与'0xFF'返回低8位。即它会丢弃多字节字符的高位。即这是将字符串转换为8位ASCII码。 – Barmar 2014-10-01 04:38:00