diff options
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/symbol')
16 files changed, 1677 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/symbol/asynciterator/index.html b/files/uk/web/javascript/reference/global_objects/symbol/asynciterator/index.html new file mode 100644 index 0000000000..69b6b4c5d1 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/asynciterator/index.html @@ -0,0 +1,86 @@ +--- +title: Symbol.asyncIterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +tags: + - ECMAScript 2018 + - JavaScript + - Symbol + - Властивість + - Довідка + - Символ + - асинхронний +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.asyncIterator</strong></code> вказує для об'єкта AsyncIterator за замовчуванням. Якщо ця властивість присутня в об'єкті, то він є асинхронним ітерабельним об'єктом і може використовуватись у циклі <code><a href="/uk/docs/Web/JavaScript/Reference/Statements/for-await...of">for await...of</a></code>.</p> + + + +<h2 id="Опис">Опис</h2> + +<p>Символ <code>Symbol.asyncIterator</code> є вбудованим символом, який використовується для доступу до метода <code>@@asyncIterator</code> у об'єкта. Для того, щоб об'єкт був асинхронним ітерабельним об'єктом, він повинен мати ключ <code>Symbol.asyncIterator</code>.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Асинхронні_ітерабельні_обєкти_створені_користувачем">Асинхронні ітерабельні об'єкти, створені користувачем</h3> + +<p>Ви можете визначити власний асинхронний ітерабельний об'єкт, встановивши на об'єкті властивість <code>[Symbol.asyncIterator]</code>. </p> + +<pre class="brush: js notranslate">const myAsyncIterable = new Object(); +myAsyncIterable[Symbol.asyncIterator] = async function*() { + yield "привіт"; + yield "асинхронний"; + yield "перебір!"; +}; + +(async () => { + for await (const x of myAsyncIterable) { + console.log(x); + // очікуваний результат: + // "привіт" + // "асинхронний" + // "перебір!" + } +})(); +</pre> + +<p>Створюючи API, пам'ятайте, що асинхронні ітерабельні об'єкти створені для того, щоб відображати щось <em>ітерабельне</em>, наприклад, потік даних чи список, а не для того, щоб повністю замінити зворотні виклики та події у більшості ситуацій.</p> + +<h3 id="Вбудовані_асинхронні_ітерабельні_обєкти">Вбудовані асинхронні ітерабельні об'єкти</h3> + +<p>У JavaScript наразі не існує вбудованих об'єктів, що мають ключ <code>[Symbol.asyncIterator]</code> за замовчуванням. Однак, WHATWG Streams можуть стати першим вбудованим асинхронним ітерабельним об'єктом, з нещодавно доданим у специфікацію символом <code>[Symbol.asyncIterator]</code>.</p> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + <th scope="col">Статус</th> + <th scope="col">Коментар</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ES2018', '#sec-symbol.asynciterator', 'Symbol.asyncIterator')}}</td> + <td>{{Spec2('ES2018')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{compat("javascript.builtins.Symbol.asyncIterator")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li><a href="/uk/docs/Web/JavaScript/Reference/Протоколи_перебору">Протоколи перебору</a></li> + <li><a href="/uk/docs/Web/JavaScript/Reference/Statements/for-await...of">for await... of</a></li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/description/index.html b/files/uk/web/javascript/reference/global_objects/symbol/description/index.html new file mode 100644 index 0000000000..039755bd5e --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/description/index.html @@ -0,0 +1,67 @@ +--- +title: Symbol.prototype.description +slug: Web/JavaScript/Reference/Global_Objects/Symbol/description +tags: + - JavaScript + - Symbol + - Властивість + - Символ + - прототип +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/description +--- +<div>{{JSRef}}</div> + +<p>Властивість лише для читання <code><strong>description</strong></code> - це рядок, що повертає необов'язковий опис об'єктів {{JSxRef("Symbol")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-prototype-description.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>{{JSxRef("Symbol","Символьні")}} об'єкти можуть бути створені з необов'язковим описом, який можна використовувати для відлагодження, але не для доступу до самого символа. Властивість <code>Symbol.prototype.description</code> можна використати, щоб прочитати цей опис. Вона відрізняється від <code>Symbol.prototype.toString()</code>, оскільки не містить рядка "<code>Symbol()</code>" навколо. Дивіться приклади.</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_опису">Використання опису</h3> + +<pre class="brush: js notranslate">Symbol('desc').toString(); // "Symbol(desc)" +Symbol('desc').description; // "desc" +Symbol('').description; // "" +Symbol().description; // undefined + +// добревідомі символи +Symbol.iterator.toString(); // "Symbol(Symbol.iterator)" +Symbol.iterator.description; // "Symbol.iterator" + +// глобальні символи +Symbol.for('foo').toString(); // "Symbol(foo)" +Symbol.for('foo').description; // "foo" + +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName("ESDraft", "#sec-symbol.prototype.description", "get Symbol.prototype.description")}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.description")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{JSxRef("Symbol.prototype.toString()")}}</li> + <li>Поліфіл: <a href="https://npmjs.com/symbol.prototype.description">https://npmjs.com/symbol.prototype.description</a></li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/uk/web/javascript/reference/global_objects/symbol/hasinstance/index.html new file mode 100644 index 0000000000..78a1246aa5 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/hasinstance/index.html @@ -0,0 +1,81 @@ +--- +title: Symbol.hasInstance +slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Довідка + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +--- +<div>{{JSRef}}</div> + +<p><span class="seoSummary">Добревідомий символ <strong><code>Symbol.hasInstance</code></strong> використовують, щоб визначити, чи конструктор розпізнає об'єкт як свій екземпляр. Цим символом можна налаштовувати поведінку оператора {{jsxref("Operators/instanceof", "instanceof")}}.</span></p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-hasinstance.html")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Змінена_поведінка_instanceof">Змінена поведінка instanceof</h3> + +<p>Ви можете реалізувати свою власну поведінку <code>instanceof</code>, наприклад, так:</p> + +<pre class="brush: js notranslate">class MyArray { + static [Symbol.hasInstance](instance) { + return Array.isArray(instance) + } +} +console.log([] instanceof MyArray); // true +</pre> + +<pre class="brush: js notranslate">function MyArray() { } +Object.defineProperty(MyArray, Symbol.hasInstance, { + value: function(instance) { return Array.isArray(instance); } +}); +console.log([] instanceof MyArray); // true</pre> + +<h3 id="Перевіряємо_екземпляр_обєкта">Перевіряємо екземпляр об'єкта</h3> + +<p>Таким самим чином, як ви перевіряєте, чи є об'єкт екземпляром класу, за допомогою ключового слова <code>instanceof</code>, можна використати <code>Symbol.hasInstance</code> для таких перевірок.</p> + +<pre class="brush: js notranslate">class Animal { + constructor() {} +} + +const cat = new Animal(); + +console.log(Animal[Symbol.hasInstance](cat)); // true +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.hasInstance")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Operators/instanceof", "instanceof")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/index.html b/files/uk/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..eb4625fdb6 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,466 @@ +--- +title: Symbol +slug: Web/JavaScript/Reference/Global_Objects/Symbol +tags: + - ECMAScript 2015 + - JavaScript + - NeedsTranslation + - Symbol + - TopicStub +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +<div>{{JSRef}}</div> + +<p><strong>Символ</strong> є {{Glossary("Primitive", "простим типом даних")}}. Функція <code>Symbol()</code> вертає значення типу <strong>символ</strong>, має статичні властивості, що відкривають декілька членів вбудованих об'єктів, має статичні методи, що відкривають глобальний реєстр символів, та нагадує вбудований клас об'єкта, але не є повноцінним конструктором, оскільки не підтримує синтаксис "<code>new Symbol()</code>".</p> + +<p>Кожне символьне значення, що його вертає <code>Symbol()</code>, є унікальним. Символьне значення може використовуватись в якості ідентифікатора властивостей об'єкта; це єдина мета цього типу даних. Більше пояснень щодо мети та використання можна знайти у <a href="/uk/docs/Glossary/Символ">статті словника щодо символів</a>.</p> + +<p>{{EmbedInteractiveExample("pages/js/symbol-constructor.html")}}</p> + +<div class="hidden"> +<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> +</div> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox">Symbol(<em>[description]</em>)</pre> + +<h3 id="Параметри">Параметри</h3> + +<dl> + <dt><code>description</code> {{optional_inline}}</dt> + <dd>Необов'язковий, рядок. Опис символу, який можна використовувати для відлагодження, але не для доступу для самого символу.</dd> +</dl> + +<h2 id="Опис">Опис</h2> + +<p>Для створення примітивного символа ви пишете <code>Symbol()</code> з необов'язковим рядком в ролі його опису:</p> + +<pre class="brush: js">var sym1 = Symbol(); +var sym2 = Symbol('foo'); +var sym3 = Symbol('foo'); +</pre> + +<p>Наведений код створює три нові символи. Зауважте, що <code>Symbol("foo")</code> не приводить рядок "foo" до символу. Він кожен раз створює новий символ:</p> + +<pre class="brush: js">Symbol('foo') === Symbol('foo'); // false</pre> + +<p>Наступний синтаксис з оператором {{jsxref("Operators/new", "new")}} викине помилку {{jsxref("TypeError")}}:</p> + +<pre class="brush: js">var sym = new Symbol(); // TypeError</pre> + +<p>Це запобігає створенню явного об'єкта-обгортки <code>Symbol</code> замість нового символьного значення та може дивувати, оскільки створення явного об'єкта-обгортки для примітивних типів даних загалом можливе (для прикладу, <code>new Boolean</code>, <code>new String</code> та <code>new Number</code>).</p> + +<p>Якщо вам дуже потрібно створити об'єкт обгортку <code>Symbol</code>, ви можете скористатись функцією <code>Object()</code>:</p> + +<pre class="brush: js">var sym = Symbol('foo'); +typeof sym; // "symbol" +var symObj = Object(sym); +typeof symObj; // "object" +</pre> + +<h3 id="Спільні_символи_у_глобальному_реєстрі_символів">Спільні символи у глобальному реєстрі символів</h3> + +<p>Наведений синтаксис використання функції <code>Symbol()</code> не створить глобальний символ, доступний з усієї вашої кодової бази. Щоб створити символи, доступні в усіх файлах і навіть у різних сферах (кожна з яких має свою глобальну область видимості), використовуйте методи {{jsxref("Symbol.for()")}} та {{jsxref("Symbol.keyFor()")}}, щоб записувати та читати символи у глобальному реєстрі символів.</p> + +<h3 id="Пошук_символьних_властивостей_обєктів">Пошук символьних властивостей об'єктів</h3> + +<p>Метод {{jsxref("Object.getOwnPropertySymbols()")}} повертає масив символів та дозволяє знайти символьні властивості наданого об'єкта. Зауважте, що жоден об'єкт не ініціалізується з особистими символьними властивостями, отже, цей масив буде порожнім, якщо тільки ви не задали символьні властивості об'єкта.</p> + +<h2 id="Properties">Properties</h2> + +<dl> + <dt><code>Symbol.length</code></dt> + <dd>Length property whose value is 0.</dd> + <dt>{{jsxref("Symbol.prototype")}}</dt> + <dd>Represents the prototype for the <code>Symbol</code> constructor.</dd> +</dl> + +<h3 id="Well-known_symbols">Well-known symbols</h3> + +<p>In addition to your own symbols, JavaScript has some built-in symbols which represent internal language behaviors which were not exposed to developers in ECMAScript 5 and before. These symbols can be accessed using the following properties:</p> + +<h4 id="Iteration_symbols">Iteration symbols</h4> + +<dl> + <dt>{{jsxref("Symbol.iterator")}}</dt> + <dd>A method returning the default iterator for an object. Used by <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a>.</dd> +</dl> + +<h4 id="Regular_expression_symbols">Regular expression symbols</h4> + +<dl> + <dt>{{jsxref("Symbol.match")}}</dt> + <dd>A method that matches against a string, also used to determine if an object may be used as a regular expression. Used by {{jsxref("String.prototype.match()")}}.</dd> + <dt>{{jsxref("Symbol.replace")}}</dt> + <dd>A method that replaces matched substrings of a string. Used by {{jsxref("String.prototype.replace()")}}.</dd> + <dt>{{jsxref("Symbol.search")}}</dt> + <dd>A method that returns the index within a string that matches the regular expression. Used by {{jsxref("String.prototype.search()")}}.</dd> + <dt>{{jsxref("Symbol.split")}}</dt> + <dd>A method that splits a string at the indices that match a regular expression. Used by {{jsxref("String.prototype.split()")}}.</dd> +</dl> + +<h4 id="Other_symbols">Other symbols</h4> + +<dl> + <dt>{{jsxref("Symbol.hasInstance")}}</dt> + <dd>A method determining if a constructor object recognizes an object as its instance. Used by {{jsxref("Operators/instanceof", "instanceof")}}.</dd> + <dt>{{jsxref("Symbol.isConcatSpreadable")}}</dt> + <dd>A Boolean value indicating if an object should be flattened to its array elements. Used by {{jsxref("Array.prototype.concat()")}}.</dd> + <dt>{{jsxref("Symbol.unscopables")}}</dt> + <dd>An object value of whose own and inherited property names are excluded from the <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code> environment bindings of the associated object.</dd> + <dt>{{jsxref("Symbol.species")}}</dt> + <dd>A constructor function that is used to create derived objects.</dd> + <dt>{{jsxref("Symbol.toPrimitive")}}</dt> + <dd>A method converting an object to a primitive value.</dd> + <dt>{{jsxref("Symbol.toStringTag")}}</dt> + <dd>A string value used for the default description of an object. Used by {{jsxref("Object.prototype.toString()")}}.</dd> +</dl> + +<h2 id="Methods">Methods</h2> + +<dl> + <dt>{{jsxref("Symbol.for()", "Symbol.for(key)")}}</dt> + <dd>Searches for existing symbols with the given key and returns it if found. Otherwise a new symbol gets created in the global symbol registry with this key.</dd> + <dt>{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}</dt> + <dd>Retrieves a shared symbol key from the global symbol registry for the given symbol.</dd> +</dl> + +<h2 id="Symbol_prototype"><code>Symbol</code> prototype</h2> + +<p>All Symbols inherit from {{jsxref("Symbol.prototype")}}.</p> + +<h3 id="Properties_2">Properties</h3> + +<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Properties')}}</p> + +<h3 id="Methods_2">Methods</h3> + +<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Methods')}}</p> + +<h2 id="Examples">Examples</h2> + +<h3 id="Using_the_typeof_operator_with_symbols">Using the <code>typeof</code> operator with symbols</h3> + +<p>The {{jsxref("Operators/typeof", "typeof")}} operator can help you to identify symbols.</p> + +<pre class="brush: js">typeof Symbol() === 'symbol' +typeof Symbol('foo') === 'symbol' +typeof Symbol.iterator === 'symbol' +</pre> + +<h3 id="Symbol_type_conversions">Symbol type conversions</h3> + +<p>Some things to note when working with type conversion of symbols.</p> + +<ul> + <li>When trying to convert a symbol to a number, a {{jsxref("TypeError")}} will be thrown<br> + (e.g. <code>+sym</code> or <code>sym | 0</code>).</li> + <li>When using loose equality, <code>Object(sym) == sym</code> returns <code>true.</code></li> + <li><code>Symbol("foo") + "bar" </code>throws a {{jsxref("TypeError")}} (can't convert symbol to string). This prevents you from silently creating a new string property name from a symbol, for example.</li> + <li>The <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#String_conversion">"safer" <code>String(sym)</code> conversion</a> works like a call to {{jsxref("Symbol.prototype.toString()")}} with symbols, but note that <code>new String(sym)</code> will throw.</li> +</ul> + +<h3 id="Symbols_and_for...in_iteration">Symbols and <code>for...in</code> iteration</h3> + +<p>Symbols are not enumerable in <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>for...in</code></a> iterations. In addition, {{jsxref("Object.getOwnPropertyNames()")}} will not return symbol object properties, however, you can use {{jsxref("Object.getOwnPropertySymbols()")}} to get these.</p> + +<pre class="brush: js">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); // logs "c" and "d" +}</pre> + +<h3 id="Symbols_and_JSON.stringify">Symbols and <code>JSON.stringify()</code></h3> + +<p>Symbol-keyed properties will be completely ignored when using <code>JSON.stringify()</code>:</p> + +<pre class="brush: js">JSON.stringify({[Symbol('foo')]: 'foo'}); +// '{}'</pre> + +<p>For more details, see {{jsxref("JSON.stringify()")}}.</p> + +<h3 id="Symbol_wrapper_objects_as_property_keys">Symbol wrapper objects as property keys</h3> + +<p>When a Symbol wrapper object is used as a property key, this object will be coerced to its wrapped symbol:</p> + +<pre class="brush: js">var sym = Symbol('foo'); +var obj = {[sym]: 1}; +obj[sym]; // 1 +obj[Object(sym)]; // still 1 +</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('ES2015', '#sec-symbol-objects', 'Symbol')}}</td> + <td>{{Spec2('ES2015')}}</td> + <td>Initial definition</td> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}</td> + <td>{{Spec2('ESDraft')}}</td> + <td></td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility">Browser compatibility</h2> + +<p>{{CompatibilityTable}}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoDesktop(36)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.iterator (@@iterator)</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoDesktop(36)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.unscopables (@@unscopables)</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoDesktop(48)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.match (@@match)</td> + <td>{{CompatChrome(50)}}</td> + <td>{{CompatGeckoDesktop(40)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.species (@@species)</td> + <td>{{CompatChrome(51)}}</td> + <td>{{CompatGeckoDesktop(41)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.toPrimitive (@@toPrimitive)</td> + <td>{{CompatChrome(48)}}</td> + <td>{{CompatGeckoDesktop(44)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.replace (@@replace)</td> + <td>{{CompatChrome(50)}}</td> + <td>{{CompatGeckoDesktop(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.search (@@search)</td> + <td>{{CompatChrome(50)}}</td> + <td>{{CompatGeckoDesktop(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.split (@@split)</td> + <td>{{CompatChrome(50)}}</td> + <td>{{CompatGeckoDesktop(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.isConcatSpreadable (@@isconcatspreadable)</td> + <td>{{CompatChrome(48)}}</td> + <td>{{CompatGeckoDesktop(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.hasInstance (@@hasInstance)</td> + <td>{{CompatChrome(51)}}</td> + <td>{{CompatGeckoDesktop(50)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.toStringTag (@@toStringTag)</td> + <td>{{CompatChrome(49)}}</td> + <td>{{CompatGeckoDesktop(51)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoMobile(36)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.iterator (@@iterator)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoMobile(36)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.unscopables (@@unscopables)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatChrome(38)}}</td> + <td>{{CompatGeckoMobile(48)}}</td> + <td>{{CompatNo}}</td> + <td>25</td> + <td>9</td> + </tr> + <tr> + <td>Symbol.match (@@match)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(40)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.species (@@species)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(41)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.toPrimitive (@@toPrimitive)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(44)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.replace (@@replace)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.search (@@search)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.split (@@split)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.isConcatSpreadable (@@isconcatspreadable)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(48)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.hasInstance (@@hasInstance)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(50)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + <tr> + <td>Symbol.toStringTag (@@toStringTag)</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatGeckoMobile(51)}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatUnknown}}</td> + <td>{{CompatUnknown}}</td> + </tr> + </tbody> +</table> +</div> + +<h2 id="See_also">See also</h2> + +<ul> + <li><a href="/en-US/docs/Glossary/Symbol">Glossary: Symbol data type</a></li> + <li>{{jsxref("Operators/typeof", "typeof")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Data_structures">Data types and data structures</a></li> + <li><a href="https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/">"ES6 In Depth: Symbols" on hacks.mozilla.org</a></li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html b/files/uk/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html new file mode 100644 index 0000000000..2c6541ad4d --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html @@ -0,0 +1,99 @@ +--- +title: Symbol.isConcatSpreadable +slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <strong><code>Symbol.isConcatSpreadable</code></strong> використовують, щоб налаштувати вирівнювання об'єкта до масиву його елементів при використанні методу {{jsxref("Array.prototype.concat()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-isconcatspreadable.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>Символ <code>@@isConcatSpreadable</code> (<code>Symbol.isConcatSpreadable</code>) може бути визначений як особиста чи успадкована властивість, а його значення є булевою величиною. Він може контролювати поведінку масивів та подібних до масивів об'єктів:</p> + +<ul> + <li>Для масивів поведінкою за замовчуванням є розкладання (вирівнювання) елементів. <code>Symbol.isConcatSpreadable</code> може запобігти вирівнюванню у цих випадках.</li> + <li>Подібні до масивів об'єкти за замовчуванням не виконують розкладання чи вирівнювання. <code>Symbol.isConcatSpreadable</code> може виконати примусове вирівнювання у цих випадках.</li> +</ul> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Масиви">Масиви</h3> + +<p>За замовчуванням {{jsxref("Array.prototype.concat()")}} розкладає (вирівнює) масиви:</p> + +<pre class="brush: js notranslate">let alpha = ['а', 'б', 'в'], +let numeric = [1, 2, 3] + +let alphaNumeric = alpha.concat(numeric) + +console.log(alphaNumeric) // Результат: ['а', 'б', 'в', 1, 2, 3] +</pre> + +<p>Присвоївши <code>Symbol.isConcatSpreadable</code> значення <code>false</code>, ви можете відключити цю поведінку:</p> + +<pre class="brush: js notranslate">let alpha = ['а', 'б', 'в'], +let numeric = [1, 2, 3] + +numeric[Symbol.isConcatSpreadable] = false +let alphaNumeric = alpha.concat(numeric) + +console.log(alphaNumeric) // Результат: ['а', 'б', 'в', [1, 2, 3] ] +</pre> + +<h3 id="Подібні_до_масивів_обєкти">Подібні до масивів об'єкти</h3> + +<p>Подібні до масивів об'єкти за замовчуванням не розкладаються. <code>Symbol.isConcatSpreadable</code> необхідно присвоїти <code>true</code>, щоб отримати вирівняний масив:</p> + +<pre class="brush: js notranslate">let x = [1, 2, 3] + +let fakeArray = { + [Symbol.isConcatSpreadable]: true, + length: 2, + 0: 'всім', + 1: 'привіт' +} + +x.concat(fakeArray) // [1, 2, 3, "всім", "привіт"] +</pre> + +<div class="blockIndicator note"> +<p><strong>Заувага:</strong> Властивість <code>length</code> використовується, щоб контролювати кількість властивостей об'єкта, що будуть додані. У наведеному вище прикладі <code>length:2</code> вказує, що треба додати дві властивості.</p> +</div> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.isConcatSpreadable")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Array.prototype.concat()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/uk/web/javascript/reference/global_objects/symbol/iterator/index.html new file mode 100644 index 0000000000..a41c7e413c --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/iterator/index.html @@ -0,0 +1,116 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.iterator</strong></code> визначає для об'єкта ітератор за замовчуванням. Використовується циклом <a href="/uk/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a>.</p> + +<p>{{EmbedInteractiveExample("pages/js/symbol-iterator.html")}}</p> + +<div class="hidden"> +<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p> +</div> + +<h2 id="Опис">Опис</h2> + +<p>Коли виникає необхідність перебрати об'єкт (наприклад, на початку циклу <code>for..of</code>), його метод <code>@@iterator</code> викликається без аргументів, а <strong>ітератор</strong>, який він повертає, використовується для отримання значень, що перебираються.</p> + +<p>Деякі вбудовані типи мають визначену за замовчуванням поведінку під час перебору, в той час, як інші типи (такі як {{jsxref("Object")}}) її не мають. Вбудовані типи, що мають метод <code>@@iterator</code>, наступні:</p> + +<ul> + <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li> + <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li> + <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li> +</ul> + +<p>Дивіться більше інформації у статті<a href="/uk/docs/Web/JavaScript/Reference/Протоколи_перебору"> Протоколи перебору</a>.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Створені_користувачем_ітерабельні_обєкти">Створені користувачем ітерабельні об'єкти</h3> + +<p>Ми можемо створювати власні ітерабельні об'єкти наступним чином:</p> + +<pre class="brush: js notranslate">var myIterable = {} +myIterable[Symbol.iterator] = function* () { + yield 1; + yield 2; + yield 3; +}; +[...myIterable] // [1, 2, 3] +</pre> + +<p>Або ітерабельні об'єкти можна визначити безпосередньо всередині класу чи об'єкта, використовуючи <a href="/uk/docs/Web/JavaScript/Reference/Operators/Ініціалізація_об’єктів#Обчислювані_імена_властивостей">обчислювані властивості</a>:</p> + +<pre class="brush: js notranslate">class Foo { + *[Symbol.iterator] () { + yield 1; + yield 2; + yield 3; + } +} + +const someObj = { + *[Symbol.iterator] () { + yield 'а'; + yield 'б'; + } +} + +[...new Foo] // [ 1, 2, 3 ] +[...someObj] // [ 'а', 'б' ]</pre> + +<h3 id="Погано_сформовані_ітерабельні_обєкти">Погано сформовані ітерабельні об'єкти</h3> + +<p>Якщо метод ітерабельного об'єкта <code>@@iterator</code> не повертає об'єкт ітератора, то це погано сформований ітерабельний об'єкт. Використання його в такому вигляді ймовірно призведе до викидання винятків під час виконання або помилкової поведінки:</p> + +<pre class="brush: js notranslate">var nonWellFormedIterable = {} +nonWellFormedIterable[Symbol.iterator] = () => 1 +[...nonWellFormedIterable] // TypeError: [] is not a function +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + +<div class="hidden"> +<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> +</div> + +<p>{{Compat("javascript.builtins.Symbol.iterator")}}</p> + +<div id="compat-mobile"></div> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li><a href="/uk/docs/Web/JavaScript/Reference/Протоколи_перебору">Протоколи перебору</a></li> + <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li> + <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li> + <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li> + <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/match/index.html b/files/uk/web/javascript/reference/global_objects/symbol/match/index.html new file mode 100644 index 0000000000..fd076f301f --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/match/index.html @@ -0,0 +1,71 @@ +--- +title: Symbol.match +slug: Web/JavaScript/Reference/Global_Objects/Symbol/match +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.match</strong></code> визначає збіг регулярного виразу з рядком. Ця функція викликається методом {{jsxref("String.prototype.match()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-match.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>Ця функція також використовується, щоб з'ясувати, чи об'єкти поводяться як регулярні вирази. Наприклад, методи {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} та {{jsxref("String.prototype.includes()")}} перевіряють, чи є перший аргумент регулярним виразом, та викидають {{jsxref("TypeError")}}, якщо це так. Отже, якщо символ <code>match</code> має значення <code>false</code> (або <a href="/uk/docs/Glossary/Falsy">хибне</a> значення), він вказує, що об'єкт не призначений для використання в якості регулярного виразу.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Відключення_перевірки_isRegExp">Відключення перевірки <code>isRegExp</code></h3> + +<p>Наступний код викине помилку {{jsxref("TypeError")}}:</p> + +<pre class="brush: js notranslate">'/bar/'.startsWith(/bar/); + +// Викидає TypeError, оскільки /bar/ є регулярним виразом, +// а Symbol.match не змінений.</pre> + +<p>Однак, якщо ви присвоїте <code>Symbol.match</code> значення <code>false</code>, перевірка <code>isRegExp</code> (яка використовує властивість <code>match</code>) вкаже, що об'єкт не є об'єктом регулярного виразу. Як наслідок, методи <code>startsWith</code> та <code>endsWith</code> не викидатимуть <code>TypeError</code>.</p> + +<pre class="brush: js notranslate">var re = /foo/; +re[Symbol.match] = false; +'/foo/'.startsWith(re); // true +'/baz/'.endsWith(re); // false +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.match', 'Symbol.match')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.match")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@match", "RegExp.prototype[@@match]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/matchall/index.html b/files/uk/web/javascript/reference/global_objects/symbol/matchall/index.html new file mode 100644 index 0000000000..af531d4376 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/matchall/index.html @@ -0,0 +1,78 @@ +--- +title: Symbol.matchAll +slug: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +tags: + - JavaScript + - Symbol + - Властивість + - Довідка + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/matchAll +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.matchAll</strong></code> повертає ітератор, який видає збіги регулярного виразу з рядком. Ця функція викликається методом {{jsxref("String.prototype.matchAll()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-matchall.html","shorter")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<div> +<p>Цей символ використовується для {{jsxref("String.prototype.matchAll()")}} та зокрема у {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}. Наступні два приклади повертають однаковий результат:</p> + +<pre class="brush: js notranslate">'абв'.matchAll(/а/); + +/а/[Symbol.matchAll]('абв');</pre> + +<p>Цей метод існує для налаштування поведінки пошуку збігів всередині підкласів {{jsxref("RegExp")}}.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> +</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_Symbol.matchAll">Використання Symbol.matchAll</h3> + +<pre class="brush: js notranslate">let re = /[0-9]+/g; +let str = '2016-01-02|2019-03-07'; + +const numbers = { + *[Symbol.matchAll] (str) { + for (const n of str.matchAll(/[0-9]+/g)) + yield n[0]; + } +}; + +console.log(Array.from(str.matchAll(numbers))); +// Array ["2016", "01", "02", "2019", "03", "07"] +</pre> + +<p>Дивіться більше прикладів у {{jsxref("String.prototype.matchAll()")}} та {{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}.</p> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.matchall', 'Symbol.matchAll')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.matchAll")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("String.prototype.matchAll()")}}</li> + <li>{{jsxref("RegExp.@@matchAll", "RegExp.prototype[@@matchAll]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/replace/index.html b/files/uk/web/javascript/reference/global_objects/symbol/replace/index.html new file mode 100644 index 0000000000..0f37a4a289 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/replace/index.html @@ -0,0 +1,66 @@ +--- +title: Symbol.replace +slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.replace</strong></code> визначає метод, який замінює збіги у рядку. Ця функція викликається методом {{jsxref("String.prototype.replace()")}}.</p> + +<p>Щоб дізнатись більше, дивіться {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} та {{jsxref("String.prototype.replace()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-replace.html")}}</div> + + + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_Symbol.replace">Використання Symbol.replace</h3> + +<pre class="brush: js notranslate">class CustomReplacer { + constructor(value) { + this.value = value; + } + [Symbol.replace](string) { + return string.replace(this.value, '#!@?'); + } +} + +console.log('football'.replace(new CustomReplacer('foo'))); +// очікуваний результат: "#!@?tball"</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.replace")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/search/index.html b/files/uk/web/javascript/reference/global_objects/symbol/search/index.html new file mode 100644 index 0000000000..36aad26385 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/search/index.html @@ -0,0 +1,66 @@ +--- +title: Symbol.search +slug: Web/JavaScript/Reference/Global_Objects/Symbol/search +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.search</strong></code> визначає метод, який повертає індекс у рядку, що збігається з регулярним виразом. Ця функція викликається методом {{jsxref("String.prototype.search()")}}.</p> + +<p>Щоб дізнатись більше, дивіться {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} та {{jsxref("String.prototype.search()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-search.html")}}</div> + + + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Користувацький_пошук_у_рядку">Користувацький пошук у рядку</h3> + +<pre class="brush: js notranslate">class caseInsensitiveSearch { + constructor(value) { + this.value = value.toLowerCase(); + } + [Symbol.search](string) { + return string.toLowerCase().indexOf(this.value); + } +} + +console.log('foobar'.search(new caseInsensitiveSearch('BaR'))); +// очікуваний результат: 3</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.search")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.split")}}</li> + <li>{{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/species/index.html b/files/uk/web/javascript/reference/global_objects/symbol/species/index.html new file mode 100644 index 0000000000..0698c840d5 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/species/index.html @@ -0,0 +1,69 @@ +--- +title: Symbol.species +slug: Web/JavaScript/Reference/Global_Objects/Symbol/species +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.species</strong></code> визначає властивість, значенням якої є функція, яку використовує конструктор для створення похідних об'єктів.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-species.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>Властивість-аксесор species дозволяє підкласам перевизначати конструктор для об'єктів.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Використання_species">Використання species</h3> + +<p>Можливо, ви захочете повертати об'єкти {{jsxref("Array")}} у вашому похідному класі масивів <code>MyArray</code>. Наприклад, при використанні методів, таких як {{jsxref("Array.map", "map()")}}, які повертають конструктор за замовчуванням, ви бажаєте, щоб вони повертали батьківський об'єкт <code>Array</code> замість об'єкта <code>MyArray</code>. Символ species дозволяє це зробити:</p> + +<pre class="brush: js notranslate">class MyArray extends Array { + // Перевизначаємо species на батьківський конструктор Array + static get [Symbol.species]() { return Array; } +} +let a = new MyArray(1,2,3); +let mapped = a.map(x => x * x); + +console.log(mapped instanceof MyArray); // false +console.log(mapped instanceof Array); // true +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.species")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Map.@@species", "Map[@@species]")}}</li> + <li>{{jsxref("Set.@@species", "Set[@@species]")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/split/index.html b/files/uk/web/javascript/reference/global_objects/symbol/split/index.html new file mode 100644 index 0000000000..baabe4748f --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/split/index.html @@ -0,0 +1,66 @@ +--- +title: Symbol.split +slug: Web/JavaScript/Reference/Global_Objects/Symbol/split +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <code><strong>Symbol.split</strong></code> визначає метод, що розбиває рядок за індексами, які збігаються з регулярним виразом. Ця функція викликається методом {{jsxref("String.prototype.split()")}}.</p> + +<p>Щоб дізнатись більше, дивіться {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} та {{jsxref("String.prototype.split()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-split.html")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Користувацьке_розбиття_з_переверненням">Користувацьке розбиття з переверненням</h3> + +<pre class="brush: js notranslate">class ReverseSplit { + [Symbol.split](string) { + const array = string.split(' '); + return array.reverse(); + } +} + +console.log('Another one bites the dust'.split(new ReverseSplit())); +// очікуваний результат: [ "dust", "the", "bites", "one", "Another" ]</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.split")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Symbol.match")}}</li> + <li>{{jsxref("Symbol.replace")}}</li> + <li>{{jsxref("Symbol.search")}}</li> + <li>{{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/symbol/index.html b/files/uk/web/javascript/reference/global_objects/symbol/symbol/index.html new file mode 100644 index 0000000000..8ed616cee6 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/symbol/index.html @@ -0,0 +1,83 @@ +--- +title: Конструктор Symbol() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/Symbol +--- +<div>{{JSRef}}</div> + +<p>Конструктор <code>Symbol()</code> повертає значення типу <strong>symbol</strong>, але він не є повноцінним конструктором, оскільки не підтримує синтаксис "<code>new Symbol()</code>", а також не призначений для створення підкласів. Його можна використовувати як значення блоку <code><a href="/uk/docs/Web/JavaScript/Reference/Classes/extends">extends</a></code> у визначенні класу, але виклик його через <code><a href="/uk/docs/Web/JavaScript/Reference/Operators/super">super</a></code> спричинить виняток.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-constructor.html", "taller")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<h2 id="Синтаксис">Синтаксис</h2> + +<pre class="syntaxbox notranslate">Symbol([<var>description</var>])</pre> + +<h3 id="Параметри">Параметри</h3> + +<dl> + <dt><code><var>description</var></code> {{optional_inline}}</dt> + <dd>Рядок. Опис символа, який може використовуватись для відлагодження, але не для доступу до самого символа.</dd> +</dl> + +<h2 id="Прилади">Прилади</h2> + +<h3 id="Створення_символів">Створення символів</h3> + +<p>Щоб створити новий примітивний символ, напишіть <code>Symbol()</code> з необов'язковим рядком опису:</p> + +<pre class="brush: js notranslate">let sym1 = Symbol() +let sym2 = Symbol('foo') +let sym3 = Symbol('foo') +</pre> + +<p>Наведений вище код створює три нові символи. Зауважте, що <code>Symbol("foo")</code> не приводить рядок <code>"foo"</code> до символа. Він кожен раз створює новий символ:</p> + +<pre class="brush: js notranslate">Symbol('foo') === Symbol('foo') // false +</pre> + +<h3 id="new_Symbol...">new Symbol(...)</h3> + +<p>Наступний синтаксис з оператором {{jsxref("Operators/new", "new")}} викине помилку {{jsxref("TypeError")}}:</p> + +<pre class="brush: js notranslate">let sym = new Symbol() // TypeError +</pre> + +<p>Це запобігає створенню явного об'єкта-обгортки <code>Symbol</code> замість нового символьного значення та може здивувати, оскільки створення таких об'єктів-обгорток навколо примітивних типів даних загалом можливе (наприклад, <code>new Boolean</code>, <code>new String</code> та <code>new Number</code>).</p> + +<p>Якщо вам дійсно потрібно створити об'єкт-обгортку <code>Symbol</code>, ви можете скористатись фукнцією <code>Object()</code>:</p> + +<pre class="brush: js notranslate">let sym = Symbol('foo'); +let symObj = Object(sym); +typeof sym // => "symbol" +typeof symObj // => "object" +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol-constructor', 'Symbol constructor')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.Symbol")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li><a href="/uk/docs/Glossary/Символ">Словник: символьний тип даних</a></li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/toprimitive/index.html b/files/uk/web/javascript/reference/global_objects/symbol/toprimitive/index.html new file mode 100644 index 0000000000..0f9567a8bb --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/toprimitive/index.html @@ -0,0 +1,75 @@ +--- +title: Symbol.toPrimitive +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +--- +<div>{{JSRef}}</div> + +<p><code><strong>Symbol.toPrimitive</strong></code> - це символ, який визначає властивість зі значенням-функцією, що викликається для перетворення об'єкта на відповідне просте значення.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-toprimitive.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>За допомогою властивості <strong><code>Symbol.toPrimitive</code></strong> (що використовується в якості функції) об'єкт може перетворюватись на прості значення. Функція викликається з рядковим аргументом <strong><code>hint</code></strong>, який вказує бажаний тип отриманого примітиву. Аргумент <strong><code>hint</code></strong> може мати значення <code>"<em>number</em>"</code>, <code>"<em>string</em>"</code> або <code>"<em>default</em>"</code>.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Модифікація_простих_значень_отриманих_перетворенням_обєкта">Модифікація простих значень, отриманих перетворенням об'єкта</h3> + +<p>Наступний приклад описує, як властивість <strong><code>Symbol.toPrimitive</code></strong> може змінювати прості значення, отримані з об'єкта.</p> + +<pre class="brush: js notranslate">// Об'єкт без властивості Symbol.toPrimitive. +var obj1 = {}; +console.log(+obj1); // NaN +console.log(`${obj1}`); // "[object Object]" +console.log(obj1 + ''); // "[object Object]" + +// Об'єкт з властивістю Symbol.toPrimitive. +var obj2 = { + [Symbol.toPrimitive](hint) { + if (hint == 'number') { + return 10; + } + if (hint == 'string') { + return 'привіт'; + } + return true; + } +}; +console.log(+obj2); // 10 -- hint дорівнює "number" +console.log(`${obj2}`); // "привіт" -- hint дорівнює "string" +console.log(obj2 + ''); // "true" -- hint дорівнює "default" +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.toPrimitive")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Date.@@toPrimitive", "Date.prototype[@@toPrimitive]")}}</li> + <li>{{jsxref("Symbol.@@toPrimitive", "Symbol.prototype[@@toPrimitive]")}}</li> + <li>{{jsxref("Object.prototype.toString()")}}</li> + <li>{{jsxref("Object.prototype.valueOf()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/uk/web/javascript/reference/global_objects/symbol/tostringtag/index.html new file mode 100644 index 0000000000..9faa5645ca --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/tostringtag/index.html @@ -0,0 +1,99 @@ +--- +title: Symbol.toStringTag +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Довідка + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <strong><code>Symbol.toStringTag</code></strong> - це властивість з рядковим значенням, що використовується для створення заданого рядкового опису об'єкта. До неї звертається метод {{jsxref("Object.prototype.toString()")}}.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-tostringtag.html")}}</div> + +<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div> + +<div>{{js_property_attributes(0,0,0)}}</div> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Теги_за_замовчуванням">Теги за замовчуванням</h3> + +<pre class="brush: js notranslate">Object.prototype.toString.call('foo'); // "[object String]" +Object.prototype.toString.call([1, 2]); // "[object Array]" +Object.prototype.toString.call(3); // "[object Number]" +Object.prototype.toString.call(true); // "[object Boolean]" +Object.prototype.toString.call(undefined); // "[object Undefined]" +Object.prototype.toString.call(null); // "[object Null]" +// ... та інші +</pre> + +<h3 id="Вбудовані_символи_toStringTag">Вбудовані символи toStringTag</h3> + +<pre class="brush: js notranslate">Object.prototype.toString.call(new Map()); // "[object Map]" +Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]" +Object.prototype.toString.call(Promise.resolve()); // "[object Promise]" +// ... та інші +</pre> + +<h3 id="Користувацькі_класи_з_тегом_за_замовчуванням">Користувацькі класи з тегом за замовчуванням</h3> + +<p>При створенні власного класу, JavaScript за замовчуванням виставляє тег "Object":</p> + +<pre class="brush: js notranslate">class ValidatorClass {} + +Object.prototype.toString.call(new ValidatorClass()); // "[object Object]" +</pre> + +<h3 id="Користувацький_тег_з_toStringTag">Користувацький тег з toStringTag</h3> + +<p>Отже, за допомогою <code>toStringTag</code> ви можете налаштувати свій власний тег:</p> + +<pre class="brush: js notranslate">class ValidatorClass { + get [Symbol.toStringTag]() { + return 'Validator'; + } +} + +Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]" +</pre> + +<h3 id="toStringTag_доступний_на_усіх_DOM-обєктах">toStringTag доступний на усіх DOM-об'єктах</h3> + +<p>Завдяки <a href="https://github.com/heycam/webidl/pull/357">змінам у специфікації WebIDL</a> в середині 2020, переглядачі додають властивість <code>Symbol.toStringTag</code> до усіх DOM-об'єктів. Наприклад, для звернення до властивості <code>Symbol.toStringTag</code> у {{domxref("HTMLButtonElement")}}:</p> + +<pre class="brush: js notranslate">let test = document.createElement('button'); +test.toString(); // Вертає [object HTMLButtonElement] +test[Symbol.toStringTag]; // Вертає HTMLButtonElement</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">Специфікація</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.toStringTag")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Object.prototype.toString()")}}</li> +</ul> diff --git a/files/uk/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/uk/web/javascript/reference/global_objects/symbol/unscopables/index.html new file mode 100644 index 0000000000..5b90c252d4 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/symbol/unscopables/index.html @@ -0,0 +1,89 @@ +--- +title: Symbol.unscopables +slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +tags: + - ECMAScript 2015 + - JavaScript + - Symbol + - Властивість + - Символ +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +--- +<div>{{JSRef}}</div> + +<p>Добревідомий символ <strong><code>Symbol.unscopables</code></strong> використовується, щоб визначити об'єкт, чиї імена особистих та успадкованих властивостей виключаються з прив'язок оточення <code><a href="/uk/docs/Web/JavaScript/Reference/Statements/with">with</a></code> для асоційованого об'єкта.</p> + +<div>{{EmbedInteractiveExample("pages/js/symbol-unscopables.html")}}</div> + + + +<h2 id="Опис">Опис</h2> + +<p>Символ <code>@@unscopables</code> (<code>Symbol.unscopables</code>) можна визначити на будь-якому об'єкті, щоб запобігти розкриттю імен властивостей в якості лексичних змінних у прив'язках оточення <code><a href="/uk/docs/Web/JavaScript/Reference/Statements/with">with</a></code>. Зауважте, що при використанні <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">строгого режиму</a> інструкції <code>with</code> недоступні та, відповідно, не потребують цього символа.</p> + +<p>Присвоєння властивості значення <code>true</code> у об'єкті <code>unscopables</code> зробить її невидимою (<em>unscopable</em>), і, таким чином, вона не з'явиться у змінних лексичної області видимості. Присвоєння властивості значення <code>false</code> зробить її видимою (<code>scopable</code>), відповідно, вона з'явиться у змінних лексичної області видимості.</p> + +<p>{{js_property_attributes(0,0,0)}}</p> + +<h2 id="Приклади">Приклади</h2> + +<h3 id="Видимість_у_інструкціях_with">Видимість у інструкціях with</h3> + +<p>Наступний код добре працює у версіях ES5 та нижче. Однак, у ECMAScript 2015 та пізніших версіях був запроваджений метод {{jsxref("Array.prototype.keys()")}}. Це означає, що всередині оточення <code>with</code> "keys" тепер буде методом, а не змінною. Саме тоді був доданий символ <code>unscopables</code>. Вбудоване налаштування <code>unscopables</code> реалізоване у вигляді {{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}, щоб запобігти потраплянню деяких методів масиву у область видимості <code>with</code>.</p> + +<pre class="brush: js notranslate">var keys = []; + +with (Array.prototype) { + keys.push('something'); +} + +Object.keys(Array.prototype[Symbol.unscopables]); +// ["copyWithin", "entries", "fill", "find", "findIndex", +// "includes", "keys", "values"] +</pre> + +<h3 id="Unscopables_у_обєктах">Unscopables у об'єктах</h3> + +<p>Ви також можете налаштувати <code>unscopables</code> для своїх власних об'єктів.</p> + +<pre class="brush: js notranslate">var obj = { + foo: 1, + bar: 2 +}; + +obj[Symbol.unscopables] = { + foo: false, + bar: true +}; + +with (obj) { + console.log(foo); // 1 + console.log(bar); // ReferenceError: bar is not defined +} +</pre> + +<h2 id="Специфікації">Специфікації</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Специфікація</th> + </tr> + <tr> + <td>{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2> + + + +<p>{{Compat("javascript.builtins.Symbol.unscopables")}}</p> + +<h2 id="Див._також">Див. також</h2> + +<ul> + <li>{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}</li> + <li>оператор <code><a href="/uk/docs/Web/JavaScript/Reference/Statements/with">with</a></code> (недоступний у <a href="/uk/docs/Web/JavaScript/Reference/Strict_mode">строгому режимі</a>)</li> +</ul> |
