javascript学习笔记

ab2str()和str2ab()

ab2str(buf)的参数是ArrayBuffer或者类型类数组,转换的结果是String

function ab2str(buf) {
		/*Int8Array:8位有符号整数,长度1个字节。
		Uint8Array:8位无符号整数,长度1个字节。
		Int16Array:16位有符号整数,长度2个字节。
		Uint16Array:16位无符号整数,长度2个字节。
		Int32Array:32位有符号整数,长度4个字节。
		Uint32Array:32位无符号整数,长度4个字节。
		Float32Array:32位浮点数,长度4个字节。
		Float64Array:64位浮点数,长度8个字节。*/
		return String.fromCharCode.apply(null, new Uint8Array(buf));
	}
str2ab(str)的参数是String,转换的结果是ArrayBuffer
function str2ab(str) {
	    var buf = new ArrayBuffer(str.length*2); // 每个字符占用2个字节
	    var bufView = new Uint8Array(buf);
	    for (var i=0, strLen=str.length; i<strLen; i++) {
	         bufView[i] = str.charCodeAt(i);
	    }
	    return buf;
	}
asmCrypto.RSA_OAEP_SHA256.decrypt()的解密结果类型是Uint8array
asmCrypto.RSA_OAEP_SHA256.decrypt()解密出来的明文不正确,总是少几个字节:
原因是送入的参数filekey,和iv不正确

调用第三方函数时,如果其返回值类型是Uint8array,不要在程序中使用Uint8array.buffer.

因为该Uint8array对象有可能是某个ArrayBuffer对象上的视图,Uint8array.buffer.byteLength不等于Uint8array.byteLength

Uint8Array的set 方法

uint8Array.set(index, value);
uint8Array.set(array, offset);
index
要设置的位置的索引。
value
要设置的值。
array
要设置的值的类型化或非类型化数组。
offset
要写入的值在当前数组中的位置的索引。备注

如果输入数组为 TypedArray,则两个数组可以使用相同的基础 ArrayBuffer。在此情况下,设置值时,就好像先将所有数据复制到未与任一数组重叠的临时缓冲区,然后再将临时缓冲区中的数据复制到当前数组中一样。

如果偏移量加上给定数组的长度超出当前 TypedArray 的范围,则将引发异常。

使用worker时报错

Failed to execute 'postMessage' on 'Worker': Value at index 0 is an untransferable 'undefined' value

原因是传递给postMessage的第二个参数不正确。postMessage的用法

var message = {foo: 'abc', bar: new Uint8Array(...)};

worker.postMessage(message, [message.bar.buffer])

注意第二个参数[]里面不能是类型化数组,必须是ArrayBuffer类型

局部函数访问全局变量

经常遇到一个js文件,使用一个函数作为命名空间。在此命名空间内定义了一些全局变量,函数,函数内的局部变量。命名空间内定义函数时可以使用全局变量,而且全局变量不必已经初始化。全局变量可以在任意一个函数内初始化。但是,一定注意,初始化时全局变量名前一定不能再加var关键字。(加了var的话,就定义了一个同名的局部变量,没有被初始化全局变量。这样的话,执行命名空间内的函数时全局变量是undefined.)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值