是类型化数组(Typed Array)也是HTML5中新引入的API。用一句话解释类型化数组就是:它是JS操作二进制数据的接口。 众所周知,直接操作二进制数据可以使程序更为高效, 尽管JS对常规数组做了很多优化(JS数组被实现为对象形式),但是不得不承认JS数组的效率一直不高。比如在WebGL中的图像数据传输, 如果使用原生的JS数组, 浏览器在与显卡通信时,必须将它转换为二进制形式,这一步较为耗时。正是因为有大量二进制数据的操作需求,所以ArrayBuffer应运而生。在Canvas(可参考本人canvas笔记canvas的基本原理)中,使用 getImageDate()方法所返回的 ImageData对象就是一个类数组对象,HTML标准中称其为 CanvasPixelArray,它除了在值的处理方式上与 ArrayBuffer中视图类型 Unit8Array有点区别外,其他都一样( Unit8Array只能处理0-255的数字,而 CanvasPixelArray可以处理更多)
对于刚接触类型化数组的概念看到这可能还是云里雾里,下面将逐一将我所理解的ArrayBuffer中的关键概念做个整理:
视图(View)
大多数资料中对于视图都是一句带过,比如这篇博客中( ArrayBuffer:类型化数组)对于视图的解释就是:
ArrayBuffer作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式,这就叫做“视图”。
当我刚看到上面的解释,还是无法体会“视图”的含义,暂且把ArrayBuffer的概念放一边, 想象一下,既然是操作二进制数据的接口,那么该如何操作他们呢, 比如8位二进制数1是 00000001,我们肯定不会使用原始的二进制编程,那么当我们操作这个 1时,肯定是以 1的形式操作, 那么这里的 1就是视图(view)了, 视图可以理解为方便理解的二进制数据。如果知道C语言,对于这个概念就不难把握了,比如C语言中的字符串实际是数字,那么这里的字符串也可以理解为“视图”。其实这里的视图就是类型化数组。
ArrayBuffer的概念
ArrayBuffer是一段不透明的内存区域(所谓不透明,就是无法直接操作的数据块),单位是字节(Byte)也就是8位,它的 byteLength属性返回其内存大小。在JS中,通过构造函数的形式申明一段ArrayBuffer区域:
var a = new ArrayBuffer(10)a.byteLength // =>10
在这段内存区域上,可以使用不同的视图来创建任意数量的类型化数组, 这些类型化数组也可以是重叠的。有八种不同的类型化数组(视图),分别为:
-
Int8Array:8位有符号整数,长度1个字节。
-
Uint8Array:8位无符号整数,长度1个字节。
-
Int16Array:16位有符号整数,长度2个字节。
-
Uint16Array:16位无符号整数,长度2个字节。
-
Int32Array:32位有符号整数,长度4个字节。
-
Uint32Array:32位无符号整数,长度4个字节。
-
Float32Array:32位浮点数,长度4个字节。
-
Float64Array:64位浮点数,长度8个字节。
这里引用这篇博客中( JavaScript中的ArrayBuffer详细介绍)的例子来解释ArrayBuffer区域中出现的重叠现象:
var buffer = new ArrayBuffer(12)var x = new Float32Array(buffer, 0, 2)var y = new Float32Array(buffer, 4, 1)x[1] = 7;console.log(y[0]); // 7
原文中作者的解释过于简单。这里的 y[0]之所以为7,是因为在 buffer这段12个字节的内存区域中,申明来一个从0字节开始,长度为2的32位浮点数 x(也就是说x占了前8个字节),再申明一个从第 4个字节开始,长度为1的32位浮点数 y,那么这里的 y与 x实际上就是重叠的, x已经占了8个字节,而 y是从第4个字节开始的。既然是重叠的,那么改变 x势必会影响到 y,这里 x类型化数组的第一个元素赋值为7,那么在ArrayBuffer中即是 00000000 00000000 00000000 00000111而 y是从第四个字节开始,也就是从 00000111开始, 所以 y也是 00000111也就是7了。
类型化数组与常规数组的区别
类型化数组实质上是二进制数据,而ArrayBuffer这段区域又是指定长度的,基于这些便可推出其与常规数组的区别:
-
类型化数组元素都是数字,它不像JS常规数组那样可以参杂不同类型,比如下面例子:chestnut:中的赋值就是无效的
-
类型化数组长度固定
-
所有元素初始化为0
var a = new Int8Array(3)a[0] = 'hello'a[0] // =>0 显示a[0]依然未定义a[0] = '8'a[0] // = > 8 但是注意类型的自动转换,当可被转换成数字时,JS会自动将其转成数值
DataView
既然本质是在操作二进制数据,那么就涉及到“高位优先”还是“低位优先”的数据传输问题……
今天太晚啦,明天接着码,未完待续~

HTML的未来将朝着更加语义化、功能化和模块化的方向发展。1)语义化将使标签更明确地描述内容,提升SEO和无障碍访问。2)功能化将引入新元素和属性,满足用户需求。3)模块化将支持组件化开发,提高代码复用性。

htmlattributesarecrucialinwebdevelopment forcontrollingBehavior,外观和功能

alt属性是HTML中标签的重要部分,用于提供图片的替代文本。1.当图片无法加载时,alt属性中的文本会显示,提升用户体验。2.屏幕阅读器使用alt属性帮助视障用户理解图片内容。3.搜索引擎索引alt属性中的文本,提高网页的SEO排名。

HTML、CSS和JavaScript在网页开发中的作用分别是:1.HTML用于构建网页结构;2.CSS用于美化网页外观;3.JavaScript用于实现动态交互。通过标签、样式和脚本,这三者共同构筑了现代网页的核心功能。

设置标签的lang属性是优化网页可访问性和SEO的关键步骤。1)在标签中设置lang属性,如。2)在多语言内容中,为不同语言部分设置lang属性,如。3)使用符合ISO639-1标准的语言代码,如"en"、"fr"、"zh"等。正确设置lang属性可以提高网页的可访问性和搜索引擎排名。

htmlattributeseresene forenhancingwebelements'functionalityandAppearance.TheyAdDinformationTodeFineBehavior,外观和互动,使网站互动,响应式,visalalyAppealing.AttributesLikutesLikeSlikEslikesrc,href,href,href,类,类型,类型,和dissabledtransfransformformformformformformformformformformformformformformforment

toCreateAlistinHtml,useforforunordedlistsandfororderedlists:1)forunorderedlists,wrapitemsinanduseforeachItem,RenderingeringAsabulleTedList.2)fororderedlists,useandfornumberedlists,useandfornumberedlists,casundfornumberedlists,customeizableWithTheTtheTthetTheTeTeptTributeFordTributeForderForderForderFerentNumberingSnumberingStyls。

HTML用于构建结构清晰的网站。1)使用标签如、、定义网站结构。2)示例展示了博客和电商网站的结构。3)避免常见错误如标签嵌套不正确。4)优化性能通过减少HTTP请求和使用语义化标签。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器