recursal/MDN huggingface dataset:
IDBCursor.key
=============

**key**是只读属性，返回在游标中的位置。如果游标在范围之外，这个值会被置为 undefined。游标的 key 可以是任何数据类型。

**备注：** 此特性在 Web Worker 中可用

语法
--
```

var key = cursor.key;
```

### 值

任意类型

示例
--

在该示例中，我们创建一个事务，检索一个存储对象，然后使用游标遍历所有存储在 object store 中的记录。遍历的过程中，我们把类似（相簿标题，这是我们的键 key），游标的 key 打印出来。

我们可以不根据游标的 key 来选取数据；我们可以抓取所有。还要注意，在循环的每个迭代中，你可以使用 cursor.value.foo 从当前记录下获取数据。完整示例，请看IDBCursor example (view example live.)
```

function displayData() {
  var transaction = db.transaction(['rushAlbumList'], "readonly");
  var objectStore = transaction.objectStore('rushAlbumList');

  objectStore.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    if(cursor) {
      var listItem = document.createElement('li');
      listItem.innerHTML = cursor.value.albumTitle + ', ' + cursor.value.year;
      list.appendChild(listItem);

      console.log(cursor.key);
      cursor.continue();
    } else {
      console.log('Entries all displayed.');
    }
  };
};
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbcursor-key① |

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

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

相关链接
----

* Using IndexedDB
* Starting transactions: `IDBDatabase`
* Using transactions: `IDBTransaction`
* Setting a range of keys: `IDBKeyRange`
* Retrieving and making changes to your data: `IDBObjectStore`
* Using cursors: `IDBCursor`
* Reference example: To-do Notifications (view example live.)
MediaStreamTrack.getConstraints()
=================================

`MediaStreamTrack` 接口的 **`getConstraints()`** 方法接口返回 `MediaTrackConstraints` 包含集使用现有呼叫最近的轨道建立约束来 `applyConstraints()` (en-US)。这些约束指示网站或应用程序指定的值和值范围对于包含的可约束属性是必需的或可接受的。

约束条件可以用来确保媒体符合你喜欢的某些指导方针。例如，你可能更喜欢高清视频，但要求帧率略低，以帮助保持足够低的数据速率而不会使网络负担过重。约束还可以指定理想和/或可接受的尺寸或尺寸范围。有关如何使用可约束属性的详细信息， (en-US)请参阅能力，约束和设置 (en-US)。

句法
--
```

var constraints = MediaStreamTrack.getConstraints();
```

### 参数

没有。

### 返回值

指示使用`applyConstraints()` (en-US)最近设置的网站或应用程序的可约束属性的`MediaTrackConstraints`对象。返回对象中的属性按照与设置时相同的顺序列出，并且未包含未由网站或应用专门设置的属性。

**备注：** 返回的一组约束条件不一定描述媒体的实际状态; 如果任何约束无法满足，它们仍然包含在网站代码最初设置的返回对象中。要获得所有可约束属性的当前活动设置，你应该调用`getSettings()` (en-US)。

例
-

本示例获取当前轨道约束，设置`facingMode` (en-US)，并应用更新的约束。


```js
function switchCameras(track，camera){
  let constraints = track.getConstraints();
  constraints.facingMode = camera;
  track.applyConstraints(约束);
}
```

规范
--

| Specification |
| --- |
| Media Capture and Streams # dom-mediastreamtrack-getconstraints |

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

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

\*\*`MediaStreamTrack.stop()`\*\*方法停止跟踪。

语法
--
```

track.stop()
```

说明
--

调用`stop()`告诉user agent ，`MediaStreamTrack`不再需要轨道的来源，无论该来源是什么，包括文件，网络流，本地摄像机或麦克风。由于多个音轨可能使用同一音源（例如，如果两个选项卡使用设备的麦克风），则音源本身并不一定会立即停止。而是从轨道取消关联，并且停止跟踪对象。一旦没有媒体轨道正在使用源，则实际上可能会完全停止该源。

调用`stop()`之后，`readyState`属性立即设置为`ended`。

示例
--

### 停止视频流

在此示例中，我们看到一个函数，该函数通过在给定`<video>`的每个轨道上调用`stop()`来停止流式视频。


```js
function stopStreamedVideo(videoElem) {
  const stream = videoElem.srcObject;
  const tracks = stream.getTracks();

  tracks.forEach(function (track) {
    track.stop();
  });

  videoElem.srcObject = null;
}
```


这是通过从其`srcObject` 属性获得视频元素的流来实现的。然后，通过调用其`getTracks()`方法来获取流的轨道列表。从那里开始，剩下要做的就是使用`forEach()`遍历轨道列表并调用每个轨道的`stop()`方法。

最后，将`srcObject`设置为`null`以切断与`MediaStream` 对象的链接，以便将其释放。

Finally, `srcObject` is set to `null` to sever the link to the `MediaStream` object so it can be released.

规范
--

| Specification |
| --- |
| Media Capture and Streams # dom-mediastreamtrack-stop |

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

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

看看别的
----

* `MediaStreamTrack`，它所属的接口。
* `MediaStreamTrack.readyState`
* `ended`
MediaStreamTrack.readyState
===========================

\*\*`MediaStreamTrack.readyState`\*\*只读属性返回一个枚举的值，该值给出了轨道的状态。

语法
--
```

const state = track.readyState
```

### 值

它采用以下值之一：

* `"live"`表示输入已连接，并尽最大努力提供实时数据。在这种情况下，可以使用`MediaStreamTrack.enabled` (en-US)属性打开或关闭数据输出。
* `"ended"`表示输入不再提供任何数据，也永远不会提供新数据。
规范
--

| Specification |
| --- |
| Media Capture and Streams # dom-mediastreamtrack-readystate |

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

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

看看别的
----

* Media Stream API
* WebRTC
* `MediaStreamTrack.onended` (en-US)
MediaStreamTrack.getCapabilities()
==================================

`MediaStreamTrack` 接口的 **`getCapabilities()`** 方法返回一个 `MediaTrackCapabilities` 对象，此对象表示每个可调节属性的值或者范围，该特性依赖于平台和user agent.

一旦你知道了浏览器的功能，你的脚本可以通过调用 `applyConstraints()` (en-US) 来请求配置为匹配理想或可接受的设置。参考功能、约束和设置 (en-US)以了解受限制属性的具体细节。

语法
--
```

var capabilities = MediaStreamTrack.getCapabilities();
```

### 参数

没有参数。

### 返回值

A `MediaTrackCapabilities` object which specifies the value or range of values which are supported for each of the user agent's supported constrainable properties.

规范
--

| Specification |
| --- |
| Media Capture and Streams # dom-mediastreamtrack-getcapabilities |

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

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

`StyleSheet`接口的 **`disabled`** 属性用于决定样式表是否被禁用于文档。样式表被禁用可能由于这个属性被手动设置为 true，也可能是因为样式表是未激活的alternative style sheet。注意 `disabled == false` 并不保证样式表一定生效（例如它可能被移除出文档）。

语法
--
```

bool = stylesheet.disabled
```

例子
--
```

// 如果样式表被禁用
if (stylesheet.disabled) {
   // 添加行内样式
}
```

规范
--

| Specification |
| --- |
| CSS Object Model (CSSOM) # dom-stylesheet-disabled |

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

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

概述
--

The **`title`** property of the `StyleSheet` interface returns the advisory title of the current style sheet.

The title is often specified in the `ownerNode` (en-US).

注意
--

The title is often specified in the `ownerNode` (en-US).

Specification
-------------

* title
浏览器兼容性
------

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

概述
--

**media** specifies the intended destination medium for style information.

语法
--
```

medium = stylesheet.media
stylesheet.media =medium
```

参数
--

* `medium` is a string describing a single medium or a comma-separated list.
示例
--
```

<link rel="StyleSheet" href="document.css" type="text/css" media="screen" />
```

注意
--

The default value for media is "screen."

Specification
-------------

DOM Level 2 Styles - STYLESHEET
href
====

### 概述

返回当前样式表文件的 URI 地址。

### 语法
```

uri = stylesheet.href
```

### 参数

* `uri` 为一个字符串，包含了样式表文件的 URI 地址。
### 例子
```

 // 在本机环境下
 <html>
  <head>
   <link rel="StyleSheet" href="example.css" type="text/css" />
   <script>
    function sref() {
     alert(document.styleSheets[0].href);
    }
   </script>
  </head>
  <body>
   <div class="thunder">Thunder</div>
   <button onclick="sref()">ss</button>
  </body>
 </html>
// 弹出 "file:////C:/Windows/Desktop/example.css
```

### 备注

如果该样式表是一个外链样式表文件，则它的 href 属性值为样式表文件的 URI. 但如果该样式表是一个内联样式表，则它的 href 属性值为`null`.

该属性在 Firefox, Opera, Google Chrome, Safari 中为只读属性，在 Internet Explorer 中可读可写。

### 规范

stylesheet.href
AbortController.signal
======================

`AbortController` 接口的只读属性 **`signal`** 返回一个 `AbortSignal` 实例对象，该对象可以根据需要处理 DOM 请求通信，既可以建立通信，也可以终止通信。

值
-

一个 `AbortSignal` 实例对象。

示例
--

在下面的这段代码中，我们将通过 Fetch API 来下载一段视频。

首先通过 `AbortController()` 构造函数来创建一个 controller 实例，然后通过 `AbortController.signal` 属性获取到它的关联对象 `AbortSignal` 的引用。

当 fetch 请求初始化时，我们将 `AbortSignal` 作为一个选项传递进入请求的选项对象中（下面的 `{signal}`）。这将 signal 和 controller 与 fetch 请求相关联，并且允许我们通过调用 `AbortController.abort()` 去中止它，如下面的第二个事件监听器。


```js
const controller = new AbortController();
const signal = controller.signal;

const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  controller.abort();
  console.log("Download aborted");
});

function fetchVideo() {
  fetch(url, { signal })
    .then((response) => {
      console.log("Download complete", response);
    })
    .catch((err) => {
      console.error(`Download error: ${err.message}`);
    });
}
```


**备注：** 当 `abort()` 被调用，`fetch()` promise 将会抛出一个 `AbortError`.

你可以在 GitHub 上找到完整的可以运行的示例；你还可以看它的在线演示。

规范
--

| Specification |
| --- |
| DOM Standard # ref-for-dom-abortcontroller-signal② |

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

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

参见
--

* Fetch API
AbortController.abort()
=======================

`AbortController` 接口的 **`abort()`** 方法会在 DOM 请求完成之前中止它。它能够中止 fetch 请求、各种响应主体或者流的消耗。

语法
--


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

### 参数

`reason` 可选

操作中止的原因，可以是各种 JavaScript 值。如果没有指定，则将原因设置为“AbortError”`DOMException`。

### 返回值

无（`undefined`）。

示例
--

以下片段中，我们将使用 Fetch API 下载一个视频。

我们首先使用 `AbortController()` 构造函数创建一个 controller，然后使用 `AbortController.signal` 属性获取到它关联的 `AbortSignal` 对象的引用。

当 fetch 请求初始化时，我们将 `AbortSignal` 作为一个选项传递进入请求的选项对象中（下面的 `{signal}`）。这将 signal 和 controller 与 fetch 请求相关联，并且允许我们通过调用 `AbortController.abort()` 去中止它，如下面的第二个事件监听器。


```js
const controller = new AbortController();
const signal = controller.signal;

const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  controller.abort();
  console.log("Download aborted");
});

function fetchVideo() {
  fetch(url, { signal })
    .then((response) => {
      console.log("Download complete", response);
    })
    .catch((err) => {
      console.error(`Download error: ${err.message}`);
    });
}
```


**备注：** 当 `abort()` 被调用时，`fetch()` promise 将会抛出 `DOMException` 类型的 `Error`（名称为 `AbortError`）。

你可以在 github 上找到完整的工作示例；你还可以看它的在线演示。

规范
--

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

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

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

参见
--

* Fetch API
AbortController.AbortController()
=================================

**`AbortController()`** 构造函数创建了一个新的 `AbortController` 实例。

语法
--


```js
new AbortController()
```

### 参数

无。

示例
--

在下面的这段代码中，我们将通过 Fetch API 来下载一段视频。

首先通过 `AbortController()` 构造函数来创建一个 controller 实例，然后通过 `AbortController.signal` 属性获取到它的关联对象 `AbortSignal` 的引用。

当 fetch 请求初始化时，我们将 `AbortSignal` 作为一个选项传递进入请求的选项对象中（下面的 `{signal}`）。这将 signal 和 controller 与 fetch 请求相关联，并且允许我们通过调用 `AbortController.abort()` 去中止它，如下面的第二个事件监听器。


```js
const controller = new AbortController();
const signal = controller.signal;

const url = "video.mp4";
const downloadBtn = document.querySelector(".download");
const abortBtn = document.querySelector(".abort");

downloadBtn.addEventListener("click", fetchVideo);

abortBtn.addEventListener("click", () => {
  controller.abort();
  console.log("Download aborted");
});

function fetchVideo() {
  fetch(url, { signal })
    .then((response) => {
      console.log("Download complete", response);
    })
    .catch((err) => {
      console.error(`Download error: ${err.message}`);
    });
}
```


**备注：** 当 `abort()` 被调用，`fetch()` promise 将会抛出 `AbortError`。

你可以在 GitHub 上找到一个完整的使用示例——参见 abort-api（也可以看在线演示）。

规范
--

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

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

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

参见
--

* Fetch API
IDBObjectStore.indexNames
=========================

`IDBObjectStore` 的只读属性 **`indexNames`** 返回此对象存储中对象的 indexes 名称（name）列表。

**备注：** 此特性在 Web Worker 中可用

Syntax
------
```

var myindexNames = objectStore.indexNames;
```

### Value

一个 `DOMStringList`.

Example
-------

在下面的代码片段中，我们在数据库上打开一个读/写事务并使用 `add()` 向对象存储添加一些数据。创建对象存储后，我们将打印 `objectStore.indexNames` 到控制台。有关完整的工作示例，请参阅我们的 待办事项通知应用程序 ( 实时查看示例 )


```js
// 让我们来打开我们的数据库
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function (event) {
  note.innerHTML += "<li>Database initialised.</li>";

  // 将打开数据库的结果存储在 db 变量中
  // 下面经常用到这个
  db = this.result;

  // 运行 addData() 函数将数据添加到数据库
  addData();
};

function addData() {
  // 创建一个新对象以准备插入到 IDB 中
  var newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // 打开读/写数据库事务，准备添加数据
  var transaction = db.transaction(["toDoList"], "readwrite");

  // 当所有事情都完成时，报告事务完成的成功情况
  transaction.oncomplete = function (event) {
    note.innerHTML += "<li>Transaction completed.</li>";
  };

  transaction.onerror = function (event) {
    note.innerHTML +=
      "<li>Transaction not opened due to error. Duplicate items not allowed.</li>";
  };

  // 在事务上创建对象存储
  var objectStore = transaction.objectStore("toDoList");
  console.log(objectStore.indexNames);

  // 请求将 newItem 对象 添加到对象存储区
  var objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = function (event) {
    // 报告我们请求的成功
    note.innerHTML += "<li>Request successful.</li>";
  };
}
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-indexnames① |

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

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

查看其他内容
------

* 使用 IndexedDB
* 启动事务 : `IDBDatabase`
* 使用事务 : `IDBTransaction`
* 设置键的范围 : `IDBKeyRange`
* 检索和更改数据 : `IDBObjectStore`
* 使用游标 : `IDBCursor`
* 参考示例 : To-do Notifications (view example live.)
IDBObjectStore.keyPath
======================

`IDBObjectStore`的只读属性 keyPath 接口返回当前 objectStore 的key path (en-US)。

什么是 keyPath 呢？在 indexedDB 中，一条记录就是一个 object，object 里面有一个属性作为这条记录的主要依据用来进行查询，而这个属性的属性名就是 keyPath，属性值就是 key。在用 indexedDB 的 get 方法时，提供 key，而不需要指定 keyPath，因为 get 方法把参数作为这个最主要的属性的值，在数据库中进行查询。（译者注）

如果该属性值为 null，应用中必须在每一次进行修改性质的操作时提供一个 key。

add、put 方法都可以传第二个参数，当你当前的 objectStore 的 autoIncrement 为 true 时，你一般不会设置 keyPath，如果这个时候你在 put 的时候不提供第二个参数，indexedDB 就不知道要更新哪一条记录了。（译者注）

**备注：** 此特性在 Web Worker 中可用

句法
--
```

var mykeyPath = objectStore.keyPath;
```

### Value

任何类型。

例子
--

在下面代码片段中，我们在数据库里打开了一个可读写的事务（transaction），并且用`add()`向一个 objectStore 中添加了一些数据。在 objectStore 被创建之后，我们在 console 中打印了 objectStore.keyPath 的值。想查看完整的例子，请查看我们的To-do Notifications应用（查看在线例子）。


```js
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function (event) {
  note.innerHTML += "<li>Database initialised.</li>";

  // store the result of opening the database in the db variable.
  // This is used a lot below
  db = DBOpenRequest.result;

  // Run the addData() function to add the data to the database
  addData();
};

function addData() {
  // Create a new object ready to insert into the IDB
  var newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // open a read/write db transaction, ready for adding the data
  var transaction = db.transaction(["toDoList"], "readwrite");

  // report on the success of the transaction completing, when everything is done
  transaction.oncomplete = function (event) {
    note.innerHTML += "<li>Transaction completed.</li>";
  };

  transaction.onerror = function (event) {
    note.innerHTML +=
      "<li>Transaction not opened due to error. Duplicate items not allowed.</li>";
  };

  // create an object store on the transaction
  var objectStore = transaction.objectStore("toDoList");
  console.log(objectStore.keyPath);

  // Make a request to add our newItem object to the object store
  var objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = function (event) {
    // report the success of our request
    note.innerHTML += "<li>Request successful.</li>";
  };
}
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-keypath① |

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

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

相关内容
----

* 使用 IndexedDB
* 开始学习事务 transactions: `IDBDatabase`
* 使用事务 transactions: `IDBTransaction`
* 值域 range 的使用：`IDBKeyRange`
* 检索、修改：`IDBObjectStore`
* 使用游标：`IDBCursor`
* 相关例子：To-do Notifications (view example live.)
IDBObjectStore.autoIncrement
============================

`IDBObjectStore`的只读属性 **`autoIncrement`** 接口返回当前 objectStore 的自增标记值（true 或 false）。

什么是自增呢？熟悉 SQL 的朋友应该知道，SQL 数据里面的字段可以设置自增，当一条记录被插入时，不必传入该字段，新记录的该字段值会在前面一条记录该字段值的基础上加 1.而 indexedDB 里面的 autoIncrement 的同样的意义。（译者注）

注意：每个 objectStore 的 auto increment 计数器是分开独立的。

**备注：** 此特性在 Web Worker 中可用

句法
--
```

var myAutoIncrement = objectStore.autoIncrement;
```

### Value

`Boolean` (en-US):

| 值 | 含义 |
| --- | --- |
| `true` | 当前 objectStore 会自增 |
| `false` | 当前 objectStore 不会自增 |

例子
--

在下面代码片段中，我们在数据库里打开了一个可读写的事务（transaction），并且用`add()`向一个 objectStore 中添加了一些数据。在 objectStore 被创建之后，我们在 console 中打印了 objectStore.autoIncrement 的值。想查看完整的例子，请查看我们的To-do Notifications应用（查看在线例子）。


```js
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function (event) {
  note.innerHTML += "<li>Database initialised.</li>";

  // store the result of opening the database in the db variable.
  // This is used a lot below
  db = DBOpenRequest.result;

  // Run the addData() function to add the data to the database
  addData();
};

function addData() {
  // Create a new object ready to insert into the IDB
  var newItem = [
    {
      taskTitle: "Walk dog",
      hours: 19,
      minutes: 30,
      day: 24,
      month: "December",
      year: 2013,
      notified: "no",
    },
  ];

  // open a read/write db transaction, ready for adding the data
  var transaction = db.transaction(["toDoList"], "readwrite");

  // report on the success of the transaction completing, when everything is done
  transaction.oncomplete = function (event) {
    note.innerHTML += "<li>Transaction completed.</li>";
  };

  transaction.onerror = function (event) {
    note.innerHTML +=
      "<li>Transaction not opened due to error. Duplicate items not allowed.</li>";
  };

  // create an object store on the transaction
  var objectStore = transaction.objectStore("toDoList");
  console.log(objectStore.autoIncrement);

  // Make a request to add our newItem object to the object store
  var objectStoreRequest = objectStore.add(newItem[0]);

  objectStoreRequest.onsuccess = function (event) {
    // report the success of our request
    note.innerHTML += "<li>Request successful.</li>";
  };
}
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-autoincrement① |

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

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

相关内容
----

* 使用 IndexedDB
* 开始学习事务 transactions: `IDBDatabase`
* 使用事务 transactions: `IDBTransaction`
* key 值域 range 的使用：`IDBKeyRange`
* 检索、修改：`IDBObjectStore`
* 使用游标：`IDBCursor`
* 相关例子：To-do Notifications (view example live.)
IDBObjectStore.get()
====================

`IDBObjectStore` 的接口 \*\*`get()`\*\*方法 返回 `IDBRequest` 对象，并在“单独的线程（separate thread）”中返回由指定键选择的“对象储存（object store）” 。这用于从对象储存检索特定记录。

如果成功找到值，则会创建其值的结构化克隆，并设置为“请求对象（request object）”的 `result` 。

**备注：** This method produces the same result for: a) a record that doesn't exist in the database and b) a record that has an undefined value. To tell these situations apart, call the `openCursor()` method with the same key. That method provides a cursor if the record exists, and no cursor if it does not.

**备注：** 此特性在 Web Worker 中可用

语法
--
```

var request = objectStore.get(key);
```

### 参数

key

标识要检索的记录的键或键范围。

### 返回值

触发与此操作相关的后续事件的 `IDBRequest` 对象。

### 异常

此方法可能会引发以下类型之一的 `DOMException` :

| Exception | Description |
| --- | --- |
| TransactionInactiveError | This `IDBObjectStore`'s transaction is inactive. |
| DataError | The key or key range provided contains an invalid key. |
| `InvalidStateError` | The `IDBObjectStore` has been deleted or removed. |

例子
--

在以下的代码段中，我们在数据库上打开一个“读/写 事务（read/write transaction）”，并使用 `get()` 从“对象储存（object store）”中获取一个特定的记录——一个带有“Walk dog”键的示例记录。一旦检索到这个数据对象，你就可以使用普通的 JavaScript 更新它，然后使用 `IDBObjectStore.put` 操作将其放回数据库。有关完整的工作示例，查看我们的 To-do Notifications app (view example live.)


```js
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);

DBOpenRequest.onsuccess = function (event) {
  note.innerHTML += "<li>Database initialised.</li>";

  // store the result of opening the database in the db variable.
  // This is used a lot below
  db = DBOpenRequest.result;

  // Run the getData() function to get the data from the database
  getData();
};

function getData() {
  // open a read/write db transaction, ready for retrieving the data
  var transaction = db.transaction(["toDoList"], "readwrite");

  // report on the success of the transaction completing, when everything is done
  transaction.oncomplete = function (event) {
    note.innerHTML += "<li>Transaction completed.</li>";
  };

  transaction.onerror = function (event) {
    note.innerHTML +=
      "<li>Transaction not opened due to error: " + transaction.error + "</li>";
  };

  // create an object store on the transaction
  var objectStore = transaction.objectStore("toDoList");

  // Make a request to get a record by key from the object store
  var objectStoreRequest = objectStore.get("Walk dog");

  objectStoreRequest.onsuccess = function (event) {
    // report the success of our request
    note.innerHTML += "<li>Request successful.</li>";

    var myRecord = objectStoreRequest.result;
  };
}
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-get① |

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

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

参见
--

* Using IndexedDB
* Starting transactions: `IDBDatabase`
* Using transactions: `IDBTransaction`
* Setting a range of keys: `IDBKeyRange`
* Retrieving and making changes to your data: `IDBObjectStore`
* Using cursors: `IDBCursor`
* Reference example: To-do Notifications (view example live.)
IDBObjectStore.openCursor
=========================

`IDBObjectStore` 的 `openCursor()` 方法 返回一个`IDBRequest` 对象，并在一个单独的线程中，返回一个新的 `IDBCursorWithValue` (en-US) 对象。此方法目的是用一个游标来遍历一个对象存储空间。

若要确认此操作是否成功完成，请监听结果的 `success` 事件。

**备注：** 此特性在 Web Worker 中可用

语法
--


```js
var request = ObjectStore.openCursor(query, direction);
```

### 参数

query 可选

要查询的键或者 `IDBKeyRange` 。如果传一个有效的键，则会默认为只包含此键的范围。如果此参数不传值，则默认为一个选择了该对象存储空间全部记录的键范围。

direction 可选

一个 `IDBCursorDirection` 来告诉游标要移动的方向。有效的值有 `"next"` 、`"nextunique"` 、`"prev"` 和 `"prevunique"`。默认值是 `"next"`。

### 返回

一个 `IDBRequest` 对象，在此对象上触发与此操作相关的后续事件。

### 异常

此方法可能引起以下类型之一的 `DOMException` ：

| 异常 | 描述 |
| --- | --- |
| `InvalidStateError` | 此 `IDBObjectStore` 或`IDBIndex` 已被删除。 |
| `TransactionInactiveError` | 此 `IDBObjectStore` 的事务处于非活动状态。 |
| `DataError` | 指定的键或键范围无效。 |

例子
--

在下面这个简单的片段中，我们创建一个事务，检索一个对象存储空间，然后用一个游标去遍历该对象存储空间的所有记录：


```js
var transaction = db.transaction("name", "readonly");
var objectStore = transaction.objectStore("name");
var request = objectStore.openCursor();
request.onsuccess = function (event) {
  var cursor = event.target.result;
  if (cursor) {
    // cursor.value 包含正在被遍历的当前记录
    // 这里你可以对 result 做些什么
    cursor.continue();
  } else {
    // 没有更多 results
  }
};
```

规范
--

| Specification |
| --- |
| Indexed Database API 3.0 # ref-for-dom-idbobjectstore-opencursor② |

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

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

参见
--

* Using IndexedDB
* Starting transactions: `IDBDatabase`
* Using transactions: `IDBTransaction`
* Setting a range of keys: `IDBKeyRange`
* Retrieving and making changes to your data: `IDBObjectStore`
* Using cursors: `IDBCursor`
* Reference example: To-do Notifications (view example live.)