aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/javascript/reference/global_objects/number/index.html
blob: d53c952ea38a7ac66fe237988dc34d5aacdfc3bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
---
title: Number
slug: Web/JavaScript/Reference/Global_Objects/Number
tags:
  - JavaScript
  - Number
  - Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Number
---
<div>{{JSRef}}</div>

<p> JavaScript 的 <strong><code>Number</code></strong> 对象是经过封装的能让你处理数字值的对象。<code>Number</code> 对象由 <code>Number()</code> 构造器创建。</p>

<p>JavaScript的<code>Number</code>类型为<a href="https://en.wikipedia.org/wiki/Floating-point_arithmetic">双精度IEEE 754 64位浮点</a>类型。</p>

<p>最近出了stage3{{jsxref("BigInt")}} 任意精度数字类型,已经进入stage3规范</p>

<h2 id="Syntax" name="Syntax">语法</h2>

<pre>new Number(<em>value</em>);
var <em>a</em> = new Number('123'); // a === 123 is false
var <em>b</em> = Number('123'); // b === 123 is true
<em>a</em> instanceof Number; // is true
<em>b</em> instanceof Number; // is false</pre>

<h3 id="Parameters" name="Parameters">参数</h3>

<dl>
 <dt><code>value</code></dt>
 <dd>被创建对象的数字值。</dd>
</dl>

<h2 id="Description" name="Description">描述</h2>

<p><code>Number</code> 对象主要用于:</p>

<ul>
 <li>如果参数无法被转换为数字,则返回 {{jsxref("NaN")}}</li>
 <li>在非构造器上下文中 (如:没有 {{jsxref("Operators/new", "new")}} 操作符),<code>Number</code> 能被用来执行类型转换。</li>
</ul>

<h2 id="Properties" name="Properties">属性</h2>

<dl>
 <dt>{{jsxref("Number.EPSILON")}}</dt>
 <dd>两个可表示(representable)数之间的最小间隔。</dd>
 <dt>{{jsxref("Number.MAX_SAFE_INTEGER")}}</dt>
 <dd>JavaScript 中最大的安全整数 (<code>2<sup>53</sup> - 1</code>)。</dd>
 <dt>{{jsxref("Number.MAX_VALUE")}}</dt>
 <dd>能表示的最大正数。最小的负数是 <code>-MAX_VALUE</code></dd>
 <dt>{{jsxref("Number.MIN_SAFE_INTEGER")}}</dt>
 <dd>JavaScript 中最小的安全整数 (<code>-(2<sup>53</sup> - 1)</code>).</dd>
 <dt>{{jsxref("Number.MIN_VALUE")}}</dt>
 <dd>能表示的最小正数即最接近 0 的正数 (实际上不会变成 0)。最大的负数是 <code>-MIN_VALUE</code></dd>
 <dt>{{jsxref("Number.NaN")}}</dt>
 <dd>特殊的“非数字”值。</dd>
 <dt>{{jsxref("Number.NEGATIVE_INFINITY")}}</dt>
 <dd>特殊的负无穷大值,在溢出时返回该值。</dd>
 <dt>{{jsxref("Number.POSITIVE_INFINITY")}}</dt>
 <dd>特殊的正无穷大值,在溢出时返回该值。</dd>
 <dt>{{jsxref("Number.prototype")}}</dt>
 <dd>Number 对象上允许的额外属性。</dd>
</dl>

<h2 id="Methods" name="Methods">方法</h2>

<dl>
 <dt>{{jsxref("Number.isNaN()")}}</dt>
 <dd>确定传递的值是否是 NaN。</dd>
 <dt>{{jsxref("Number.isFinite()")}}</dt>
 <dd>确定传递的值类型及本身是否是有限数。</dd>
 <dt>{{jsxref("Number.isInteger()")}}</dt>
 <dd>确定传递的值类型是“number”,且是整数。</dd>
 <dt>{{jsxref("Number.isSafeInteger()")}}</dt>
 <dd>确定传递的值是否为安全整数 ( -<code>(2<sup>53</sup> - 1)</code> 至 <code>2<sup>53</sup> - 1之间</code>)。</dd>
 <dt>{{jsxref("Number.toInteger()")}} {{obsolete_inline}}</dt>
 <dd>计算传递的值并将其转换为整数 (或无穷大)。</dd>
</dl>

<div>
<dl>
 <dt>{{jsxref("Number.parseFloat()")}}</dt>
 <dd>和全局对象 {{jsxref("parseFloat", "parseFloat()")}} 一样。</dd>
 <dt>{{jsxref("Number.parseInt()")}}</dt>
 <dd>和全局对象 {{jsxref("parseInt", "parseInt()")}} 一样。</dd>
</dl>
</div>

<h2 id="Number_instances" name="Number_instances"><code>Number</code> 实例</h2>

<p>所有 <code>Number</code> 实例都继承自 {{jsxref("Number.prototype")}}<code>被修改的 Number</code> 构造器的原型对象对全部 <code>Number</code> 实例都生效。</p>

<h3 id="Methods_of_number_instance" name="Methods_of_number_instance">方法</h3>

<div>{{page('/zh-CN/docs/JavaScript/Reference/Global_Objects/Number/prototype', 'Methods')}}</div>

<h2 id="Examples" name="Examples">示例</h2>

<h3 id="Example_Using_the_Number_object_to_assign_values_to_numeric_variables" name="Example:_Using_the_Number_object_to_assign_values_to_numeric_variables">使用 Number 对象给数字变量赋值</h3>

<p>下例使用 <code>Number</code> 对象的属性给几个数字变量赋值:</p>

<pre class="brush: 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;
</pre>

<h3 id="整数类型的范围">整数类型的范围</h3>

<p>JavaScript 能够准确表示的整数范围在<code>-2^53</code><code>2^53</code>之间(不含两个端点),超过这个范围,无法精确表示这个整数。 (详情请参阅 ECMAScript standard, chapter <em><a href="https://www.ecma-international.org/ecma-262/#sec-ecmascript-language-types-number-type">6.1.6 The Number Type</a></em>):</p>

<pre class="brush: js">var biggestInt = Number.MAX_SAFE_INTEGER;
//9007199254740991
var smallestInt = Number.MIN_SAFE_INTEGER;
//-9007199254740991</pre>

<p>在解析序列化的JSON时,如果JSON解析器将它们强制转换为Number类型,那么超出此范围的整数值可能会被破坏。在工作中使用{{jsxref("String")}} 类型代替,是一个可行的解决方案。</p>

<h3 id="Example_Using_Number_to_convert_a_Date_object" name="Example:_Using_Number_to_convert_a_Date_object">使用 <code>Number</code> 转换 <code>Date</code> 对象</h3>

<p>下例使用 Number 作为函数来转换 <code>Date</code> 对象为数字值:</p>

<pre class="brush: js">var d = new Date("December 17, 1995 03:24:00");
print(Number(d));
</pre>

<p>这将输出 "819199440000"。</p>

<h3 id="转换数字字符串为数字">转换数字字符串为数字</h3>

<pre class="brush: js" dir="rtl">Number('123')     // 123
Number('12.3')    // 12.3
<code>Number('12.00')   // 12</code>
Number('123e-1')  // 12.3
Number('')        // 0
Number(null)      // 0
Number('0x11')    // 17
Number('0b11')    // 3
Number('0o11')    // 9
Number('foo')     // NaN
Number('100a')    // NaN
Number('-Infinity') //-Infinity</pre>

<h2 id="Specifications">Specifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('ES1')}}</td>
   <td>{{Spec2('ES1')}}</td>
   <td>初始定义。 实现于 JavaScript 1.1.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.7', 'Number')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td></td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-number-objects', 'Number')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td>新增了方法和属性: {{jsxref("Number.EPSILON", "EPSILON")}}, {{jsxref("Number.isFinite", "isFinite")}}, {{jsxref("Number.isInteger", "isInteger")}}, {{jsxref("Number.isNaN", "isNaN")}}, {{jsxref("Number.parseFloat", "parseFloat")}}, {{jsxref("Number.parseInt", "parseInt")}}</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-number-objects', 'Number')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td></td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2>

<div>
<p>{{Compat("javascript.builtins.Number")}}</p>
</div>

<h2 id="See_also" name="See_also">参阅</h2>

<ul>
 <li>{{jsxref("NaN")}}</li>
 <li>全局对象 {{jsxref("Math")}} </li>
 <li>Integers with arbitrary precision: {{jsxref("BigInt")}}</li>
 <li><a href="https://medium.com/@maximus.koretskyi/javascripts-number-type-8d59199db1b6#.9whwe88tz">Number type in details</a></li>
</ul>