2014-09-24 119 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