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
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
|
---
title: Error
slug: Web/JavaScript/Reference/Global_Objects/Error
tags:
- Błąd
- CustomError
- Error
- JavaScript
- Obsługa błędów
translation_of: Web/JavaScript/Reference/Global_Objects/Error
original_slug: Web/JavaScript/Referencje/Obiekty/Error
---
<div>{{JSRef}}</div>
<div>Kontruktor klasy <strong><code>Error</code></strong> tworzy obiekt błędu. Instancja klasy <code>Error</code> jest rzucana w momencie napotkania błędu w trakcie wykonywania programu. Klasa <code>Error</code> może być także używana do tworzenia własnych wyjątków. Poniżej przestawione zostaną wbudowane standardowe typy błędów.</div>
<h2 id="Składnia">Składnia</h2>
<pre class="syntaxbox notranslate">new Error([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</pre>
<h3 id="Parametry">Parametry</h3>
<dl>
<dt><code>message</code></dt>
<dd>Opcjonalny. Opis błędu zrozumiały dla użytkownika.</dd>
<dt><code>fileName</code> {{non-standard_inline}}</dt>
<dd>Opcjonalny. Wartość dla parametru <code>fileName</code> przy tworzeniu obiektu <code>Error</code>. Domyślnie to nazwa pliku zawierającego kod, który wywołał konstruktor.</dd>
<dt><code>lineNumber</code> {{non-standard_inline}}</dt>
<dd>Opcjonalny. Wartość dla paramteru <code>lineNumber</code> przy tworzeniu obiektu <code>Error</code>. Domyślnie zawiera numer linijki zawirającej wywołanie konstruktora klasy <code>Error</code>.</dd>
</dl>
<h2 id="Opis">Opis</h2>
<p>Błędy w trakcie wykonywania programu skutkują utworzeniem i rzuceniem nowego obiektu <code>Error</code>.</p>
<p>This page documents the use of the <code>Error</code> object itself and its use as a constructor function. For a list of properties and methods inherited by <code>Error</code> instances, see {{jsxref("Error.prototype")}}.</p>
<h3 id="Używanie_jako_funkcja">Używanie jako funkcja</h3>
<p>Gdy <code>Error</code> jest używany jako funkcja -- bez słowa kluczowego <code>new</code>, zwraca on obiekt <code>Error</code>. Możemy więc zauważyć, że zwykłe wywołanie <code>Error</code> zwróci nam to samo co stworznie nowego obiektu <code>Error</code> przy pomocy słowa kluczowego <code>new</code>.</p>
<pre class="notranslate"><code>// to:
const x = Error('Jestem stworzony przy pomocy wyowałania funkcji!');
// działa tak samo jak to:
const y = new Error('Jestem stworzony przy pomocy słowa kluczowego "new"!');</code></pre>
<h3 id="Typy_błędów">Typy błędów</h3>
<p>Oprócz konstruktora generycznego <code>Error</code>, mamy jeszcze siedem innych podstawowych konstruktorów błędów w JavaScript. Dla wyjątów po stronie klienta zobacz <a href="/en-US/docs/Web/JavaScript/Guide/Statements#Exception_Handling_Statements">Exception Handling Statements</a>.</p>
<dl>
<dt>{{jsxref("EvalError")}}</dt>
<dd>Tworzy instancje reprezentującą błąd dotyczący globalnej funkcji {{jsxref("Global_Objects/eval", "eval()")}}.</dd>
<dt>{{jsxref("InternalError")}} {{non-standard_inline}}</dt>
<dd>Tworzy instancje reprezentującą błąd, który występuje w momencie wyrzucenia wewnętrznego błędu silnika JavaScript np. "too much recursion".</dd>
<dt>{{jsxref("RangeError")}}</dt>
<dd>Tworzy instancje reprezentującą błąd, który występuje w momencie gdy zmienna numeryczna lub parametr wyjdzie poza zakres. </dd>
<dt>{{jsxref("ReferenceError")}}</dt>
<dd>Tworzy instancje reprezentującą błąd, który występuje przy próbie odwołania do nieistniejącego zasobu.</dd>
<dt>{{jsxref("SyntaxError")}}</dt>
<dd>Tworzy instancje reprezentującą błąd składni, który występuje przy parsowaniu kodu przy pomocy {{jsxref("Global_Objects/eval", "eval()")}}.</dd>
<dt>{{jsxref("TypeError")}}</dt>
<dd>Tworzy instancję reprezentującą błąd, który występuje gdy zmienna lub parametr mają niepoprawny typ.</dd>
<dt>{{jsxref("URIError")}}</dt>
<dd>Tworzy instancję reprezentującą błąd, który występuje gdy {{jsxref("Global_Objects/encodeURI", "encodeURI()")}} i {{jsxref("Global_Objects/decodeURI", "decodeURI()")}} mają przekazane nieprawidłowe parametry.</dd>
</dl>
<h2 id="Właściwości">Właściwości</h2>
<dl>
<dt>{{jsxref("Error.prototype")}}</dt>
<dd>Pozwala na dodawanie właściwości do instancji klasy <code>Error</code>.</dd>
</dl>
<h2 id="Metody">Metody</h2>
<p>Globalny obiekt <code>Error</code> sam w sobie nie zawiera metod, niemniej, dziedziczy on niektóre metody z łańcucha prototypów.</p>
<h2 id="Error_instancje"><code>Error</code> instancje</h2>
<div>{{page('pl/docs/Web/JavaScript/Referencje/Obiekty/Error/prototype', 'Description')}}</div>
<h3 id="Właściwości_2">Właściwości</h3>
<div>{{page('pl/docs/Web/JavaScript/Referencje/Obiekty/Error/prototype', 'Properties')}}</div>
<h3 id="Metody_2">Metody</h3>
<div>{{page('pl/docs/Web/JavaScript/Referencje/Obiekty/Error/prototype', 'Methods')}}</div>
<h2 id="Przykłady">Przykłady</h2>
<h3 id="Rzucanie_ogólnego_błędu">Rzucanie ogólnego błędu</h3>
<p>Zazwyczaj tworzysz obiekt <code>Error</code> w celu wywołania go przy użyciu słowa kluczowego {{jsxref("Statements/throw", "throw")}}. Możesz obsłużyć tak rzucony błąd przy pomocy konstrukcji {{jsxref("Statements/try...catch", "try...catch")}}:</p>
<pre class="brush: js notranslate">try {
throw new Error('Whoops!');
} catch (e) {
alert(e.name + ': ' + e.message);
}
</pre>
<h3 id="Obsługa_specyficznych_błędów">Obsługa specyficznych błędów</h3>
<p>Jeżeli chcesz możesz obsługiwać tylko specyficzny rodzaj błędu poprzez użycie właściwości jego {{jsxref("Object.prototype.constructor", "constructor")}} lub, jeżeli używasz nowoczesnego silnika JavaScript, poprzez słowo kluczowe {{jsxref("Operators/instanceof", "instanceof")}}:</p>
<pre class="brush: js notranslate">try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
alert(e.name + ': ' + e.message);
} else if (e instanceof RangeError) {
alert(e.name + ': ' + e.message);
}
// ... etc
}
</pre>
<h3 id="Niestandardowe_typy_błędów">Niestandardowe typy błędów</h3>
<p>Możesz chcieć zdefiniować własny typ błędu pochodzący z klasy <code>Error</code> z możliwością rzucenia błędu <code>throw new MyError()</code> i użycia <code>instanceof MyError</code> w celu sprawdzenia jego rodzaju. Skutkuje to czystszym i spójniejszym kodem obsługi błędów. Zobacz <a href="http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript">"What's a good way to extend Error in JavaScript?"</a> na StackOverflow dla dogłębniejszej analizy.</p>
<h4 id="ES6_Custom_Error_Class">ES6 Custom Error Class</h4>
<div class="warning">
<p>Babel i inne transpilatory nie potrafią poprawnie obsłużyć podanego kodu bez <a href="https://github.com/loganfsmyth/babel-plugin-transform-builtin-extend">dodatkowej konfiguracji</a>.</p>
</div>
<div class="note">
<p>Nie które przeglądarki dodają constructor <code>CustomError</code> w stosie błędu kiedy używamy klas ES2015</p>
</div>
<pre class="brush: js notranslate">class CustomError extends Error {
constructor(foo = 'bar', ...params) {
// Pass remaining arguments (including vendor specific ones) to parent constructor
super(...params);
// Maintains proper stack trace for where our error was thrown (only available on V8)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, CustomError);
}
// Custom debugging information
this.foo = foo;
this.date = new Date();
}
}
try {
throw new CustomError('baz', 'bazMessage');
} catch(e){
console.log(e.foo); //baz
console.log(e.message); //bazMessage
console.log(e.stack); //stacktrace
}</pre>
<h4 id="ES5_Custom_Error_Object">ES5 Custom Error Object</h4>
<div class="warning">
<p><strong>Wszystkie</strong> przeględarki dodają konstruktor <code>CustomError </code>kiedy używasz konstruktora z wykorzystaniem prototype</p>
</div>
<pre class="brush: js notranslate">function CustomError(foo, message, fileName, lineNumber) {
var instance = new Error(message, fileName, lineNumber);
instance.foo = foo;
Object.setPrototypeOf(instance, Object.getPrototypeOf(this));
if (Error.captureStackTrace) {
Error.captureStackTrace(instance, CustomError);
}
return instance;
}
CustomError.prototype = Object.create(Error.prototype, {
constructor: {
value: Error,
enumerable: false,
writable: true,
configurable: true
}
});
if (Object.setPrototypeOf){
Object.setPrototypeOf(CustomError, Error);
} else {
CustomError.__proto__ = Error;
}
try {
throw new CustomError('baz', 'bazMessage');
} catch(e){
console.log(e.foo); //baz
console.log(e.message) ;//bazMessage
}</pre>
<h2 id="Specyfikacja">Specyfikacja</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>Początkowa definicja. Zaimplementowana w JavaScript 1.1.</td>
</tr>
<tr>
<td>{{SpecName('ES5.1', '#sec-15.11', 'Error')}}</td>
<td>{{Spec2('ES5.1')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-error-objects', 'Error')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Kompatybilność">Kompatybilność</h2>
<div>
<p>{{Compat("javascript.builtins.Error")}}</p>
</div>
<h2 id="Zobacz_także">Zobacz także</h2>
<ul>
<li>{{jsxref("Error.prototype")}}</li>
<li>{{jsxref("Statements/throw", "throw")}}</li>
<li>{{jsxref("Statements/try...catch", "try...catch")}}</li>
</ul>
|