mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2026-02-28 01:58:28 +08:00
语法高亮,滚动条美化,设置页面调整
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
<div><iframe class="interactive interactive-js" frameborder="0" height="250" src="https://interactive-examples.mdn.mozilla.net/pages/js/dataview-constructor.html" width="100%"></iframe></div>
|
||||
<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a class="external" href="https://github.com/mdn/interactive-examples" rel="noopener">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
|
||||
<h2 id="语法">语法</h2>
|
||||
<pre class="syntaxbox">new DataView(buffer [, byteOffset [, byteLength]])</pre>
|
||||
<pre><code class="language-javascript">new DataView(buffer [, byteOffset [, byteLength]])</code></pre>
|
||||
<h3 id="参数">参数</h3>
|
||||
<dl>
|
||||
<dt><code>buffer</code></dt>
|
||||
@@ -28,16 +28,16 @@
|
||||
<h2 id="描述">描述</h2>
|
||||
<h3 id="Endianness(字节序)">Endianness(字节序)</h3>
|
||||
<p>需要多个字节来表示的数值,在存储时其字节在内存中的相对顺序依据平台架构的不同而不同,参照 <a class="glossaryLink" href="/en-US/docs/Glossary/Endianness" title='Endianness: "Endian" and "endianness" (or "byte-order") describe how computers organize the bytes that make up numbers.'>Endianness</a>。而使用 DataView 的访问函数时不需要考虑平台架构中所使用的是哪种字节序。</p>
|
||||
<pre class="brush: js"><code>var littleEndian = (function() {
|
||||
<pre><code class="language-javascript"><code>var littleEndian = (function() {
|
||||
var buffer = new ArrayBuffer(2);
|
||||
new DataView(buffer).setInt16(0, 256, true /* 设置值时,使用小端字节序 */);
|
||||
// Int16Array 使用系统字节序(由此可以判断系统字节序是否为小端字节序)
|
||||
return new Int16Array(buffer)[0] === 256;
|
||||
})();
|
||||
console.log(littleEndian); // 返回 true 或 false</code></pre>
|
||||
console.log(littleEndian); // 返回 true 或 false</code></code></pre>
|
||||
<h3 id="64-bit_Integer_Values(64位整数)">64-bit Integer Values(64位整数)</h3>
|
||||
<p>因为JavaScript目前不包括对64位整数值的标准支持,所以<code>DataView</code>不提供本机64位操作。作为解决方法,您可以实现自己的<code>getUint64()</code>函数,以获得精度高达<a href="Reference/Global_Objects/Number/MAX_SAFE_INTEGER" title="Number.MAX_SAFE_INTEGER 常量表示在 JavaScript 中最大的安全整数(maxinum safe integer)(253 - 1)。"><code>Number.MAX_SAFE_INTEGER</code></a>的值,可以满足某些特定情况的需求。</p>
|
||||
<pre class="brush: js">function getUint64(dataview, byteOffset, littleEndian) {
|
||||
<pre><code class="language-javascript">function getUint64(dataview, byteOffset, littleEndian) {
|
||||
// split 64-bit number into two 32-bit (4-byte) parts
|
||||
const left = dataview.getUint32(byteOffset, littleEndian);
|
||||
const right = dataview.getUint32(byteOffset+4, littleEndian);
|
||||
@@ -50,9 +50,9 @@ console.log(littleEndian); // 返回 true 或 false</code></pre>
|
||||
|
||||
return combined;
|
||||
}
|
||||
</pre>
|
||||
</code></pre>
|
||||
<p>或者,如果需要填满64位,可以创建一个<a href="Reference/Global_Objects/BigInt" title="在JavaScript中,Number 可以准确表达的最大数字是253,比253大的所有数字可以使用BigInt表达。"><code>BigInt</code></a>。</p>
|
||||
<pre class="brush: js">function getUint64BigInt(dataview, byteOffset, littleEndian) {
|
||||
<pre><code class="language-javascript">function getUint64BigInt(dataview, byteOffset, littleEndian) {
|
||||
// split 64-bit number into two 32-bit (4-byte) parts
|
||||
const left = dataview.getUint32(byteOffset, littleEndian);
|
||||
const right = dataview.getUint32(byteOffset + 4, littleEndian);
|
||||
@@ -63,7 +63,7 @@ console.log(littleEndian); // 返回 true 或 false</code></pre>
|
||||
left.toString(16) + right.toString(16).padStart(8, '0');
|
||||
|
||||
return BigInt(`0x${combined}`);
|
||||
}</pre>
|
||||
}</code></pre>
|
||||
<h2 id="属性">属性</h2>
|
||||
<p>所有 <code>DataView</code> 实例都继承自 <a href="Reference/Global_Objects/DataView/prototype" title="DataView.prototype 表示DataView的原型"><code>DataView.prototype</code></a>并且允许向 DataView 对象中添加额外属性。</p>
|
||||
<div><dl>
|
||||
@@ -116,12 +116,12 @@ console.log(littleEndian); // 返回 true 或 false</code></pre>
|
||||
<dd><code>从</code><a href="Reference/Global_Objects/DataView" title="DataView 视图是一个可以从 ArrayBuffer 对象中读写多种数值类型的底层接口,在读写时不用考虑平台字节序问题。"><code>DataView</code></a>起始位置以byte为计数的指定偏移量(byteOffset)处储存一个64-bit数(双精度浮点型).</dd>
|
||||
</dl></div>
|
||||
<h2 id="示例">示例</h2>
|
||||
<pre class="brush: js">var buffer = new ArrayBuffer(16);
|
||||
<pre><code class="language-javascript">var buffer = new ArrayBuffer(16);
|
||||
var dv = new DataView(buffer, 0);
|
||||
|
||||
dv.setInt16(1, 42);
|
||||
dv.getInt16(1); //42
|
||||
</pre>
|
||||
</code></pre>
|
||||
<h2 id="规范">规范</h2>
|
||||
<table class="standard-table">
|
||||
<tbody>
|
||||
@@ -1113,10 +1113,10 @@ dv.getInt16(1); //42
|
||||
</abbr></span></dt><dd>Compatibility unknown</dd></dl></section></div><p></p>
|
||||
<h2 id="兼容性提示">兼容性提示</h2>
|
||||
<p>从 FireFox 40 开始, DataView 对象需要通过 <a href="Reference/Operators/new" title="new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。"><code>new</code></a> 操作符来构造。如果不使用 <code>new</code> 而是直接将 <code>DataView()</code> 作为函数调用<font face="Consolas, Liberation Mono, Courier, monospace">的话会</font>抛出 <a href="Reference/Global_Objects/TypeError" title="TypeError(类型错误) 对象用来表示值的类型非预期类型时发生的错误。"><code>TypeError</code></a> 异常。</p>
|
||||
<pre class="brush: js example-bad">var dv = DataView(buffer, 0);
|
||||
<pre><code class="language-js example-bad">var dv = DataView(buffer, 0);
|
||||
// 抛出异常,错误信息为:禁止不用new直接调用DataView的构造函数。
|
||||
// TypeError: calling a builtin DataView constructor without new is forbidden</pre>
|
||||
<pre class="brush: js example-good">var dv = new DataView(buffer, 0);</pre>
|
||||
// TypeError: calling a builtin DataView constructor without new is forbidden</code></pre>
|
||||
<pre><code class="language-js example-good">var dv = new DataView(buffer, 0);</code></pre>
|
||||
<h2 id="相关链接">相关链接</h2>
|
||||
<ul>
|
||||
<li><a class="external link-https" href="https://github.com/jDataView/jDataView" rel="noopener">jDataView</a>:DataView 的垫片(polyfill)库,使其能够用于所有浏览器及 Node.js 环境。同时,该库还对 DataView 进行了一些扩展。</li>
|
||||
|
||||
Reference in New Issue
Block a user