forked from iliakan/es5
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathx4.html
executable file
·220 lines (211 loc) · 53.7 KB
/
x4.html
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
<!DOCTYPE html>
<html class="split chapter"><head>
<meta charset="utf-8"><title>4 Общий обзор | ES5 на русском</title><link rel="stylesheet" href="style.css"><link href="x3.html" title="3 Нормативно-справочные материалы " rel="prev">
<link href="index.html" title="Содержание" rel="index">
<link href="x5.html" title="5 Соглашения о наименованиях " rel="next">
</head><body><div class="head">
<h2 id="top">Спецификация ECMAScript 5.1 с аннотациями <span id="timestamp"></span></h2>
<!--left..-->
<div id="slogan">
<div id="share-toggler">Поделиться</div>
<div class="share">
<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://es5.javascript.ru/" data-lang="ru" data-size="large" data-count="horizontal">Твитнуть</a>
<div id="fb-root"></div>
<div style="margin-bottom:5px" class="fb-like" data-href="http://es5.javascript.ru" data-send="false" data-action="recommend" data-layout="button_count" data-width="300" data-show-faces="false" data-font="arial"></div>
<div class="vk-share-wrapper">
<script src="http://vkontakte.ru/js/api/share.js?9" charset="windows-1251"></script>
<script src="misc.js"></script>
</div>
<div style="margin-top:6px">
<g:plusone annotation="inline" href="http://es5.javascript.ru/" width="120" size="standard" style="vertical-align:middle"></g:plusone>
</div>
</div>
</div>
<!--..left-->
<div id="annotations">
</div>
</div>
<nav><a href="x3.html">← Нормативно-справочные материалы </a> – <a href="index.html" class="toc-nav">Содержание</a> – <a href="x5.html">5 Соглашения о наименованиях →</a>
<ol class="toc"><li><a href="x4.html#x4" id="x4-toc">4 Общий обзор</a>
<b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> <ol><li><a href="x4.html#x4.1" id="x4.1-toc">4.1 Скрипты для Интернет</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.2" id="x4.2-toc">4.2 Общий обзор языка</a>
<b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> <ol><li><a href="x4.html#x4.2.1" id="x4.2.1-toc">4.2.1 Объекты</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.2.2" id="x4.2.2-toc">4.2.2 Строгий вариант языка ECMAScript</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li></ol></li><li><a href="x4.html#x4.3" id="x4.3-toc">4.3 Определения</a>
<b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> <ol><li><a href="x4.html#x4.3.1" id="x4.3.1-toc">4.3.1 Тип</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.2" id="x4.3.2-toc">4.3.2 Примитивное значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.3" id="x4.3.3-toc">4.3.3 Объект</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.4" id="x4.3.4-toc">4.3.4 Конструктор</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.5" id="x4.3.5-toc">4.3.5 Прототип</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.6" id="x4.3.6-toc">4.3.6 Родной объект</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.7" id="x4.3.7-toc">4.3.7 Встроенный объект</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.8" id="x4.3.8-toc">4.3.8 Объект среды</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.9" id="x4.3.9-toc">4.3.9 Неопределенное значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.10" id="x4.3.10-toc">4.3.10 Неопределенный тип</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.11" id="x4.3.11-toc">4.3.11 Пустое значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.12" id="x4.3.12-toc">4.3.12 Тип Null</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.13" id="x4.3.13-toc">4.3.13 Булево значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.14" id="x4.3.14-toc">4.3.14 Тип Boolean</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.15" id="x4.3.15-toc">4.3.15 Объект Boolean</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.16" id="x4.3.16-toc">4.3.16 Строковое значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.17" id="x4.3.17-toc">4.3.17 Тип String</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.18" id="x4.3.18-toc">4.3.18 Объект String</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.19" id="x4.3.19-toc">4.3.19 Числовое значение</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.20" id="x4.3.20-toc">4.3.20 Тип Number</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.21" id="x4.3.21-toc">4.3.21 Объект Number</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.22" id="x4.3.22-toc">4.3.22 Бесконечность</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.23" id="x4.3.23-toc">4.3.23 Не число</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.24" id="x4.3.24-toc">4.3.24 Функция</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.25" id="x4.3.25-toc">4.3.25 Встроенная функция</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.26" id="x4.3.26-toc">4.3.26 Свойство</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.27" id="x4.3.27-toc">4.3.27 Метод</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.28" id="x4.3.28-toc">4.3.28 Встроенный метод</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.29" id="x4.3.29-toc">4.3.29 Атрибут</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.30" id="x4.3.30-toc">4.3.30 Собственное свойство</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li><li><a href="x4.html#x4.3.31" id="x4.3.31-toc">4.3.31 Наследуемое свойство</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b> </li></ol></li></ol></li></ol></nav>
<h2 id="x4">4 Общий обзор <a href="#x4">#</a> <a href="#x4-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h2>
<p>
Данный раздел содержит описание языка ECMAScript, не являющееся нормативным.</p>
<p>
ECMAScript представляет собой объектно-ориентированный язык программирования, предназначенный для проведения вычислений с вычислительными объектами и управления этими объектами в среде выполнения. В соответствии с определением, приведенном в данном документе, язык ECMAScript не предназначен для использования в качестве самодостаточной вычислительной системы – в данной спецификации даже отсутствуют средства для ввода внешних данных или вывода результатов вычислений. Однако, предполагается, что вычислительная среда для программы на языке ECMAScript предоставит не только объекты и иные средства, описанные в настоящей спецификации, но и некоторые объекты, определяемые конкретной <I>средой</I>. Описание и поведение этих объектов не является предметом данной спецификации, однако необходимо отметить, что упомянутые объекты могут предоставлять определенные свойства, к которым можно обратиться из программы, написанной на ECMAScript, и определенные функции, которые можно вызвать из программы на ECMAScript.</p>
<p>
<i><b>Скриптовый язык</b></i> – это язык программирования, используемый для управления средствами существующей системы, а также для их настройки и автоматизации. В таких системах пользовательский интерфейс уже имеет набор полезных функциональных возможностей, а скриптовый язык является лишь механизмом, позволяющим ими программно управлять. Таким образом, считается, что существующая система обеспечивает среду объектов и средств, дополняющую возможности скриптового языка. Скриптовый язык предназначен для использования как профессиональными программистами, так и любителями.</p>
<p>
Изначально ECMAScript задумывался как <i><b>язык веб-скриптов</b></i>, обеспечивающий механизм, позволяющий оживлять интернет-страницы браузеров и производить вычисления на стороне сервера в рамках архитектуры клиент-сервер. ECMAScript может предоставлять основные скриптовые возможности для множества сред выполнения, поэтому в настоящем документе основной скриптовый язык указан без привязки к какой-либо конкретной среде.</p>
<p>
Некоторые возможности языка ECMAScript аналогичны возможностям, используемым в других языках программирования, в частности – языкам Java<span class="symbol">™</span>, Self и Scheme, описание которых содержится в следующей документации:</p>
<p>
Gosling, James, Bill Joy and Guy Steele. The Java<sup><span class="symbol">™</span></sup> Language Specification. Addison Wesley Publishing Co., 1996.</p>
<p>
Ungar, David, and Smith, Randall B. Self: The Power of Simplicity. OOPSLA '87 Conference Proceedings, pp. 227–241, Orlando, FL, October 1987.</p>
<p>
IEEE Standard for the Scheme Programming Language. IEEE Std 1178-1990.</p>
<h3 id="x4.1">4.1 Скрипты для Интернет <a href="#x4.1">#</a> <a href="#x4.1-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h3>
<p>
Веб-браузер предоставляет среду выполнения ECMAScript для вычислений, производимых на стороне клиента, например – объекты, представляющие окна, меню, всплывающие окна, диалоговые окна, текстовые поля, привязки, фреймы, историю посещений страниц, куки-файлы, а также ввод и вывод информации. Кроме того, среда выполнения предоставляет средства для подключения скриптового кода к таким событиям, как изменение фокуса, загрузка страницы и изображения, выход со страницы, ошибка и отмена, выбор, отправка формы, действия мышью. Скриптовый код появляется внутри HTML-кода, а отображаемая страница представляет собой сочетание, с одной стороны – элементов пользовательского интерфейса, а с другой стороны – текста и изображений, как статичных, так и вычисленных. Скриптовый код реагирует на действия пользователя, поэтому потребность в основной программе отсутствует.</p>
<p>
Веб-сервер предоставляет другую среду выполнения для вычислений, производимых на стороне сервера, включая объекты, представляющие запросы, клиентов и файлы, а также механизмы для блокировки и совместного использования данных. Благодаря использованию одновременно скриптов на стороне браузера и на стороне сервера, можно распределить вычисления между клиентом и сервером, и при этом обеспечить персонализированный пользовательский интерфейс для веб-приложения.</p>
<p>
Каждый веб-браузер и сервер, поддерживающий ECMAScript, предоставляет свою собственную среду выполнения, дополняя среду выполнения языка ECMAScript.</p>
<h3 id="x4.2">4.2 Общий обзор языка <a href="#x4.2">#</a> <a href="#x4.2-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h3>
<p>
Приведенный ниже краткий обзор языка ECMAScript является неофициальным, так как в нем описываются не все компоненты языка. Данный обзор не является часть собственно стандарта.</p>
<p>
ECMAScript является объектным языком: базовый язык и средства выполнения представлены объектами, а программа на ECMAScript представляет собой совокупность общающихся объектов. <i><b>Объект</b></i> в ECMAScript представляет собой набор <i><b>свойств</b></i>, каждое из которых обладает <i><b>атрибутами</b></i> в количестве ноль или более, которые определяют, как каждое из свойств может использоваться: например, когда атрибут Writable какого-либо свойства установлен в <b>false</b>, попытка выполняемого кода на ECMAScript изменить значение этого свойства не увенчается успехом. Свойства являются контейнерами, в которых содержатся другие объекты, <i><b>примитивные значения</b></i> или<i><b> функции</b></i>. Примитивное значение является элементом одного из следующих встроенных типов: <a href="x8.html#x8.1" class="term-ref"><b>Undefined</b></a>, <a href="x8.html#x8.2" class="term-ref"><b>Null</b></a>, <a href="x8.html#x8.3" class="term-ref"><b>Boolean</b></a>, <a href="x8.html#x8.5" class="term-ref"><b>Number</b></a>, <a href="x8.html#x8.4" class="term-ref"><b>String</b></a>. Объект является элементом оставшегося из встроенных типов – <a href="x8.html#x8.6" class="term-ref"><b>Object</b></a>, а функция является <a href="x8.html#callable" class="term-ref">вызываемым объектом</a>. Функция, связанная с объектом через свойство, называется <i><b>методом</b></i>.</p>
<p>
ECMAScript определяет набор <i><b>встроенных объектов</b></i>, завершающих определение сущностей ECMAScript. К этим встроенным объектам относится объект <a href="x15.1.html#x15.1" class="term-ref">global object</a>, объект <b><a href="x15.2.html#x15.2" class="term-ref">Object</a></b>, объект <b><a href="x15.3.html#x15.3" class="term-ref">Function</a></b>, объекты <b><a href="x15.4.html#x15.4" class="term-ref">Array</a></b>, <b><a href="x15.5.html#x15.5" class="term-ref">String</a></b>, <b><a href="x15.6.html#x15.6" class="term-ref">Boolean</a></b>, <b><a href="x15.7.html#x15.7" class="term-ref">Number</a></b>, <b><a href="x15.8.html#x15.8" class="term-ref">Math</a></b>, <b><a href="x15.9.html#x15.9" class="term-ref">Date</a></b>, <b><a href="x15.10.html#x15.10" class="term-ref">RegExp</a></b>, <b><a href="x15.12.html#x15.12" class="term-ref">JSON</a></b>, а также объекты Error: <b><a href="x15.11.html#x15.11" class="term-ref">Error</a></b>, <b><a href="x15.11.html#x15.11.6.1" class="term-ref">EvalError</a></b>, <b><a href="x15.11.html#x15.11.6.2" class="term-ref">RangeError</a></b>, <b><a href="x15.11.html#x15.11.6.3" class="term-ref">ReferenceError</a></b>, <b><a href="x15.11.html#x15.11.6.4" class="term-ref">SyntaxError</a></b>, <b><a href="x15.11.html#x15.11.6.5" class="term-ref">TypeError</a></b> и <b><a href="x15.11.html#x15.11.6.6" class="term-ref">URIError</a></b>.</p>
<p>
ECMAScript также определяет набор встроенных <i><b>операторов</b></i>. К ним относятся различные <a href="x11.html#x11.4" class="term-ref">унарные</a>, <a href="x11.html#x11.5" class="term-ref">мультипликативные</a>, <a href="x11.html#x11.6" class="term-ref">аддитивные операторы</a>, <a href="x11.html#x11.7" class="term-ref">операторы побитового сдвига</a>, <a href="x11.html#x11.8" class="term-ref">операторы отношения</a>, <a href="x11.html#x11.9" class="term-ref">операторы равенства</a>, <a href="x11.html#x11.10" class="term-ref">двоичные побитовые операторы</a>, <a href="x11.html#x11.11" class="term-ref">двоичные логические операторы</a>, <a href="x11.html#x11.13" class="term-ref">операторы присваивания</a> и <a href="x11.html#x11.14" class="term-ref">оператор-запятая</a>.</p>
<p>
Синтаксис ECMAScript схож с синтаксисом языка Java, и это не случайно. Синтаксис ECMAScript не является строгим, что позволяет использовать ECMAScript в качестве легкого и простого языка. Например, для переменной не обязательно объявлять тип, типы не связаны со свойствами, а перед вызовом определяемых функций не обязательно делать их объявление.</p>
<h4 id="x4.2.1">4.2.1 Объекты <a href="#x4.2.1">#</a> <a href="#x4.2.1-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
Язык ECMAScript не содержит классов, подобным классам в языках C++, Smalltalk, или Java. Вместо этого объекты могут создаваться различными способами, в том числе – посредством буквенного обозначения или с помощью <i><b>конструкторов</b></i>, которые создают объекты и выполняют код, инициализирующий их полностью или частично путем присвоения их свойствам начальных значений. Каждый конструктор является функцией, которая обладает свойством “<code><b>prototype</b></code>”, используемым для реализации <i><b>прототипного наследования</b></i> и <i><b>разделяемых свойств</b></i>. Для создания объектов используются конструкторы в выражениях <b>new</b>, например: <code><b>new Date(2009,11)</b></code> создает новый объект Date. Последствия вызова конструктора без использования <b>new</b> зависят от этого конструктора. Например, вызов <code><b>Date()</b></code> создает не объект, а строковое представление текущей даты и времени.</p>
<p>
Каждый объект, созданный конструктором, содержит неявную ссылку (называемую <i>прототипом </i>объекта) на значение свойства “<code><b>prototype</b></code>” его конструктора. В свою очередь, прототип может обладать неявной ссылкой (имеющей значение, отличное от null) на свой прототип, и так далее. Это называется <I>цепочкой прототипов</I>. Когда используется ссылка на свойство объекта, она является ссылкой на свойство с таким именем у первого объекта цепочки прототипов, который содержит свойство с таким именем. Иными словами, сначала на наличие этого свойства обследуется непосредственно указанный объект, и, если этот объект содержит свойство с таким именем, значит, ссылка указывает на это свойство. В противном случае указанное свойство ищется в прототипе этого объекта, и так далее.</p>
<div class="figure">
<p><img src="figure1.gif" alt="text equivalent follows in 3rd paragraph below that begins, 'CF is a constructor…'"></p>
<p class="caption">Рис. 1. Отношение между объектом и прототипом</p>
</div>
<p>
В целом, в объектно-ориентированных языках, использующих классы, состояние заключено в экземплярах, методы находятся в классах, а наследуется только структура и поведение. В ECMAScript, и состояние и методы находятся в объектах. Структура, поведение, состояние – все это наследуется.</p>
<p>
Все объекты, которые прямо не содержат какого-либо конкретного свойства, которое содержит их прототип, разделяют это свойство и его значение. Это проиллюстрировано на Рис. 1:</p>
<p>
<b>CF</b> является конструктором, а также – объектом. С использованием выражений <code><b>new</b></code> было создано пять объектов: <b>cf</b><sub><b>1</b></sub>, <b>cf</b><sub><b>2</b></sub>, <b>cf</b><sub><b>3</b></sub>, <b>cf</b><sub><b>4</b></sub> и <b>cf</b><sub><b>5</b></sub>, каждый из них содержит свойства с именами <code>q1</code> и <code>q2</code>. Пунктирной линией обозначены отношения неявного прототипа. Например, прототипом <b>cf</b><sub><b>3</b></sub> является <b>CF</b><sub><b>p</b></sub>. Сам конструктор <b>CF</b> обладает двумя свойствами – с именами <code>P1</code> и <code>P2</code>, которые не видны для <b>CF</b><sub><b>p</b></sub>, <b>cf</b><sub><b>1</b></sub>, <b>cf</b><sub><b>2</b></sub>, <b>cf</b><sub><b>3</b></sub>, <b>cf</b><sub><b>4</b></sub> и <b>cf</b><sub><b>5</b></sub>. Свойство <code>CFP1</code> в <b>CF</b><sub><b>p</b></sub> разделяют <b>cf</b><sub><b>1</b></sub>, <b>cf</b><sub><b>2</b></sub>, <b>cf</b><sub><b>3</b></sub>, <b>cf</b><sub><b>4</b></sub> и <b>cf</b><sub><b>5</b></sub> (а <b>CF </b>не разделяет этого свойства), как и все свойства в неявной цепочке прототипов <b>CF</b><sub><b>p</b></sub> с именами, отличными от <code>q1</code>, <code>q2</code> или <code>CFP1</code>. Обратите внимание на отсутствие неявной прототипной связи между <b>CF</b> и <b>CF</b><sub><b>p</b></sub>.</p>
<p>
В отличие от объектно-ориентированных языков, использующих классы, в языке ECMAScript свойства могут добавляться к объектам динамически путем присвоения им значений. То есть, конструкторы не обязаны указывать имена или присваивать значения всем или некоторым свойствам создаваемого объекта. На схеме, приведенной выше, можно добавить новое разделяемое свойство для <b>cf</b><sub><b>1</b></sub>, <b>cf</b><sub><b>2</b></sub>, <b>cf</b><sub><b>3</b></sub>, <b>cf</b><sub><b>4</b></sub> и <b>cf</b><sub><b>5</b></sub>, присвоив свойству <b>CF</b><sub><b>p</b></sub> новое значение.</p>
<h4 id="x4.2.2">4.2.2 Строгий вариант языка ECMAScript <a href="#x4.2.2">#</a> <a href="#x4.2.2-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
В языке ECMAScript допускается возможность того, что некоторые пользователи могут захотеть ограничить использование некоторых свойств, доступных в языке. Это может быть сделано в интересах безопасности, во избежание уязвимости для ошибок, для улучшенного контроля ошибок, и просто по личному усмотрению этих пользователей. Чтобы предоставить такую возможность, ECMAScript определяет строгий вариант языка. В строгом варианте языка отсутствуют некоторые специальные синтаксические и семантические свойства, присущие обычному языку ECMAScript, а подробная семантика некоторых функциональностей изменена. Кроме того, в строгом варианте языка описаны дополнительные состояния ошибки, при возникновении которых появляется сообщение об исключении в ситуациях, которые в стандартной (нестрогой) форме языка не считаются ошибками.</p>
<p>
Обычно строгий вариант ECMAScript называют <i>строгим режимом</i> ("strict mode" - прим. перев.) языка. Выбор строгого режима и использование синтаксиса и семантики строгого режима языка явным образом производится на уровне конкретных единиц кода ("code unit", смысл термина здесь не указан - прим. перев.) на ECMAScript. Поскольку выбор строгого режима производится на уровне синтаксической кодовой единицы, этот строгий режим вводит ограничения, действующие только локально внутри такой кодовой единицы. Строгий режим не ограничивает и не изменяет какого-либо аспекта семантики языка, который должен действовать одинаково для множества кодовых единиц. Готовая программа на ECMAScript может быть написана как для кодовых единиц с использованием строгого режима, так и для кодовых единиц с обычным режимом языка. В этом случае строгий режим применяется только при исполнении кода, заданного в рамках <a href="x10.html#x10.1.1" class="term-ref">кодовых единиц в строгом режиме</a>.
</p>
<p>
В целях соответствия данной Спецификации, реализация ECMAScript должна обеспечить реализацию как полной (неограниченной) версии языка, так и строгого режима ECMAScript в соответствии с описанием, приведенным в данной Спецификации. Кроме того, реализация должна поддерживать сочетание в одной программе кодовых единиц как в неограниченном, так и в <a href="x10.html#x10.1.1" class="term-ref">строгом режиме</a>.</p>
<h3 id="x4.3">4.3 Определения <a href="#x4.3">#</a> <a href="#x4.3-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h3>
<p>
В настоящем документе используются приведенные ниже термины и определения.</p>
<h4 id="x4.3.1">4.3.1<br><dfn id="type">Тип (type)</dfn> <a href="#x4.3.1">#</a> <a href="#x4.3.1-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– набор значений данных в соответствии с определением, приведенным в <a href="x8.html#x8">Главе 8</a> данной Спецификации.</p>
<h4 id="x4.3.2">4.3.2<br><dfn id="primitive_value">Примитивное значение (primitive value)</dfn> <a href="#x4.3.2">#</a> <a href="#x4.3.2-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент одного из типов – Undefined, Null, Boolean, Number или String, в соответствии с определением, приведенным в <a href="x8.html#x8">Главе 8</a>.</p>
<p><B>ПРИМЕЧАНИЕ</B> Примитивное значение – элемент данных, представленный непосредственно на самом нижнем уровне реализации языка.</p>
<h4 id="x4.3.3">4.3.3<br><dfn id="object">Объект (object)</dfn> <a href="#x4.3.3">#</a> <a href="#x4.3.3-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Object.</p>
<p><B>ПРИМЕЧАНИЕ</B> Объект представляет собой набор свойств. Он имеет единственный прототип, который может иметь значение <code>null</code>.</p>
<h4 id="x4.3.4">4.3.4<br><dfn id="constructor">Конструктор (constructor)</dfn> <a href="#x4.3.4">#</a> <a href="#x4.3.4-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– объект функции, который создает и инициализирует объекты.</p>
<p><B>ПРИМЕЧАНИЕ</B> Значением свойства “<code>prototype</code>” конструктора является объект-прототип, используемый для реализации наследования и разделяемых свойств.</p>
<h4 id="x4.3.5">4.3.5<br><dfn id="prototype">Прототип (prototype)</dfn> <a href="#x4.3.5">#</a> <a href="#x4.3.5-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– объект, предоставляющий разделяемые свойства для других объектов.</p>
<p><B>ПРИМЕЧАНИЕ</B> При создании объекта посредством конструктора, этот объект явно ссылается на свойство “<code><b>prototype</b></code>” конструктора в целях разрешения ссылки на свойство. На свойство “<code><b>prototype</b></code>” конструктора можно ссылаться посредством программного выражения <code><i>constructor</i></code><code><b>.prototype</b></code>, а свойства, добавляемые к прототипу объекта, разделяются (посредством наследования) всеми объектами, которые разделяют данный прототип. Или же, новый объект может быть создан с помощью явно заданного прототипа посредством использования встроенной функции <code><b><a href="x15.2.html#x15.2.3.5">Object.create</a></b></code>.</p>
<h4 id="x4.3.6">4.3.6<br><dfn id="native_object">Родной объект (native object)</dfn> <a href="#x4.3.6">#</a> <a href="#x4.3.6-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– объект в реализации ECMAScript, семантика которого полностью определяется не средой выполнения, а данной спецификацией.</p>
<p><B>ПРИМЕЧАНИЕ</B> Данная спецификация определяет стандартные родные объекты. Некоторые родные объекты являются встроенными, а другие могут создаваться в ходе выполнения программы на ECMAScript.</p>
<h4 id="x4.3.7">4.3.7<br><dfn id="built-in_object">Встроенный объект (built-in object)</dfn> <a href="#x4.3.7">#</a> <a href="#x4.3.7-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– объект, предоставляемый реализацией ECMAScript независимо от среды. На начало выполнения программы на ECMAScript встроенный объект уже существует.</p>
<p><B>ПРИМЕЧАНИЕ</B> Данная спецификация определяет стандартные встроенные объекты, а другие объекты могут задаваться и определяться посредством реализации ECMAScript. Все встроенные объекты являются родными объектами. <i>Встроенный конструктор </i>представляет собой встроенный объект, который также является конструктором.</p>
<h4 id="x4.3.8">4.3.8<br><dfn id="host_object">Объект среды (host object)</dfn> <a href="#x4.3.8">#</a> <a href="#x4.3.8-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– объект, предоставляемый средой, с целью дополнения среды выполнения языка ECMAScript.</p>
<p><B>ПРИМЕЧАНИЕ</B> Всякий объект, не являющийся родным, является объектом среды.</p>
<h4 id="x4.3.9">4.3.9<br><dfn id="undefined_value">Неопределенное значение (undefined value)</dfn> <a href="#x4.3.9">#</a> <a href="#x4.3.9-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– <a href="#primitive_value" class="term-ref">примитивное значение</a>, используемое в том случае, если переменной не было присвоено значения.</p>
<h4 id="x4.3.10">4.3.10<br><dfn id="Undefined_type">Неопределенный тип (Undefined type)</dfn> <a href="#x4.3.10">#</a> <a href="#x4.3.10-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– тип, единственное значение которого является неопределенным значением.
</p>
<h4 id="x4.3.11">4.3.11<br><dfn id="null_value">Пустое значение (null value)</dfn> <a href="#x4.3.11">#</a> <a href="#x4.3.11-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– <a href="#primitive_value" class="term-ref">примитивное значение</a>, в котором умышлено отсутствует значение объекта.</p>
<h4 id="x4.3.12">4.3.12<br><dfn id="Null_type">Тип Null</dfn> <a href="#x4.3.12">#</a> <a href="#x4.3.12-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– тип, единственное значение которого является пустым значением.</p>
<h4 id="x4.3.13">4.3.13<br><dfn id="Boolean_value">Булево значение (Boolean value)</dfn> <a href="#x4.3.13">#</a> <a href="#x4.3.13-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Boolean.</p>
<p><B>ПРИМЕЧАНИЕ</B> Существует только два булевых значения: <b>true</b> и <b>false</b>.</p>
<h4 id="x4.3.14">4.3.14<br><dfn id="Boolean_type">Тип Boolean</dfn> <a href="#x4.3.14">#</a> <a href="#x4.3.14-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– тип, который содержит примитивные значения <b>true</b> и <b>false</b>.</p>
<h4 id="x4.3.15">4.3.15<br><dfn id="Boolean_object">Объект Boolean</dfn> <a href="#x4.3.15">#</a> <a href="#x4.3.15-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Object, являющийся экземпляром стандартного встроенного конструктора <code><b>Boolean</b></code>.</p>
<p><B>ПРИМЕЧАНИЕ</B> Для создания объекта Boolean используется конструктор <code><b>Boolean</b></code> в выражении <code><b>new</b></code>, при этом в качестве аргумента передается значение Boolean. Полученный объект обладает внутренним свойством, значением которого становится переданное Boolean. Объект Boolean может быть приведен к булевому значению.</p>
<h4 id="x4.3.16">4.3.16<br><dfn id="String_value">Строковое значение (String value)</dfn> <a href="#x4.3.16">#</a> <a href="#x4.3.16-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– <a href="#primitive_value" class="term-ref">примитивное значение</a>, которое представляет собой конечную упорядоченную последовательность, состоящую из 16-битового беззнакового целого в количестве ноль или более.
</p>
<p><B>ПРИМЕЧАНИЕ</B> Строковое значение является элементом типа String. Каждое целочисленное значение в последовательности, как правило, представляет собой единичный 16-битовый элемент текста в кодировке UTF-16, однако ECMAScript не накладывает ограничений и не предъявляется требований к этим значением, за исключением того, что они должны быть 16-битовыми беззнаковыми целыми.</p>
<h4 id="x4.3.17">4.3.17<br><dfn id="String_type">Тип String</dfn> <a href="#x4.3.17">#</a> <a href="#x4.3.17-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– множество всех возможных строковых значений.</p>
<h4 id="x4.3.18">4.3.18<br><dfn id="String_object">Объект String</dfn> <a href="#x4.3.18">#</a> <a href="#x4.3.18-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Object, являющийся экземпляром стандартного встроенного конструктора <code><b>String</b></code>.</p>
<p><B>ПРИМЕЧАНИЕ </B>Для создания объекта String используется конструктор <code><b>String</b></code> в выражении <code><b>new</b></code>, при этом в качестве аргумента передается строковое значение. Полученный объект обладает внутренним свойством, значением которого становится переданная строка. Объект String может быть приведен к строковому значению посредством вызова конструктора <code><b>String</b></code> в качестве функции (<a href="x15.5.html#x15.5.1">15.5.1</a>).</p>
<h4 id="x4.3.19">4.3.19<br><dfn id="Number_value">Числовое значение (Number value)</dfn> <a href="#x4.3.19">#</a> <a href="#x4.3.19-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– <a href="#primitive_value" class="term-ref">примитивное значение</a>, соответствующее 64-битовому бинарному значению с двойной точностью в формате IEEE 754.</p>
<p><B>ПРИМЕЧАНИЕ </B>Числовое значение является элементом типа Number и прямым представлением числа.</p>
<h4 id="x4.3.20">4.3.20<br><dfn id="Number_type">Тип Number</dfn> <a href="#x4.3.20">#</a> <a href="#x4.3.20-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– множество всех возможных числовых значений, включая специальные значения NaN ("не число"), положительную бесконечность и отрицательную бесконечность.</p>
<h4 id="x4.3.21">4.3.21<br><dfn id="Number_object">Объект Number</dfn> <a href="#x4.3.21">#</a> <a href="#x4.3.21-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Object, являющийся экземпляром стандартного встроенного конструктора <code><b><b>Number</b></b></code>.</p>
<p><B>ПРИМЕЧАНИЕ </B>Для создания объекта Number используется конструктор <code><b>Number</b></code> в выражении <code><b>new</b></code>, при этом в качестве аргумента передается числовое значение. Полученный объект обладает внутренним свойством, значением которого становится переданное число. Объект Number может быть приведен к числовому значению посредством вызова конструктора <code><b>Number</b></code> в качестве функции (<a href="x15.7.html#x15.7.1">15.7.1</a>).</p>
<h4 id="x4.3.22">4.3.22<br><dfn id="Infinity">Бесконечность (Infinity)</dfn> <a href="#x4.3.22">#</a> <a href="#x4.3.22-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– числовое значение, которое представляет собой положительное бесконечное числовое значение.</p>
<h4 id="x4.3.23">4.3.23<br><dfn id="NaN">Не-число (NaN)</dfn> <a href="#x4.3.23">#</a> <a href="#x4.3.23-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– числовое значение, являющееся значением, которое представляет собой "не-число" в соответствии со стандартом IEEE 754.</p>
<h4 id="x4.3.24">4.3.24<br><dfn id="function">Функция (function)</dfn> <a href="#x4.3.24">#</a> <a href="#x4.3.24-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– элемент типа Object, являющийся экземпляром стандартного встроенного конструктора <code><b><b>Function</b></b></code>, который может быть вызван в качестве подпрограммы.</p>
<p><B>ПРИМЕЧАНИЕ </B>Кроме именованных свойств, функция содержит выполняемый код и состояние, которые определяют ее поведение при вызове. Код функции может быть написан как на ECMAScript, так и на другом языке.</p>
<h4 id="x4.3.25">4.3.25<br><dfn id="built-in_function">Встроенная функция (built-in function)</dfn> <a href="#x4.3.25">#</a> <a href="#x4.3.25-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– встроенный объект, который является функцией. </p>
<p><B>ПРИМЕЧАНИЕ </B>Примеры встроенных функций: <code><b>parseInt</b></code> и <code><b><a href="x15.8.html#x15.8.2.8">Math.exp</a></b></code>. Реализация может предусмотреть встроенные функции, поведение которых зависит от реализации, которые не описаны в настоящей спецификации.
</p>
<h4 id="x4.3.26">4.3.26<br><dfn id="property">Свойство (property)</dfn> <a href="#x4.3.26">#</a> <a href="#x4.3.26-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– связь между именем и значением, которая является частью объекта.</p>
<p><B>ПРИМЕЧАНИЕ </B>В зависимости от формы свойства, значение может быть представлено либо непосредственным образом в качестве значения данных (<a href="#primitive_value" class="term-ref">примитивное значение</a>, объект или объект функции), либо косвенно посредством пары функций доступа.</p>
<h4 id="x4.3.27">4.3.27<br><dfn id="method">Метод (method)</dfn> <a href="#x4.3.27">#</a> <a href="#x4.3.27-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– функция, которая представляет собой значение свойства.</p>
<p><B>ПРИМЕЧАНИЕ </B>При вызове функции в качестве метода объекта этот объект передается этой функции как значение <b>this</b> этой функции.</p>
<h4 id="x4.3.28">4.3.28<br><dfn id="built-in_method">Встроенный метод (built-in method)</dfn> <a href="#x4.3.28">#</a> <a href="#x4.3.28-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– метод, который представляет собой встроенную функцию.</p>
<p><B>ПРИМЕЧАНИЕ</B> Данная спецификация определяет стандартные встроенные методы. Другие дополнительные встроенные методы могут задаваться и определяться посредством реализации ECMAScript.
</p>
<h4 id="x4.3.29">4.3.29<br><dfn id="attribute">Атрибут (attribute)</dfn> <a href="#x4.3.29">#</a> <a href="#x4.3.29-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– внутреннее значение, определяющее некоторые характеристики свойства.</p>
<h4 id="x4.3.30">4.3.30<br><dfn id="own_property">Собственное свойство (own property)</dfn> <a href="#x4.3.30">#</a> <a href="#x4.3.30-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– свойство, которое содержится непосредственно его объектом.</p>
<h4 id="x4.3.31">4.3.31<br><dfn id="inherited_property">Наследуемое свойство (inherited property)</dfn> <a href="#x4.3.31">#</a> <a href="#x4.3.31-toc" class="bak">Ⓣ</a> <b class="erra">Ⓔ</b> <b class="rev1">①</b> <b class="anno">Ⓐ</b></h4>
<p>
– свойство объекта, которое не является собственным свойством, но является свойством (либо собственным, либо наследуемым) прототипа этого объекта. </p>
</body><script src="anno.js"></script></html>