From de5c456ebded0e038adbf23db34cc290c8829180 Mon Sep 17 00:00:00 2001 From: Florian Merz Date: Thu, 11 Feb 2021 14:49:24 +0100 Subject: unslug pl: move --- .../reference/global_objects/symbol/index.html | 227 +++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 files/pl/web/javascript/reference/global_objects/symbol/index.html (limited to 'files/pl/web/javascript/reference/global_objects/symbol') diff --git a/files/pl/web/javascript/reference/global_objects/symbol/index.html b/files/pl/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..4124cb2a46 --- /dev/null +++ b/files/pl/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,227 @@ +--- +title: Symbol +slug: Web/JavaScript/Referencje/Obiekty/Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef}}
+ +

Funkcja Symbol() zwraca wartość typu symbol, posiada statyczne własności wystawiające kilka wartości używanych we wbudowanych obiektach, posiada statyczne metody wystawiające globalny rejestr symboli i przypomina wbudowaną klasę obiektu, jest jednak niekompletna jako konstruktor ponieważ nie wspiera składni "new Symbol()".  

+ +

Każdy symbol zwrócony przez Symbol() jest unikalny. Symbol powinien być użyty jako identyfikator własności obiektu, został zaprojektowany jedynie w tym celu. Pełniejsze wyjaśnienie dotyczące jego przeznaczenia i użycia można znaleźć w poświęconym mu wpisie w glosariuszu.

+ +

Typ symbol jest {{Glossary("Primitive", "typem prostym")}}.

+ +
{{EmbedInteractiveExample("pages/js/symbol-constructor.html")}}
+ + + +

Składnia

+ +
Symbol([opis])
+ +

Parametry

+ +
+
opis {{optional_inline}}
+
Ciąg znaków, parametr opcjonalny. Opis symbolu, może być użyty do debugowania, ale nie do dostania się do samego symbolu.
+
+ +

Opis

+ +

Aby stworzyć nowy symbol należy użyć funkcji Symbol(), opcjonalnie przekazując jej opisowy ciąg znaków:

+ +
var sym1 = Symbol();
+var sym2 = Symbol('foo');
+var sym3 = Symbol('foo');
+
+ +

Powyższy kod tworzy trzy nowe symbole. Należy zwrócić uwagę, że Symbol("foo") nie konwertuje ciągu znaków "foo" na symbol, tylko tworzy za każdym razem nowy symbol:

+ +
Symbol('foo') === Symbol('foo'); // false
+ +

Następująca składnia z operatorem {{jsxref("Operators/new", "new")}} spowoduje wyjątek {{jsxref("TypeError")}}:

+ +
var sym = new Symbol(); // TypeError
+ +

Dzieje się tak dlatego żeby powstrzymać programistów przed opakowywaniem wartości symboli w obiekty i może być zaskakujące, gdyż tworzenie opakowanych wartości dla typów prostych jest zazwyczaj możliwe (na przykład new Boolean, new String i new Number).

+ +

Jeśli stworzenie opakowanego symbolu jest dokładnie tym czego chce programista, może do tego użyć funkcji Object():

+ +
var sym = Symbol('foo');
+typeof sym;     // "symbol"
+var symObj = Object(sym);
+typeof symObj;  // "object"
+
+ +

Symbole współdzielone w globalnym rejestrze symboli

+ +

Powyższa składnia używająca funkcji Symbol() nie stworzy globalnego symbolu, który będzie dostępny w całym kodzie. Aby stworzyć symbol dostępny między plikami, a nawet między sferami (z których każda ma swoją globalną przestrzeń) należy użyć metody {{jsxref("Symbol.for()")}}. Z kolei metody {{jsxref("Symbol.keyFor()")}} można użyć aby uzyskać nazwę globalnego klucza dla posiadanego symbolu.

+ +

Znajdowanie własności indeksowanych symbolami na obiekcie

+ +

Metoda {{jsxref("Object.getOwnPropertySymbols()")}} zwraca tablicę symboli i pozwala znaleźć własności indeksowane symbolami na danym obiekcie. Każdy obiekt jest inicjowany bez takich własności, więc metoda ta zwróci pustą tablicę do czasu ustawienia na obiekcie własności pod kluczem typu symbol.

+ +

Własności

+ +
+
Symbol.length
+
Własność length której wartością jest 0.
+
{{jsxref("Symbol.prototype")}}
+
Reprezentuje prototyp konstruktora Symbol.
+
+ +

Znane symbole

+ +

Oprócz symboli zdefiniowanych przez programistę, JavaScript posiada wbudowane symbole reprezentujące wewnętrzne mechanizmy języka, które nie były widoczne dla programisty w wersji ECMAScript 5 i wcześniejszych. Dostęp do tych symboli jest możliwy za pomocą następujących własności statycznych:

+ +

Symbole iteracji

+ +
+
{{jsxref("Symbol.iterator")}}
+
Metoda zwracająca domyślny iterator dla obiektu. Używana przez for...of.
+
{{jsxref("Symbol.asyncIterator")}} {{experimental_inline}}
+
Metoda zwracająca domyślny asynchroniczny iterator dla obiektu. Używana przez for await of.
+
+ +

Symbole wyrażeń regularnych

+ +
+
{{jsxref("Symbol.match")}}
+
Metoda dopasowująca dla ciągu znaków, używana również dla określenia czy obiekt może zostać użyty jako wyrażenie regularne. Używana przez {{jsxref("String.prototype.match()")}}.
+
{{jsxref("Symbol.replace")}}
+
Metoda zastępująca dopasowany ciąg w ciągu znaków. Używana przez {{jsxref("String.prototype.replace()")}}.
+
{{jsxref("Symbol.search")}}
+
Metoda zwracająca indeks początku ciągu znaków który został dopasowany do wyrażenia regularnego. Używana przez {{jsxref("String.prototype.search()")}}.
+
{{jsxref("Symbol.split")}}
+
Metoda dzieląca łańcuch znaków w miejscu w którym został dopasowany do wyrażenia regularnego. Używana przez {{jsxref("String.prototype.split()")}}.
+
+ +

Pozostałe symbole

+ +
+
{{jsxref("Symbol.hasInstance")}}
+
Metoda określająca czy konstruktor rozpoznaje obiekt jako swoją instancję. Używana przez {{jsxref("Operators/instanceof", "instanceof")}}.
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
Wartość logiczna określająca czy obiekt powinien zostać spłaszczony do jego elementów tablicy. Używana przez {{jsxref("Array.prototype.concat()")}}.
+
{{jsxref("Symbol.unscopables")}}
+
Wartość obiektu którego własne i dziediczone nazwy własności są wykluczone ze środowiska with powiązanego obiektu.
+
{{jsxref("Symbol.species")}}
+
Funkcja konstruktora używana do tworzenia obiektów wywodzących się z danego.
+
{{jsxref("Symbol.toPrimitive")}}
+
Metoda konwertująca obiekt na typ prosty.
+
{{jsxref("Symbol.toStringTag")}}
+
Ciąg znaków używany dla domyślnego opisu obiektu. Używany przez {{jsxref("Object.prototype.toString()")}}.
+
+ +

Metody

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Szuka istniejącego symbolu o podanym kluczu i zwraca go, jeśli został znaleziony. W przeciwnym razie w globalnym rejestrze tworzony jest nowy symbol o podanym kluczu i również zwracany.
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
Zwraca klucz w globalnym rejestrze zapisany dla danego symbolu.
+
+ +

Symbol prototype

+ +

Wszystkie symbole dziecidzą po {{jsxref("Symbol.prototype")}}.

+ +

Własności

+ +

{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Properties')}}

+ +

Metody

+ +

{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Methods')}}

+ +

Przykłady

+ +

Używanie operatora typeof z symbolami

+ +

Operator {{jsxref("Operators/typeof", "typeof")}} może pomóc w identyfikacji symboli.

+ +
typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+ +

Konwersje typu symbol

+ + + +

Symbole i iteracja for...in

+ +

Symbole nie są iterowalne w pętlach for...in. Dodatkowo, {{jsxref("Object.getOwnPropertyNames()")}} nie zwróci własności obiektu zapisanych pod kluczem którym jest symbol, do tego celu można użyć {{jsxref("Object.getOwnPropertySymbols()")}}.

+ +
var obj = {};
+
+obj[Symbol('a')] = 'a';
+obj[Symbol.for('b')] = 'b';
+obj['c'] = 'c';
+obj.d = 'd';
+
+for (var i in obj) {
+   console.log(i); // loguje "c" i "d"
+}
+ +

Symbole i JSON.stringify()

+ +

Własności obiektu znajdujące się pod kluczem w postaci symbolu są ignorowane przez JSON.stringify():

+ +
JSON.stringify({[Symbol('foo')]: 'foo'});
+// '{}'
+ +

Żeby dowiedzieć się więcej zobacz {{jsxref("JSON.stringify()")}}.

+ +

Symbole opakowane w obiekty jako klucze własności

+ +

Gdy symbol opakowany w obiekt jest użyty jako klucz własności, obiekt opakowujący zostanie skonwertowany do symbolu który opakowuje:

+ +
var sym = Symbol('foo');
+var obj = {[sym]: 1};
+obj[sym];            // 1
+obj[Object(sym)];    // nadal 1
+
+ +

Specyfikacje

+ + + + + + + + + + + + + + + + + + + +
SpecyfikacjaStatusKomentarz
{{SpecName('ES2015', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES2015')}}Wstępna definicja
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ESDraft')}} 
+ +

Kompatybilność przeglądarek

+ + + +

{{Compat("javascript.builtins.Symbol")}}

+ +

Zobacz również

+ + -- cgit v1.2.3-54-g00ecf