javascript中打印对象显示[object object]_扒一扒JavaScript中不常见的一些object

前言

今天仔细阅读了MDN的这篇guide:Using XMLHttpRequest,在里面发现了好多以前听都没听过的概念,尤其是那些不为人知的Object,所以在这里特地把它们拎出来讲一下,不求多深入,只想粗略了解一下。

1、ArrayBuffer

为什么需要这么一种数据类型呢?众所周知,Array对象可以动态变化长度并且可以包含任意类型的JS值。JS引擎对其优化以便可以让这些数组执行起来很快。但是随着web应用变得越来越强大,添加一些诸如音视频的操作特性,使用WebSockets访问原始数据等等和底层有关的行为时,就会发现如果JS能够直接快速且简单地操作原始数据那是相当有用的,于是就产生了ArrayBuffer这样的数据类型。

ArrayBuffer对象用于表示一个通用的固定长度原始二进制数据缓存。你不能直接操作ArrayBuffer的内容。但是你可以使用特定的格式来创建typed array objects或DataView对象以表示这种类型的buffer,然后就可以用来读或者写缓存的内容。那么什么是typed array objectsDataView

1.1、DataView

DataView 视图提供一个底层接口来读取和写入多种数据类型到一个ArrayBuffer中去而忽略平台的大小端。

语法

new DataView(buffer [, byteOffset [, byteLength]])
  1. buffer:一个已存在的ArrayBuffer,用来存储新的DataView对象的;
  2. byteOffset:以字节为单位,新视图存放在相对于指定buffer的第一个字节的偏移。如果没有指定,那么buffer的视图将会从第一个字节开始。
  3. byteLength:字节数组的长度。如果没有指定,视图的长度将会匹配buffer的长度。

该对象提供了众多的方法来读写整形8/16/32比特的有符号整数或者无符号整数以及32/64比特的浮点数,比如:

var buffer = new ArrayBuffer(16); // 创建一个16字节的ArrayBuffer
// 创建一个DataView的对象,放在上面创建的buffer中,偏移为0,
// 也就是在上述buffer中的头部
var dv = new DataView(buffer, 0); 

// 以小端形式写入一个有符号的16比特的整数到视图中去
dv.setInt16(0, 42, true);
// 以大端形式读取
dv.setInt16(0, 42);
// 以小端形式读取
dv.setInt16(0, 42, true);

大家知道第一个读取的结果和第二个结果是什么吗?答案是:1075242。原因其实很简单的:

42的二进制是:00000000 00101010,如果是小端形式写入buffer的话,那么假设写入到的内存地址是0x10000000(32bit的系统):

内存地址:低-------------------------------------高

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值