recursal/MDN huggingface dataset:
<input type="submit">
=====================

`<input>` (en-US) 元素的 **`"submit"`** 類型會被視為提交按鈕（submit button）——點選的話就能把表單提交到伺服器。

| **值** | 用作按鈕 label 的 `DOMString` |
| --- | --- |
| **事件** | `click` (en-US) |
| **常見的支援屬性** | `type` (en-US) 與 `value` (en-US) |
| **IDL 屬性** | `value` |
| **方法** | 無 |

值
-

`<input type="submit">` 元素的 `value` (en-US) 屬性會包含用作按鈕 label 的 `DOMString`。
```

<input type="submit" value="Submit to me" />
```

### 不指定 value 屬性

如果不指定 `value`，視瀏覽器不同，按鈕會是 *Submit*/*Submit Query*/*提交* 之類的預設值：
```

<input type="submit" />
```

使用提交按鈕
------

`<input type="submit">` 按鈕用於提交表單。如果想自訂按鈕、並透過 JavaScript 自訂其行為，你應該用 `<input type="button">` (en-US)、或更好的，`<button>` (en-US) 元素。

請記住，如果表單內只有一個按鈕元素（例如 `<button>My button</button>`）的話，瀏覽器會自動把它視為提交按鈕。你要在其他按鈕之外，明確宣告一個提交按鈕。

### 簡易的提交按鈕

我們要開始建立一個新的提交按鈕：


```html
<form>
  <div>
    <label for="example">Let's submit some text</label>
    <input id="example" type="text" name="text" />
  </div>
  <div>
    <input type="submit" value="Submit to me" />
  </div>
</form>
```


它會被渲染為：

試著在文字區塊內輸入些文字，接著提交表單。

提交時，送到伺服器的成對 name/value 資料會 be along the lines of `text=mytext`，視你在文字區塊內輸入了什麼。資料在哪裡並如何被送出，取決於 `<form>` 屬性和其他細節的設定：請參見傳送表單資料 (en-US)。

### 增加提交的快捷鍵

鍵盤快捷鍵，又稱熱鍵，能讓用戶透過鍵盤按鍵或組合觸發按鈕事件。要給提交按鈕添加鍵盤快捷鍵——如同 `<input>` (en-US) 那樣——你需要使用全域屬性 `accesskey` (en-US)。

下例之中，`s` 被指定為快捷鍵（you'll need to press `s` plus the particular modifier keys for your browser/OS combination; see `accesskey` (en-US) for a useful list of those）。


```html
<form>
  <div>
    <label for="example">Let's submit some text</label>
    <input id="example" type="text" name="text" />
  </div>
  <div>
    <input type="submit" value="Submit to me" accesskey="s" />
  </div>
</form>
```


**備註：** 上例的問題很明顯，就是用戶不知道要按什麼快捷鍵！在實際網站中，你要提供不干擾網站整體設計的快捷鍵資訊：像是提供易於訪問的連結，告訴用戶說網站的快捷鍵是什麼。

### 禁用與啟用提交按鈕

要禁用提交按鈕，就如同下例般指定全域屬性 `disabled` (en-US)：
```

<input type="submit" value="Disabled" disabled />
```


你可以在 run time 時藉由設定 `disabled` 的 `true` or `false` 來禁用或啟用提交按鈕。在 JavaScript 就看起來像 `btn.disabled = true`。

**備註：** 請參見 `<input type="button">` (en-US) 頁面以取得關於禁用/啟用提交按鈕的詳細資訊。

**備註：** Firefox 不若其他瀏覽器，它預設上會在 `<button>` (en-US) 跨網頁加載時保持動態禁用狀態。請用 `autocomplete` (en-US) 屬性控制這個功能。

驗證
--

提交按鈕不參與強制驗證：they have no real value to be constrained.

範例
--

上面已經有一些程式碼了。這裡也沒有什麼還能講的。

規範
--

| Specification |
| --- |
| HTML Standard # submit-button-state-(type=submit) |

瀏覽器相容性
------

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

參見
--

* 實做它的 `<input>` (en-US) 與 `HTMLInputElement` (en-US) 介面。
* `<button>` (en-US) 元素。
控制 HTML 表單中的拼字檢查功能
==================

Firefox 2 新增了網頁表單文字輸入區的即時拼字檢查功能，使用者可以修改 about:config 來調整是否使用拼字檢查、是否同時檢查文字輸入**欄**等設定。預設值狀態下，Firefox 會檢查文字輸入區（text area）及 `designMode` 的文件，而不檢查文字輸入欄（text field）的拼字。

不過，總是會有些不見得適合預設值的情況，例如在某些用來編寫 HTML 等程式碼的輸入區中拼字檢查就變得煩人，或者有些網站也希望建議 Firefox 檢查某些特定文字輸入欄的拼字等等。

若網站對某特定 `<input>` 元素中的拼字檢查執行與否有所建議，則可使用 `spellcheck` 屬性。將此屬性設為 `true` 表建議檢查拼字，而設為 `false` 則相反。

若使用者將 `layout.spellcheckDefault` 直接設為 0 以關閉拼字檢查功能，那麼網站的建議就無效；若設為其他值，則會將網站建議列入考量。

舉例來說，你可以撰寫如下的 HTML 碼，建議 Firefox 檢查此文字輸入欄（`<input>` 元素）中的拼字：
```

<input type="text" size="50" spellcheck="true">
```


也可以撰寫這樣的 HTML 碼，建議 Firefox 不要檢查文字輸入區的拼字：
```

<textarea spellcheck="false"></textarea>
```


而 `designMode`（通常用於 HTML 所見即所得編輯）則可以在文件的 `<body>` 標籤中設定 `spellcheck` 屬性來控制拼字檢查。

`spellcheck` 屬性也可以放在 `<span>` 或 `<div>` 等其他標籤中，這麼一來在此元素下所有未另行設定 `spellcheck` 屬性的 `<input>` 元素將繼承此設定；而若皆未設定則使用者的決定將優先採行。

舉例而言：
```

<div spellcheck="true">
  <label>輸入英文句子： </label><input type="text" size="50">
  <br />
  <label>再打一句： </label><input type="text" size="50">
</div>
<br />
<label>最後一句： </label><input type="text" size="50">
```


在這段 HTML 程式碼中，頭兩個文字輸入區域將檢查拼字，第三個則不會。
data-\*
=======

**data-\*** 全域屬性 (en-US)構成一組稱作**自訂 data 屬性**的屬性。它能令 HTML 與其 DOM 擁有給腳本用的交換資訊。這種屬性設置的自訂資料，能透過元素的 `HTMLElement` (en-US) 介面而活用。`HTMLElement.dataset` (en-US) property 允許訪問它們。`*` 可以是任何遵循以下規則的 xml 名稱：

* 名字絕對不能以 `xml` 起頭，無論是否用於 xml、
* 名字絕對不能包含分號（`U+003A`）、
* 名字絕對不能包含大寫 `A` 到大小 `Z` 的拉丁字母。

請注意 `HTMLElement.dataset` (en-US) property 是個 `DOMStringMap` (en-US)，而自訂的 data 屬性名 *data-test-value* 因為所有的減號（`U+002D`）都會被消去、緊接著的第一個字母，會被取代為駝峰式（camelcase）名字，所以要透過 `HTMLElement.dataset.testValue` 或 `HTMLElement.dataset["testValue"]` 訪問。

### 用法

藉由增加 **data-\*** 屬性，即使是普通的 HTML 元素也能變成複雜而強大程式物件。例如說遊戲裡面的太空船精靈 能成為帶有 class (en-US) 與數個 data-\* 屬性的 `<img>` (en-US) 元素：
```

<img class="spaceship cruiserX3" src="shipX3.png"
  data-ship-id="324"   data-weapons="laserI laserII"   data-shields="72%"
  data-x="414354" data-y="85160" data-z="31940"
  onclick="spaceships[this.dataset.shipId].blasted()" />
```


（參見*這個網站*）

規範
--

| Specification |
| --- |
| HTML Standard # attr-data-\* |

瀏覽器相容性
------

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

參見
--

* 所有的全域屬性 (en-US)
* The `HTMLElement.dataset` (en-US) property that allows to access and modify these values.
JavaScript 技術概觀
===============

簡介
--

在網頁中，HTML 存放網頁的內容與格式，CSS 註記內容的呈現樣式；而 JavaScript 則用來產生豐富的效果或網頁應用程式。然而，在網頁瀏覽器中通稱的「JavaScript」是由眾多截然不同的要素所構成。其中之一是核心語言（ECMAScript），另一個則是 DOM（文件物件模型，Document Object Model）。

JavaScript 的核心語言（ECMAScript）
----------------------------

JavaScript 的核心語言是由 ECMA TC-39 委員會統一標準，並且命名為 ECMAScript 。隨著最新版本的規格 ECMAScript 5 在 2011 年 3 月推出，大部分最新的網頁瀏覽器實作了 ECMAScript 3 與部分的 ECMAScript 5。

### ECMAScript 包含了什麼？

ECMAScript 主要定義了以下的內容：

* 語言的語法（解析規則，關鍵字，流程控制，物件的初始化… ）
* 錯誤處理機制 （throw、 try/catch、 允許自訂錯誤型別）
* 型態（布林代數、數字、字串、函數、物件…）
* 全域物件。在瀏覽器環境中，此物件即為 window 物件。許多函數皆包含在此物件下（parseInt, parseFloat, decodeURI, encodeURI…）
* 一種基於原型（Prototyping）的繼承機制
* 內建的物件與函數 （JSON、Math、Array.prototype 方法、物件自識方法…）
* 嚴格模式（Strict mode）
### 瀏覽器支援

根據以前的經驗，ECMAScript 的功能都有良好且互通的支援。截至 2011 年 6 月，ECMAScript 5 的支援在不同瀏覽器實作之間存在差異。有些文件整理了各瀏覽器對 ECMAScript 5 的支援情形。

DOM（文件物件模型）
-----------

### WebID

WebIDL 規格書 是 DOM 技術與 ECMAScript 之間相互黏合的基礎。

### DOM 核心

W3C 統一規範了文件物件模型的核心部分。它定義了無關語言而將 HTML 與 XML 文件抽象化為物件的介面，以及對抽象化物件進行處理的機制。在 DOM 的定義中包含：

* DOM core 中的文件結構、樹狀模型，DOM 事件結構：Node, Element, DocumentFragment, Document, DOMImplementation, Event, EventTarget, …
* DOM events 中對 DOM 事件結構（DOM Event Architecture）和特定事件的廣義定義。
* 其他如 DOM Traversal 和 DOM Range。

以 ECMAScript 的觀點來看，DOM 規範所定義的物件被稱為宿主物件（Host objects） 。

### HTML DOM

網頁標記語言 HTML 是依據 DOM 來規格化。在 DOM 核心中，定義了虛擬概念的分層，而 HTML 也定義了元素的意義。 HTML DOM 包含了 HTML 元素的 `className` 屬性與諸如 `document.body` (en-US) 的 API。

HTML 的規格書也定義了在文件上的一些限制；例如，他要求所有 `ul` 元素（代表無順序編號的清單）的子元素必須是 `li 元素（代表清單`中的項目）。而未在標準中定義的元素和屬性通常在規格中被禁用。

其他重要的 API
---------

* setTimeout 和 setInterval 函數首次納入 HTML 標準中的 Window 介面
* XMLHttpRequest：允許傳送非同步 HTTP 請求的 API。
* CSS Object Model：CSSOM 用來將 CSS 的規則轉換為物件。
* WebWorkers：允許平行計算的 API。
* WebSockets：允許低階雙向溝通的 API。
* Canvas 2D Context：canvas 元素的繪圖 API。
Shell
-----

A JavaScript shell allows you to quickly test snippets of JavaScript code without having to reload a web page. They are extremely useful for developing and debugging code.

### 獨立的 JavaScript shell

下列的 JavaScript shell 都是獨立的環境，就像 perl 或是 python 一樣。

* Node.js - Node.js 是一個可以快速建置，可擴充的網路應用程式
* GraalJS - A high performance implementation of the JavaScript programming language. Built on the GraalVM by Oracle Labs.
* ShellJS - Node.js 裡可攜式的 Unix shell 命令
基於瀏覽器的 JavaScript shell
-----------------------

下列 JavaScript shell 需要 Mozilla 才能運作

* Firebug - Firefox 的開發者工具，同樣包函主控台
* Babel REPL - 以瀏覽器為基準的 REPL，主要用來實驗未來的 JavaScript
* TypeScript playground — A browser-based playground for experimenting both new JavaScript features (via the tsc compiler) and TypeScript syntax.
瀏覽器支援
-----

每個網頁開發者都曾經體會過一團混亂的 DOM 支援狀況。某些功能上不同瀏覽器的支援可能差異很大，因為過去重要的 DOM 功能都沒有明確的規範，進而使不同網頁瀏覽器對相同的使用情境實踐了互不相容的功能（像是 Internet Explorer 的事件模型）。最近（截至 2011 年 6 月），由 W3C 與（特別是）WHATWG 對舊功能重新進行詳盡的定義以提升互通性成為了趨勢 。為了跟進這個趨勢，許多網頁瀏覽器也根據這些新規格改進它們的實作。

雖然並未完全可靠，使用 JavaScript 函式庫是解決跨瀏覽器相容問題的最普遍方式。 這些函式庫將 DOM 的功能抽象化，確保其 API 在不同的瀏覽器中能以相似的方式運作。廣為被使用的框架包括 jQuery、prototype 和 YUI。
JavaScript 指南
=============

JavaScript 指南會讓你了解如何使用 JavaScript 並給你這個語言的概觀。若你需要語言功能詳細資訊請參考 JavaScript 參考文件。

章節
--

本指南區分成以下數個章節：

簡介
--

概述：簡介

* 關於本指南
* 關於 JavaScript
* JavaScript 與 Java
* ECMAScript
* 工具
* Hello World
語法與型別
-----

概述：語法與型別

* 基礎語法 & 註解
* 宣告
* 變數範圍
* 變數提升（Hoisting）
* 資料結構與型態
* 字面值
流程控制與錯誤處理
---------

概述：流程控制與錯誤處理

* `if...else`
* `switch`
* `try`/`catch`/`throw`
* Error 物件
* Promises
迴圈與迭代
-----

概述：迴圈與迭代

* `for`
* `while`
* `do...while`
* `break`
* `continue`
* `for..in`
* `for..of`
函數
--

概述：函數

* 定義函數
* 呼叫函數
* 函數範圍
* 閉包（Closure）
* 參數值
* 參數
* 箭頭函數
運算式與運算子
-------

概述：運算式與運算子

* 賦值
* 比較
* 算數運算子
* 位元
* 邏輯運算子
* 條件（三元）運算子
數字與日期
-----

概述：數字與日期

* 數字書寫法
* `Number` 物件
* `Math` 物件
* `Date` 物件
文字格式
----

概述：文字格式 (en-US)

* 字串書寫法 (en-US)
* `String` 物件 (en-US)
* 模板書寫法 (en-US)
* 國際化 (en-US)
* 正規表示法
具索引的集合
------

概述：文字格式 (en-US)

* 陣列 (en-US)
* 型態化陣列 (en-US)
具鍵值的集合
------

概述：具鍵值的集合 (en-US)

* `Map` (en-US)
* `WeakMap` (en-US)
* `Set` (en-US)
* `WeakSet` (en-US)
使用物件
----

概述：使用物件 (en-US)

* 物件與屬性 (en-US)
* 建立物件 (en-US)
* 定義方法 (en-US)
* 取值器與設值器 (en-US)
深入了解物件模型
--------

概述：深入了解物件模型 (en-US)

* 以原形（Prototype）為基礎的 OOP (en-US)
* 建立物件層級 (en-US)
* 繼承 (en-US)
迭代器與產生器
-------

概述：迭代器與產生器 (en-US)

* 迭代器（Iterator） (en-US)
* 可迭代型態（Iterable） (en-US)
* 產生器（Generator） (en-US)
Meta 程式設計
---------

概述：Meta 程式設計 (en-US)

* `Proxy` (en-US)
* Handler 與 Trap (en-US)
* Revocable Proxy (en-US)
* `Reflect` (en-US)
* 次頁 »
JavaScript 錯誤參考資料
=================

在這裡，你可以看到一些由 JavaScript 拋出的錯誤一覽。這些錯誤訊息對你的除錯很有幫助，但拋出的錯誤也不是每次都能講清楚。本頁回提供這些錯誤的詳細資訊。所有的錯誤都是由 `Error` (en-US) 物件所建立的物件，有著 `name` 與 `message`。

錯誤會出現在網路主控台、可能還連接到相應頁面，以幫助你儘速理解程式碼裡面的問題。

錯誤一覽表
-----

In this list, each page is listed by name (the type of error) and message (a more detailed human-readable error message). Together, these two properties provide a starting point toward understanding and resolving the error. For more information, follow the links below!

* InternalError: too much recursion
* RangeError: invalid array length
* ReferenceError: "x" is not defined
* SyntaxError: missing } after property list
* SyntaxError: redeclaration of formal parameter "x"
* SyntaxError: return not in function
* TypeError: "x" has no properties
* TypeError: "x" is (not) "y"
* TypeError: "x" is not a function
參見
--

* 哪裡出錯了？JavaScript 除錯：針對初學者的 JavaScript 除錯入門教程。
extends
=======

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.

* Learn more
* See full compatibility
* Report feedback
**`extends`** 關鍵字被使用於類別（class）宣告 (en-US)或類別（class）表達式 (en-US)中來建立擴展的子類別 。

嘗試一下
----

語法
--
```

class ChildClass extends ParentClass { ... }
```

解釋
--

`extends` 關鍵字可用於建立一個自訂類別或內建類別的子類別。

其繼承之原型 `.prototype` 必須是 `Object` (en-US) 或 `null` (en-US)。

範例
--

### 使用 `extends`

第一個範例是根據 `Polygon`類別建立一個名為 `Square` 的子類別。此範例提取自線上示例。


```js
class Square extends Polygon {
  constructor(length) {
    // Here, it calls the parent class' constructor with lengths
    // provided for the Polygon's width and height
    super(length, length);
    // Note: In derived classes, super() must be called before you
    // can use 'this'. Leaving this out will cause a reference error.
    this.name = "Square";
  }

  get area() {
    return this.height \* this.width;
  }
}
```

### 使用 `extends` 於內建類別

這個範例擴展了內建的 `Date` 類別。此範例提取自線上範例。


```js
class myDate extends Date {
  constructor() {
    super();
  }

  getFormattedDate() {
    var months = [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec",
    ];
    return (
      this.getDate() + "-" + months[this.getMonth()] + "-" + this.getFullYear()
    );
  }
}
```

### 擴展 `null`

像擴展普通類別一樣擴展 `null` (en-US)，但新對象的原型不會繼承 `Object.prototype` (en-US)。


```js
class nullExtends extends null {
  constructor() {}
}

Object.getPrototypeOf(nullExtends); // Function.prototype
Object.getPrototypeOf(nullExtends.prototype); // null

new nullExtends(); //ReferenceError: this is not defined
```

標準
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-class-definitions |

瀏覽器相容性
------

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

參見
--

* Classes
* super
建構子
===

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.

* Learn more
* See full compatibility
* Report feedback
`constructor`（建構子）是個隨著 `class` 一同建立並初始化物件的特殊方法。

語法
--
```

constructor([arguments]) { ... }
```

敘述
--

一個 class 只能有一個稱為 constructor 的特殊物件。如果一個 class 出現兩次以上的 `constructor`，就會發生 `SyntaxError` (en-US) 錯誤。

如果不指定建構子，就會使用預設的建構子。

示例
--

### 使用 `constructor` 方法

這段程式碼是從 classes sample 擷取而來。（線上範例）


```js
class Square extends Polygon {
  constructor(length) {
    // 我們在這裡呼叫了 class 的建構子提供多邊形的長寬值
    super(length, length);
    // 注意：在 derived class 中，super() 必須在使用 this 以前被呼叫。不這樣的話會發生錯誤。
    this.name = "Square";
  }

  get area() {
    return this.height \* this.width;
  }

  set area(value) {
    this.area = value;
  }
}
```

### 預設的建構子

如上文所說：如果不指定建構子，就會使用預設的建構子。對 base classes 而言，預設的建構子長得像這樣：


```js
constructor() {}
```


對 derived class 而言，預設的建構子長得像這樣：


```js
constructor(...args) {
  super(...args);
}
```

規範
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-static-semantics-constructormethod |

瀏覽器相容性
------

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

參見
--

* super()
* `class` expression (en-US)
* `class` declaration (en-US)
* Classes
static
======

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2017.

* Learn more
* See full compatibility
* Report feedback
使用關鍵字 **static** 來定義一個靜態的方法（method）給類別（class），靜態方法在由類別所建立的物件實體（instance）上不能被呼叫，取而代之的是，靜態方法只能由類別本身呼叫。他們通常作為工具函式（utility functions）使用。像是建立物件或複製物件的函式。語法
--
```

static methodName() { ... }
```

敘述
--

靜態方法不須實例化(instantiating)其類別即可被呼叫，但當類別被實例化(instantiating)後則靜態方法不能被呼叫。 靜態方法常被使用在建立應用程式的工具函式(utility functions)。

範例
--

下面的範例示範了許多東西。他示範了如何在一個可以有子類別的類別中實作一個靜態方法。最後示範了靜態方法在什麼情形下正確與錯誤的呼叫。


```js
class Triple {
  static triple(n) {
    n = n || 1; //should not be a bitwise operation
    return n \* 3;
  }
}

class BiggerTriple extends Triple {
  static triple(n) {
    return super.triple(n) \* super.triple(n);
  }
}

console.log(Triple.triple()); // 3
console.log(Triple.triple(6)); // 18
console.log(BiggerTriple.triple(3)); // 81
var tp = new Triple();
console.log(tp.triple()); // 'tp.triple is not a function'.
```

規格
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-class-definitions |

瀏覽器相容性
------

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

你可能會需要看看
--------

* `class` expression (en-US)
* `class` declaration (en-US)
* Classes
URIError
========

**`URIError`** 物件在全域的 URI 處理函式被錯誤使用時作為一個錯誤被拋出。

語法
--
```

new URIError([message[, fileName[, lineNumber]]])
```

### 參數

`message`

可選。具人類可讀性的錯誤說明

`fileName` 
非標準

可選。包含造成錯誤發生的程式碼的檔案名稱

`lineNumber` 
非標準

可選。造成錯誤發生的程式碼行號

說明
--

`URIError` 在全域的 URI 處理函式被傳入了一個錯誤編碼的 URI 時被拋出。

屬性
--

`URIError.prototype` (en-US)

允許對一個 `URIError` 物件增加其屬性。

方法
--

普遍的 `URIError` 自身沒有包含方法，儘管他的確從原型鍊中繼承了一些。

`URIError` 物件實體
---------------

### 屬性

`URIError.prototype.message` (en-US)

Error message. Inherited from `Error` (en-US).

`URIError.prototype.name` (en-US)

Error name. Inherited from `Error` (en-US).

`URIError.prototype.cause` (en-US)

Error cause. Inherited from `Error` (en-US).

`URIError.prototype.fileName` (en-US) 
非標準

Path to file that raised this error. Inherited from `Error` (en-US).

`URIError.prototype.lineNumber` (en-US) 
非標準

Line number in file that raised this error. Inherited from `Error` (en-US).

`URIError.prototype.columnNumber` 
非標準

Column number in line that raised this error. Inherited from `Error` (en-US).

`URIError.prototype.stack` (en-US) 
非標準

Stack trace. Inherited from `Error` (en-US).

範例
--

### Catch 一個 `URIError`


```js
try {
  decodeURIComponent("%");
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message); // "malformed URI sequence"
  console.log(e.name); // "URIError"
  console.log(e.fileName); // "Scratchpad/1"
  console.log(e.lineNumber); // 2
  console.log(e.columnNumber); // 2
  console.log(e.stack); // "@Scratchpad/2:2:3\n"
}
```

### 生成一個 `URIError`


```js
try {
  throw new URIError("Hello", "someFile.js", 10);
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message); // "Hello"
  console.log(e.name); // "URIError"
  console.log(e.fileName); // "someFile.js"
  console.log(e.lineNumber); // 10
  console.log(e.columnNumber); // 0
  console.log(e.stack); // "@Scratchpad/2:2:9\n"
}
```

規範
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard-urierror |

瀏覽器相容性
------

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

參見
--

* `Error` (en-US)
* `URIError.prototype` (en-US)
* `decodeURI()` (en-US)
* `decodeURIComponent()` (en-US)
* `encodeURI()` (en-US)
* `encodeURIComponent()` (en-US)
Infinity
========

全域 **`Infinity`** 屬性是一個表示無窮大的數值。

| `Infinity` 的屬性特性 |
| --- |
| 可寫 | 否 |
| 可列舉 | 否 |
| 可配置 | 否 |

語法
--


```js
Infinity
```

描述
--

`Infinity` 是全域物件屬性，即它是全域範圍內的變數。

`Infinity` 的初始值是 `Number.POSITIVE_INFINITY` (en-US) `Infinity` 值（正無窮大）值大於其他任何數值。該值在數學上表現為無窮大。例如，任何乘以 `Infinity` 的正整數都是 `Infinity`，除以 `Infinity` 的任何數都是 0。

按照 ECMAScript 5 規範，在 JavaScript 1.8.5 / Firefox 4 實作的 `Infinity` 乃唯讀屬性。

範例
--


```js
console.log(Infinity); /\* Infinity \*/
console.log(Infinity + 1); /\* Infinity \*/
console.log(Math.pow(10, 1000)); /\* Infinity \*/
console.log(Math.log(0)); /\* -Infinity \*/
console.log(1 / Infinity); /\* 0 \*/
```

規範
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-value-properties-of-the-global-object-infinity |

瀏覽器相容性
------

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

參見
--

* `Number.NEGATIVE_INFINITY` (en-US)
* `Number.POSITIVE_INFINITY` (en-US)
* `Number.isFinite` (en-US)
RangeError
==========

\*\*`RangeError`\*\*物件在一個給定的值不在允許的集合或範圍內時被作為一個錯誤拋出

語法
--


```js
new RangeError([message[, fileName[, lineNumber]]])
```

### 參數

`message`

可選。具人類可讀性的錯誤說明

`fileName` 
非標準

可選。包含造成錯誤發生的程式碼的檔案名稱

`lineNumber` 
非標準

可選。造成錯誤發生的程式碼行號

說明
--

當試著往一個 function 傳入一個不被其允許的值作為參數時，一個`RangeError`被拋出。這可在多種情況遭遇到，例如傳入一個不被允許的字串值到 `String.prototype.normalize()` (en-US)，或試著透過 `Array` constructor 用一個不合法的長度來創建一個陣列，或往數值方法像是`Number.toExponential()`、`Number.toFixed()`、`Number.toPrecision()` (en-US) 傳進糟糕的值。

屬性
--

`RangeError.prototype` (en-US)

允許對一個 `RangeError` 物件增加其屬性。

方法
--

普遍的 `RangeError` 自身沒有包含方法，儘管他的確從原型鍊中繼承了一些。

`RangeError` 物件實體
-----------------

### 屬性

`RangeError.prototype.message` (en-US)

Error message. Inherited from `Error` (en-US).

`RangeError.prototype.name` (en-US)

Error name. Inherited from `Error` (en-US).

`RangeError.prototype.cause` (en-US)

Error cause. Inherited from `Error` (en-US).

`RangeError.prototype.fileName` (en-US) 
非標準

Path to file that raised this error. Inherited from `Error` (en-US).

`RangeError.prototype.lineNumber` (en-US) 
非標準

Line number in file that raised this error. Inherited from `Error` (en-US).

`RangeError.prototype.columnNumber` 
非標準

Column number in line that raised this error. Inherited from `Error` (en-US).

`RangeError.prototype.stack` (en-US) 
非標準

Stack trace. Inherited from `Error` (en-US).

範例
--

### 使用 `RangeError`（數值）


```js
function check(n) {
  if (!(n >= -500 && n <= 500)) {
    throw new RangeError("The argument must be between -500 and 500.");
  }
}

try {
  check(2000);
} catch (error) {
  if (error instanceof RangeError) {
    // Handle the error.
  }
}
```

### 使用 `RangeError`（非數值）


```js
function check(value) {
  if (["apple", "banana", "carrot"].includes(value) === false) {
    throw new RangeError(
      'The argument must be an "apple", "banana", or "carrot".',
    );
  }
}

try {
  check("cabbage");
} catch (error) {
  if (error instanceof RangeError) {
    // Handle the error.
  }
}
```

規範
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-native-error-types-used-in-this-standard-rangeerror |

瀏覽器相容性
------

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

參見
--

* `Error` (en-US)
* `RangeError.prototype` (en-US)
* `Array`
* `Number.toExponential()`
* `Number.toFixed()`
* `Number.toPrecision()` (en-US)
* `String.prototype.normalize()` (en-US)
Number
======

**`Number`** JavaScript 物件是允許你操作數值的包覆物件。`Number` 物件是以 `Number()` 建構子來建立的。

語法
--


```js
new Number(value)
```

### 參數

`value`

用來建立物件的數值。

說明
--

`Number` 物件主要的用途：

* 如果參數沒辦法被轉換成數字，則它會回傳 `NaN` 。
* 在不是使用建構式的情境中(即不用 `new` 運算子), `Number` 可以被用來轉換型別.
屬性
--

`Number.EPSILON` (en-US)

介於 1 和大於 1 的最小值之可表示的差。

`Number.MAX_SAFE_INTEGER` (en-US)

JavaScript 中 IEEE-754 雙精度範圍間的最大整數 (`2^53 - 1`) 。

`Number.MAX_VALUE` (en-US)

可表示的最大正整數。

`Number.MIN_SAFE_INTEGER` (en-US)

JavaScript 中 IEEE-754 雙精度範圍間的最小整數 (`-(2^53 - 1)`) 。

`Number.MIN_VALUE` (en-US)

可表示的最小值，即最靠近 0 的正整數?(`5.00×103245.00\times10^{324}`)。

`Number.NaN` (en-US)

特別用來表示**非數值**的物件。

`Number.NEGATIVE_INFINITY` (en-US)

特別用來表示**負無窮**的數值。

`Number.POSITIVE_INFINITY` (en-US)

特別用來表示**正無窮**的數值。

`Number.prototype` (en-US)

允許被添加到 `Number` 物件的屬性。

方法
--

`Number.isNaN()` (en-US)

判斷傳入的值是不是 NaN.

`Number.isFinite()` (en-US)

判斷傳入的值是不是一個有限的數值。

`Number.isInteger()` (en-US)

判斷傳入的值是不是一個整數。

`Number.isSafeInteger()` (en-US)

判斷傳入的值是不是在 IEEE-754 雙精度範圍間 (即介於 `-(2^53 - 1)` 和 `2^53 - 1`之前)。

`Number.parseFloat()` (en-US)

這個方法和全域物件的 `parseFloat()` (en-US) 相同。

`Number.parseInt()` (en-US)

這個方法和全域物件的 `parseInt()` 相同。

`Number` 實體
-----------

所有 `Number` 實體都會繼承其建構式的 `Number.prototype` (en-US)。`Number` 的原型物件可以被修改並作用在所有 `Number` 實體。

### 方法

`Number.isNaN()` (en-US)

判斷傳入的值是不是 NaN.

`Number.isFinite()` (en-US)

判斷傳入的值是不是一個有限的數值。

`Number.isInteger()` (en-US)

判斷傳入的值是不是一個整數。

`Number.isSafeInteger()` (en-US)

判斷傳入的值是不是在 IEEE-754 雙精度範圍間 (即介於 `-(2^53 - 1)` 和 `2^53 - 1`之前)。

`Number.parseFloat()` (en-US)

這個方法和全域物件的 `parseFloat()` (en-US) 相同。

`Number.parseInt()` (en-US)

這個方法和全域物件的 `parseInt()` 相同。

範例
--

### 使用 `Number` 物件去指派值給數值變數

下列的範例使用 `Number` 物件的屬性去指派值給數個數值變數：


```js
var biggestNum = Number.MAX\_VALUE;
var smallestNum = Number.MIN\_VALUE;
var infiniteNum = Number.POSITIVE\_INFINITY;
var negInfiniteNum = Number.NEGATIVE\_INFINITY;
var notANum = Number.NaN;
```

### `Number` 的整數範圍

下面的範例展示了最小和最大的整數，其可以被表示成 `Number` 物件(細節請參考 ECMAScript standard, chapter *8.5 The Number Type*)：


```js
var biggestInt = 9007199254740992;
var smallestInt = -9007199254740992;
```


當在解析已經被序列化的 JSON 的資料時，填入這個範圍之外的整數並且 JSON 剖析器強制將其轉成 `Number` 型別造成損壞是可預期的。將範圍之外的正數換成以 `String` 表示反倒是一個可行的替代方案。

### 使用 `Number` 轉換 `Date` 物件為 Unix 時間戳記

下面的範例將 `Number` 視為函式，並且使用它將 `Date` 轉換成時間戳記：


```js
var d = new Date("December 17, 1995 03:24:00");
console.log(Number(d)); // 819199440000
```

### 轉換數值字串成數值


```js
Number("123"); // 123
Number("12.3"); // 12.3
Number(""); // 0
Number("0x11"); // 17
Number("0b11"); // 3
Number("0o11"); // 9
Number("foo"); // NaN
Number("100a"); // NaN
```

規範
--

| Specification |
| --- |
| ECMAScript Language Specification # sec-number-objects |

瀏覽器相容性
------

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

參見
--

* `NaN`
* The `Math` global object