recursal/MDN huggingface dataset:
WritableStreamDefaultWriter()
=============================

**`WritableStreamDefaultWriter()`** 构造函数创建一个新的 `WritableStreamDefaultWriter` 对象实例。

**备注：** 你通常不需要手动创建，可以使用 `WritableStream.getWriter()` 方法代替。

语法
--


```js
new WritableStreamDefaultWriter(stream)
```

### 参数

`stream`

需要写入的 `WritableStream`。

### 返回值

一个 `WritableStreamDefaultWriter` 对象实例。

### 异常

`TypeError`

提供的 `stream` 并不是一个 `WritableStream`，或者他已经被另一个 writer 锁定。

示例
--

下面的例子说明了这个接口的几个功能。它展示了使用自定义接收器和由 API 提供的队列策略创建的 `WritableStream`。然后它调用一个 `sendMessage()` 的函数，传递新创建的流和一个字符串。在这个函数内部，它调用流的 `getWriter()` 方法，该方法返回一个 `WritableStreamDefaultWriter` 实例。`forEach()` 用于将字符串的每个分块写入流。最后，`write()` 和 `close()` 方法都会返回 promise，promise 的状态由对应的操作是否成功来决定。


```js
const list = document.querySelector("ul");
function sendMessage(message, writableStream) {
  // defaultWriter is of type WritableStreamDefaultWriter
  const defaultWriter = writableStream.getWriter();
  const encoder = new TextEncoder();
  const encoded = encoder.encode(message, { stream: true });
  encoded.forEach((chunk) => {
    defaultWriter.ready
      .then(() => {
        return defaultWriter.write(chunk);
      })
      .then(() => {
        console.log("Chunk written to sink.");
      })
      .catch((err) => {
        console.log("Chunk error:", err);
      });
  });
  // Call ready again to ensure that all chunks are written
  // before closing the writer.
  defaultWriter.ready
    .then(() => {
      defaultWriter.close();
    })
    .then(() => {
      console.log("All chunks written");
    })
    .catch((err) => {
      console.log("Stream error:", err);
    });
}
const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
  {
    // Implement the sink
    write(chunk) {
      return new Promise((resolve, reject) => {
        var buffer = new ArrayBuffer(1);
        var view = new Uint8Array(buffer);
        view[0] = chunk;
        var decoded = decoder.decode(view, { stream: true });
        var listItem = document.createElement("li");
        listItem.textContent = "Chunk decoded: " + decoded;
        list.appendChild(listItem);
        result += decoded;
        resolve();
      });
    },
    close() {
      var listItem = document.createElement("li");
      listItem.textContent = "[MESSAGE RECEIVED] " + result;
      list.appendChild(listItem);
    },
    abort(err) {
      console.log("Sink error:", err);
    },
  },
  queuingStrategy,
);
sendMessage("Hello, world.", writableStream);
```


你可以在我们的简单的 writer 示例找到完整代码。

规范
--

| Specification |
| --- |
| Streams Standard # ref-for-default-writer-constructor① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
WritableStreamDefaultWriter.write()
===================================

`WritableStreamDefaultWriter` 接口的 **`write()`** 方法将传递的数据块写入 `WritableStream` 和它的底层接收器，然后返回一个 `Promise`，promise 的状态由写入操作是否成功来决定。

请注意，“成功”的含义取决于底层接收器；它可能表示该分块已被接收，但不一定安全地保存到它最终的目的地。

语法
--


```js
write(chunk)
```

### 参数

`chunk`

要传递给 `WritableStream` 的二进制数据块。

### 返回值

一个 `Promise`，成功写入后使用 `undefined` 兑现，如果在写入过程开始之前写入失败或者流出错，则拒绝。

### 异常

`TypeError`

目标流不是一个可写流，或者它没有所有者。

示例
--

下面的例子说明了这个接口的几个功能。它展示了使用自定义接收器和由 API 提供的队列策略创建的 `WritableStream`。然后它调用一个 `sendMessage()` 的函数，传递新创建的流和一个字符串。在这个函数内部，它调用流的 `getWriter()` 方法，该方法返回一个 `WritableStreamDefaultWriter` 实例。`forEach()` 用于将字符串的每个分块写入流。最后，`write()` 和 `close()` 方法都会返回 promise，promise 的状态由对应的操作是否成功来决定。


```js
const list = document.querySelector("ul");

function sendMessage(message, writableStream) {
  // defaultWriter is of type WritableStreamDefaultWriter
  const defaultWriter = writableStream.getWriter();
  const encoder = new TextEncoder();
  const encoded = encoder.encode(message, { stream: true });
  encoded.forEach((chunk) => {
    defaultWriter.ready
      .then(() => {
        return defaultWriter.write(chunk);
      })
      .then(() => {
        console.log("Chunk written to sink.");
      })
      .catch((err) => {
        console.log("Chunk error:", err);
      });
  });
  // Call ready again to ensure that all chunks are written
  // before closing the writer.
  defaultWriter.ready
    .then(() => {
      defaultWriter.close();
    })
    .then(() => {
      console.log("All chunks written");
    })
    .catch((err) => {
      console.log("Stream error:", err);
    });
}

const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
  {
    // Implement the sink
    write(chunk) {
      return new Promise((resolve, reject) => {
        var buffer = new ArrayBuffer(1);
        var view = new Uint8Array(buffer);
        view[0] = chunk;
        var decoded = decoder.decode(view, { stream: true });
        var listItem = document.createElement("li");
        listItem.textContent = "Chunk decoded: " + decoded;
        list.appendChild(listItem);
        result += decoded;
        resolve();
      });
    },
    close() {
      var listItem = document.createElement("li");
      listItem.textContent = "[MESSAGE RECEIVED] " + result;
      list.appendChild(listItem);
    },
    abort(err) {
      console.log("Sink error:", err);
    },
  },
  queuingStrategy,
);

sendMessage("Hello, world.", writableStream);
```


你可以在我们的简单的 writer 示例找到完整代码。

规范
--

| Specification |
| --- |
| Streams Standard # ref-for-default-writer-write①② |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
WritableStreamDefaultWriter.close()
===================================

`WritableStreamDefaultWriter` 接口的 **`close()`** 方法用于关闭关联的可写流。

在调用关闭行为之前，底层的接收器将完成对所有先前写入的分块的处理。在此期间，任何进一步的尝试写入都将失败（不会导致流出错）。

语法
--


```js
close()
```

### 参数

无。

### 返回值

一个 `Promise`，如果所有剩余的分块在关闭之前成功写入，则使用 `undefined` 兑现，如果在此过程中遇到问题，则拒绝并返回相关错误。

### 异常

`TypeError`

它尝试关闭的流不是一个 `WritableStream`。

示例
--

下面的例子说明了这个接口的几个功能。它展示了使用自定义接收器和由 API 提供的队列策略创建的 `WritableStream`。然后它调用一个 `sendMessage()` 的函数，传递新创建的流和一个字符串。在这个函数内部，它调用流的 `getWriter()` 方法，该方法返回一个 `WritableStreamDefaultWriter` 实例。`forEach()` 用于将字符串的每个分块写入流。最后，`write()` 和 `close()` 方法都会返回 promise，promise 的状态由对应的操作是否成功来决定。


```js
const list = document.querySelector("ul");

function sendMessage(message, writableStream) {
  // defaultWriter is of type WritableStreamDefaultWriter
  const defaultWriter = writableStream.getWriter();
  const encoder = new TextEncoder();
  const encoded = encoder.encode(message, { stream: true });
  encoded.forEach((chunk) => {
    defaultWriter.ready
      .then(() => {
        return defaultWriter.write(chunk);
      })
      .then(() => {
        console.log("Chunk written to sink.");
      })
      .catch((err) => {
        console.log("Chunk error:", err);
      });
  });
  // Call ready again to ensure that all chunks are written
  // before closing the writer.
  defaultWriter.ready
    .then(() => {
      defaultWriter.close();
    })
    .then(() => {
      console.log("All chunks written");
    })
    .catch((err) => {
      console.log("Stream error:", err);
    });
}

const decoder = new TextDecoder("utf-8");
const queuingStrategy = new CountQueuingStrategy({ highWaterMark: 1 });
let result = "";
const writableStream = new WritableStream(
  {
    // Implement the sink
    write(chunk) {
      return new Promise((resolve, reject) => {
        var buffer = new ArrayBuffer(1);
        var view = new Uint8Array(buffer);
        view[0] = chunk;
        var decoded = decoder.decode(view, { stream: true });
        var listItem = document.createElement("li");
        listItem.textContent = "Chunk decoded: " + decoded;
        list.appendChild(listItem);
        result += decoded;
        resolve();
      });
    },
    close() {
      var listItem = document.createElement("li");
      listItem.textContent = "[MESSAGE RECEIVED] " + result;
      list.appendChild(listItem);
    },
    abort(err) {
      console.log("Sink error:", err);
    },
  },
  queuingStrategy,
);

sendMessage("Hello, world.", writableStream);
```


你可以在我们的简单的 writer 示例找到完整代码。

规范
--

| Specification |
| --- |
| Streams Standard # ref-for-default-writer-close⑦ |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
WritableStreamDefaultWriter.abort()
===================================

`WritableStreamDefaultWriter` 接口的 **`abort()`** 方法用于中止流，表示生产者不能再向流写入数据（会立刻返回一个错误状态），并丢弃所有已入队的数据。

如果 writer 处于活动状态，则 `abort()` 方法的行为与关联流（`WritableStream.abort()`）的行为相同。如果不是，则返回一个被拒绝的 promise。

语法
--


```js
abort()
abort(reason)
```

### 参数

`reason` 可选

一个字符串，用于提供人类可读的中止原因。

### 返回值

一个 `Promise`，会在成功时用给定的 reason 参数兑现。

### 异常

`TypeError`

它尝试中止的流不是一个 `WritableStream`，或者它已被锁定。

示例
--


```js
const writableStream = new WritableStream({
  write(chunk) {
    ...
  },
  close() {
    ...
  },
  abort(err) {
    ...
  }
}, queuingStrategy);

...

const writer = writableStream.getWriter();

...

// abort the stream when desired
writer.abort.then((reason) => {
  console.log(reason);
})
```

规范
--

| Specification |
| --- |
| Streams Standard # ref-for-default-writer-abort④ |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
DocumentFragment.querySelector()
================================

**`DocumentFragment.querySelector()`** 方法返回第一个在 `DocumentFragment` 中的、符合选择器的元素。其使用深度优先，前序遍历规则遍历文档中的节点。如果没有匹配结果，返回 `null` 。

如果选择器中指定了 ID 而这个 ID 在当前文档（document）被错误地使用了多次，则返回第一个匹配的元素。

如果选择器无效，将抛出一个带有 `SYNTAX_ERR` 值的 `DOMException` 异常。

语法
--
```

element = documentfragment.querySelector(selectors);
```

### 参数

*selectors*

为一个 `DOMString`，其包含一个或多个 CSS 选择器，多个选择器用逗号隔开。

例子
--

### 基本示例

在该示例中，将返回第一个位于 `DocumentFragment` 的带有 "`myclass`" 类的元素。


```js
var el = documentfragment.querySelector(".myclass");
```

### CSS 语法和方法的参数问题

传递给 `querySelector` 的字符串参数遵循 CSS 语法。如果 ID 或选择器不符合 CSS 语法 (比如使用了半角分号和空格)，必须使用双反斜杠对字符做转义。


```html
<div id="foo\bar"></div>
<div id="foo:bar"></div>

<script>
 document.querySelector("#foo\bar"); // 啥也不匹配
 document.querySelector("#foo\\\\bar"); // 第一个 DIV
 document.querySelector("#foo:bar"); // 啥也不匹配
 document.querySelector("#foo\\:bar"); // 第二个 DIV
</script>
```

标准
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-parentnode-queryselector① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参考
--

* `DocumentFragment` 接口
DocumentFragment.querySelectorAll()
===================================

DocumentFragment.queryselectorall() 方法返回`NodeList`中的元素`DocumentFragment`(使用文档节点的深度优先顺序遍历) 匹配指定的选择器组。

如果参数中指定的选择器无效，则会引发一个带 SYNTAX\_ERR 值的`DOMException`。

**备注：** 这个 API 的定义被移动到`ParentNode`接口。

语法
--
```

elementList = documentframgment.querySelectorAll(selectors);
```

### 参数

*selectors*

是一个`DOMString`包含一个或多个用逗号分隔的 CSS 选择器。

示例
--

此示例返回 DocumentFragment 中所有 div 元素的列表，其中包含一个类“note”或“alert”:


```js
var matches = documentfrag.querySelectorAll("div.note, div.alert");
```

规范
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-parentnode-queryselectorall① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参阅
--

* 它所属的`DocumentFragment`接口。
DocumentFragment()
==================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`DocumentFragment()`** 构造函数返回一个新创建的 `DocumentFragment` 对象。

语法
--
```

fragment = new DocumentFragment()
```

示例
--


```js
fragment = new DocumentFragment();
```

标准
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-documentfragment-documentfragment① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* DOM 接口索引 (en-US)
HTMLDataElement.value
=====================

`HTMLDataElement` (en-US) 接口的 **`value`** 属性返回反映 `value` HTML 属性的`DOMString` 。

Syntax
------
```

var aValue = htmlDataElement.value
htmlDataElement.value = aValue
```

### Value

A `DOMString`.

Specifications
--------------

| Specification |
| --- |
| HTML Standard # dom-data-value |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Comment()
=========

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

构造函数 **`Comment()`** 创建一个 `Comment` 对象并返回，这个对象以可选的 `DOMString` 参数作为它的文本内容。

语法
--
```

comment1 = new Comment(); // Create an empty comment
comment2 = new Comment("This is a comment");
```

示例
--


```js
var comment = new Comment("Test");
```

规范
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-comment-comment① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**备注：** 对于不支持本构造函数的浏览器， `Document.createComment()` 或许可以使用。

相关文档
----

* The DOM interfaces index (en-US)
HTMLLinkElement.referrerPolicy
==============================

**`HTMLLinkElement.referrerPolicy`** 反映了 `<link>` 元素的 HTML 属性 `referrerpolicy`，这个属性定义了 `<link>` 元素在获取资源时的引用方式。

详情请参考 HTTP 标头 `Referrer-Policy`。

示例
--


```js
const links = document.getElementsByTagName("link");
links[0].referrerPolicy; // "no-referrer"
```

规范
--

| Specification |
| --- |
| HTML Standard # dom-link-referrerpolicy |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* HTTP 标头 `Referrer-Policy`
* `HTMLAnchorElement.referrerPolicy`
* `HTMLAreaElement.referrerPolicy` (en-US)
* `HTMLIFrameElement.referrerPolicy` (en-US)
* `HTMLImageElement.referrerPolicy`
ServiceWorkerRegistration.unregister()
======================================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`ServiceWorkerRegistration` (en-US) 接口的 **`unregister`** 方法用于取消对 service worker 的注册并返回一个 `Promise`。没有找到注册时，这个 promise 返回 `false`，否则，不论取消成功与否都返回 `true` （当其他人在同一作用域调用了 `ServiceWorkerContainer.register` 可能取消失败）service worker 会在取消注册前完成一切正在进行的操作。

**备注：** 这一特性同样适用于 Web Worker。

语法
--


```js
unregister()
```

### 参数

无。

### 返回值

`Promise`，会兑现一个表示 service worker 是否被取消注册的布尔值。

示例
--

下面的简单例子中注册了一个 service worker，然后立即取消了：


```js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("/sw.js", { scope: "/" })
    .then((registration) => {
      // 注册成功
      console.log("Registration succeeded.");
      registration.unregister().then((boolean) => {
        // 如果 boolean = true，取消注册成功
      });
    })
    .catch((error) => {
      // 注册失败
      console.error(`Registration failed with ${error}`);
    });
}
```

规范
--

| Specification |
| --- |
| Service Workers # navigator-service-worker-unregister |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 Service Worker
* Service worker 基本代码示例
* 是否支持 ServiceWorker
* `Promise`
* 使用 web worker
ServiceWorkerRegistration.pushManager
=====================================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`ServiceWorkerRegistration` (en-US) 接口的 **`pushManager`** 属性返回用于管理推送订阅的 `PushManager` 接口的引用。包括支持订阅，获取活动订阅和访问推送权限状态。

语法
--
```

myPushManager = ServiceWorker.pushManager
```

### 值

一个 `PushManager` 对象。

示例
--


```js
this.onpush = function (event) {
  console.log(event.data);
  // From here we can write the data to IndexedDB, send it to any open
  // windows, display a notification, etc.
};

navigator.serviceWorker
  .register("serviceworker.js")
  .then(function (serviceWorkerRegistration) {
    serviceWorkerRegistration.pushManager.subscribe().then(
      function (pushSubscription) {
        console.log(pushSubscription.subscriptionId);
        console.log(pushSubscription.endpoint);
        // The push subscription details needed by the application
        // server are now available, and can be sent to it using,
        // for example, an XMLHttpRequest.
      },
      function (error) {
        // During development it often helps to log errors to the
        // console. In a production environment it might make sense to
        // also report information about errors back to the
        // application server.
        console.log(error);
      },
    );
  });
```

规范
--

| Specification |
| --- |
| Push API # dom-serviceworkerregistration-pushmanager |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* Push API
ServiceWorkerRegistration.update()
==================================

`ServiceWorkerRegistration` (en-US) 的 **`update`** 方法尝试更新 service worker。获得 worker 脚本的 URL，逐字节匹配新获取的 worker 和当前的 worker，存在差异的时候安装新的 worker。获取 worker 脚本的更新操作会忽略浏览器缓存的 24 小时前的内容。

**备注：** 这个特性也应用于 Web Workers.

语法
--
```

ServiceWorkerRegistration.update();
```

### 参数

None.

### 返回

返回 `Promise` (en-US) 在 resolve 时对应一个 `ServiceWorkerRegistration` (en-US) 对象。

示例
--

下面的示例注册一个 service worker，然后绑定事件到按钮，这样你可以有需要时，明确的更新 server worker：


```js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("/sw-test/sw.js", { scope: "sw-test" })
    .then(function (registration) {
      // registration worked
      console.log("Registration succeeded.");
      button.onclick = function () {
        registration.update();
      };
    })
    .catch(function (error) {
      // registration failed
      console.log("Registration failed with " + error);
    });
}
```

规范
--

| Specification |
| --- |
| Service Workers # service-worker-registration-update |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 Service Worker
* Service worker 基本代码示例
* 是否支持 ServiceWorker
* `Promise`
* 使用 web worker
TextEncoderStream()
===================

**`TextEncoderStream()`** 构造函数创建一个新的 `TextEncoderStream` 对象，该对象使用 UTF-8 编码将字符串流转换为字节。

语法
--


```js
new TextEncoderStream()
```

### 参数

无。

示例
--

在此示例中，创建了一个 `TextEncoderStream` 并且使用它去上传一个文本流。


```js
const body = textStream.pipeThrough(new TextEncoderStream());
fetch("/dest", {
  method: "POST",
  body,
  headers: { "Content-Type": "text/plain; charset=UTF-8" },
});
```

规范
--

| Specification |
| --- |
| Encoding Standard # ref-for-dom-textencoderstream① |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
TextEncoderStream.writable
==========================

`TextEncoderStream` 接口的只读属性 **`writable`** 返回一个 `WritableStream`。

值
-

一个 `WritableStream`。

示例
--

以下示例演示了如何从一个 `TextEncoderStream` 对象返回一个 `WritableStream`。


```js
stream = new TextEncoderStream();
console.log(stream.writeable); //a WritableStream
```

规范
--

| Specification |
| --- |
| Streams Standard # dom-generictransformstream-writable |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
TextEncoderStream.readable
==========================

`TextEncoderStream` 接口的只读属性 **`readable`** 返回一个 `ReadableStream`。

值
-

一个 `ReadableStream`。

示例
--

以下示例演示了如何从一个 `TextEncoderStream` 对象返回一个 `ReadableStream`。


```js
stream = new TextEncoderStream();
console.log(stream.readable); //a ReadableStream
```

规范
--

| Specification |
| --- |
| Streams Standard # dom-generictransformstream-readable |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
TextEncoderStream.encoding
==========================

`TextEncoderStream` 接口的只读属性 **`encoding`** 返回一个字符串，其中包含当前 `TextEncoderStream` 对象使用的编码算法的名称。

值
-

一个使用 `utf-8` 编码的字符串。

示例
--

以下示例演示如何从一个 `TextEncoderStream` 对象返回 `encoding`。


```js
stream = new TextEncoderStream();
console.log(stream.encoding);
```

规范
--

| Specification |
| --- |
| Encoding Standard # dom-textencoder-encoding |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Client.postMessage()
====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`Client` 接口的 **`Client.postMessage()`** 方法允许一个 service worker 客户端向一个 `ServiceWorker`发送一个消息，会触发 service worker 的 message 事件，通过监听这个事件，可以获取这个消息。

语法
--


```js
Client.postMessage(message[, transfer]);
```

### 返回

Void.

### 参数

`message`

发送给 service worker 的消息内容。

`transfer 可选`

可转移的对象，例如对端口的引用。

例子
--

从 service worker 向 client 发送消息：


```js
addEventListener("fetch", (event) => {
  event.waitUntil(
    (async function () {
      // Exit early if we don't have access to the client.
      // Eg, if it's cross-origin.
      if (!event.clientId) return;

      // Get the client.
      const client = await clients.get(event.clientId);
      // Exit early if we don't get the client.
      // Eg, if it closed.
      if (!client) return;

      // Send a message to the client.
      client.postMessage({
        msg: "Hey I just got a fetch from you!",
        url: event.request.url,
      });
    })(),
  );
});
```


接收 message:


```js
navigator.serviceWorker.addEventListener("message", (event) => {
  console.log(event.data.msg, event.data.url);
});
```

Specifications
--------------

| Specification |
| --- |
| Service Workers # dom-client-postmessage-message-options |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Client.id
=========

`Client` 接口的 **`id`** 只读属性，返回 `Client` 对象的通用唯一标识。

值
-

唯一标识对象的字符串。

规范
--

| Specification |
| --- |
| Service Workers # client-id |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
FormData.entries()
==================

The **`FormData.entries()`** 方法返回一个 `iterator`对象，此对象可以遍历访问 FormData 中的键值对。其中键值对的 key 是一个 `USVString` 对象；value 是一个 `USVString` , 或者 `Blob`对象。

**备注：** 此方法在 Web Workers 可用。

语法
--
```

formData.entries();
```

### 返回值

返回 `iterator`。

示例
--


```js
// Create a test FormData object
var formData = new FormData();
formData.append("key1", "value1");
formData.append("key2", "value2");

// Display the key/value pairs
for (var pair of formData.entries()) {
  console.log(pair[0] + ", " + pair[1]);
}
```


执行结果为：
```

key1, value1
key2, value2
```

规范
--

#### No specification found

No specification data found for `api.FormData.entries`.  
Check for problems with this page or contribute a missing `spec_url` to mdn/browser-compat-data. Also make sure the specification is included in w3c/browser-specs.

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 FormData 对象
* `<form>`
FormData.get()
==============

`FormData` 的 `get()` 方法用于返回 FormData 对象中和指定的键关联的第一个值，如果你想要返回和指定键关联的全部值，那么可以使用 `getAll()` 方法。

**备注：** 该方法在Web Workers中有效。

语法
--
```

formData.get(name);
```

### 参数

`name`

将要获取值的键名。

### 返回值

包含值的`FormDataEntryValue` (en-US)。

例子
--

下面的代码创建一个 FormData 对象：


```js
var formData = new FormData();
```


使用`FormData.append`方法添加两个数据：


```js
formData.append("username", "Chris");
formData.append("username", "Bob");
```


接下来使用 `get()` 来返回第一个和 `"username"` 关联的值：


```js
formData.get("username"); // Returns "Chris"
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # dom-formdata-get |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 FormData 对象
* `<form>`
FormData.has()
==============

\*\*`has()`\*\*方法会返回一个布尔值，表示该`FormData`对象是否含有某个 key。

**备注：** 该方法在 Web Workers 可用。

语法
--


```js
formData.has(name);
```

### 参数

`name`

一个 `USVString` ，要查询的 key 名称。

### 返回

一个 `Boolean` (en-US)。

示例
--

下列代码会先创建一个空的 formData 对象：


```js
var formData = new FormData();
```


下列代码用来检测 `FormData` 对象是否存在 `username` 这个 key。默认检测一次，使用 `FormData.append` 插入`username` 之后再检测一次：


```js
formData.has("username"); // Returns false
formData.append("username", "Chris");
formData.has("username"); // Returns true
```

规范
--

| Specification |
| --- |
| XMLHttpRequest Standard # dom-formdata-has |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 使用 FormData 对象
* `<form>`