From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/symbol/@@toprimitive/index.html | 66 ++++++ .../reference/global_objects/symbol/for/index.html | 140 +++++++++++++ .../global_objects/symbol/hasinstance/index.html | 71 +++++++ .../reference/global_objects/symbol/index.html | 227 +++++++++++++++++++++ .../symbol/isconcatspreadable/index.html | 148 ++++++++++++++ .../global_objects/symbol/iterator/index.html | 135 ++++++++++++ .../global_objects/symbol/keyfor/index.html | 87 ++++++++ .../global_objects/symbol/match/index.html | 113 ++++++++++ .../global_objects/symbol/prototype/index.html | 106 ++++++++++ .../global_objects/symbol/replace/index.html | 99 +++++++++ .../global_objects/symbol/search/index.html | 54 +++++ .../global_objects/symbol/species/index.html | 116 +++++++++++ .../global_objects/symbol/split/index.html | 53 +++++ .../global_objects/symbol/toprimitive/index.html | 92 +++++++++ .../global_objects/symbol/tostringtag/index.html | 89 ++++++++ .../global_objects/symbol/unscopables/index.html | 89 ++++++++ .../global_objects/symbol/valueof/index.html | 94 +++++++++ 17 files changed, 1779 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/for/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/match/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/replace/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/search/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/species/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/split/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html create mode 100644 files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html (limited to 'files/ru/web/javascript/reference/global_objects/symbol') diff --git a/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html b/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html new file mode 100644 index 0000000000..680100f800 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html @@ -0,0 +1,66 @@ +--- +title: 'Symbol.prototype[@@toPrimitive]' +slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +tags: + - ECMAScript 2015 + - ECMAScript6 + - JavaScript + - Method + - Prototype + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive +--- +
{{JSRef}}
+ +
+ +

Метод [@@toPrimitive]()  преобразует объект Symbol в примитивное значение.

+ +

Синтаксис

+ +
Symbol()[Symbol.toPrimitive](hint)
+
+ +

Возвращаемое значение

+ +

Примитивное значение указанного объекта Symbol {{jsxref("Symbol")}}.

+ +

Описание

+ +

Метод [@@toPrimitive]() возвращает примитивное значение объекта Symbol как тип данных Symbol. Аргумент hint не используется.

+ +

JavaScript вызывает метод[@@toPrimitive] () для преобразования объекта в примитив. JavaScript автоматически вызывает метод, когда на месте объекта ожидается примитивное значение.

+ +

Спефикации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКоментарий
{{SpecName('ES2015', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}{{Spec2('ESDraft')}}
+ +

Совместимость с браузерами

+ + + +

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

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/for/index.html b/files/ru/web/javascript/reference/global_objects/symbol/for/index.html new file mode 100644 index 0000000000..5b4a6ee85c --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/for/index.html @@ -0,0 +1,140 @@ +--- +title: Symbol.for() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/for +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for +--- +
{{JSRef}}
+ +

Метод Symbol.for(key) ищет ранее созданный разделяемый символ по заданному ключу и возвращает его, если он найден. В противном случае создается новый разделяемый символ для данного ключа в глобальном реестре символов.

+ +

Синтаксис

+ +
Symbol.for(key);
+ +

Параметры

+ +
+
key
+
Строка, обязательный. Идентификатор символа (также используется в качестве описания символа).
+
+ +

Описание

+ +

В противоположность вызову Symbol(), функция Symbol.for() создаёт символ, доступный в глобальном списке реестра символов. Symbol.for() не создаёт новый символ при каждом вызове, вместо этого, метод сначала проверяет, существует ли символ с заданным идентификатором в реестре — и возвращает его, если тот присутствует. Если символ с заданным ключом не найден, Symbol.for() создаст новый глобальный символ.

+ +

Глобальный реестр

+ +

Глобальный реестр символов — это список со следующей структурой записей и пустой при инициализации:

+ + + + + + + + + + + + + + + + + +
Элемент глобального реестра символов
ПолеЗначение
[[key]]Строка, используемая в качестве идентификатора.
[[symbol]]Символ, хранящийся глобально.
+ +

Примеры

+ +
Symbol.for("foo"); // создаёт новый глобальный символ
+Symbol.for("foo"); // возвращает символ, созданный прежде
+
+// Одинаковый глобальный символ, но не локальный
+Symbol.for("bar") === Symbol.for("bar"); // true
+Symbol("bar") === Symbol("bar"); // false
+
+// Идентификатор также используется в качестве описания
+var sym = Symbol.for("mario");
+sym.toString(); // "Symbol(mario)"
+
+ +

Чтобы предотвратить конфликт имён ваших глобальных символов и глобальных символов из других библиотек, может оказаться неплохой идеей использование префиксов:

+ +
Symbol.for("mdn.foo");
+Symbol.for("mdn.bar");
+
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.for', 'Symbol.for')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{ CompatChrome(40) }}{{ CompatGeckoDesktop("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

См. также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html new file mode 100644 index 0000000000..48c2d59173 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html @@ -0,0 +1,71 @@ +--- +title: Symbol.hasInstance +slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +tags: + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance +--- +
{{JSRef}}
+ +

Symbol.hasInstance — известный символ, который используется для определения является ли объект экземпляром конструктора. Этот символ используется для изменения поведения оператора {{jsxref("Operators/instanceof", "instanceof")}}.

+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Примеры

+ +

Поведение instanceof может быть изменено, например, следующим образом:

+ +
class MyArray {
+  static [Symbol.hasInstance](instance) {
+    return Array.isArray(instance);
+  }
+}
+console.log([] instanceof MyArray); // true
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ +

 

+ + + +

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

+ +

 

+ +
 
+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/index.html b/files/ru/web/javascript/reference/global_objects/symbol/index.html new file mode 100644 index 0000000000..9dbecb81cb --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/index.html @@ -0,0 +1,227 @@ +--- +title: Symbol +slug: Web/JavaScript/Reference/Global_Objects/Symbol +tags: + - API + - ECMAScript6 + - JavaScript + - Symbol + - Символы +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef}}
+ +

Сводка

+ +

Символ (анг. Symbol) — это уникальный и неизменяемый тип данных, который может быть использован как идентификатор для свойств объектов. Символьный объект (анг. symbol object) — это объект-обёртка (англ. wrapper) для {{Glossary("Primitive", "примитивного")}} символьного типа.

+ +

Синтаксис

+ +
Symbol([описание])
+ +

Параметры

+ +
+
описание {{optional_inline}}
+
Необязательный, строка. Описание символа, которое может быть использовано во время отладки, но не для доступа к самому символу.
+
+ +

Описание

+ +

Чтобы создать новый символьный примитив, достаточно написать Symbol(), указав по желанию строку в качестве описания этого символа:

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

Код выше создает три новых символа. Заметьте, что Symbol("foo") не выполняет приведение (англ. coercion) строки "foo" к символу. Это выражение создает каждый раз новый символ:

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

Код ниже с оператором {{jsxref("Operators/new", "new")}} бросит исключение {{jsxref("TypeError")}}:

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

Это удерживает разработчиков от создания явного объекта-обёртки Symbol вместо нового символьного значения. Создание явных объектов-обёрток для примитивных типов доступно (например, new Boolean, new String, new Number).

+ +

Если вам действительно необходимо обернуть символ в объект, вы можете использовать функцию Object():

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

Разделяемые символы в глобальном символьном реестре

+ +

Приведенный выше синтаксис, использующий функцию Symbol(), не создаст глобальный символ, который был бы доступен в любом месте вашего кода. Для создания символов, доступных во всех файлах и в окружении (глобальной области), используйте методы {{jsxref("Symbol.for()")}} и {{jsxref("Symbol.keyFor()")}}, чтобы задать или получить символ из глобального символьного реестра.

+ +

Поиск символьных свойств у объектов

+ +

Метод {{jsxref("Object.getOwnPropertySymbols()")}} возвращает массив символов и позволяет получить символьные свойства конкретного объекта. Следует заметить, что при инициализации объекты не получают символьных свойств, так что этот массив будет пуст, пока вы не зададите ему какое-либо символьное свойство.

+ +

Свойства

+ +
+
Symbol.length
+
Содержит длину, всегда равную 0 (нулю).
+
{{jsxref("Symbol.prototype")}}
+
Содержит прототип конструктора Symbol.
+
+ +

Известные символы

+ +

В добавок к вашим собственным символам, JavaScript имеет несколько встроенных символов, представляющих внутренние механизмы языка, которые не были доступны разработчикам в версиях ECMAScript 5 и более ранних. Эти символы доступны посредством следующих свойств:

+ +
+
+

Итерационные символы

+
+
{{jsxref("Symbol.iterator")}}
+
Метод, возвращающий итератор по умолчанию для объекта. Используется конструкцией {{jsxref("Statements/for...of","for...of")}}.
+
+

Символы регулярных выражений

+
+
{{jsxref("Symbol.match")}}
+
Метод для сопоставления объекта со строкой, также используемый для определения возможности объекта выступать в качестве регулярного выражения. Используется функцией {{jsxref("String.prototype.match()")}}.
+
{{jsxref("Symbol.replace")}}
+
Метод, заменяющий совпавшие подстроки в строке. Используется функцией {{jsxref("String.prototype.replace()")}}.
+
{{jsxref("Symbol.search")}}
+
Метод, возвращающий индекс вхождения подстроки, соответствующей регулярному выражению. Используется функцией {{jsxref("String.prototype.search()")}}.
+
{{jsxref("Symbol.split")}}
+
Метод, разбивающий строку на части в местах, соответствующих регулярному выражению. Используется функцией {{jsxref("String.prototype.split()")}}. 
+
+

Другие символы

+
+
{{jsxref("Symbol.hasInstance")}}
+
Метод, определяющий, распознает ли конструктор некоторый объект как свой экземпляр. Используется оператором {{jsxref("Operators/instanceof", "instanceof")}}.
+
{{jsxref("Symbol.isConcatSpreadable")}}
+
Булево значение, показывающее, должен ли объект быть сведен к плоскому представлению (англ. flatten) в виде массива его элементов функцией {{jsxref("Array.prototype.concat()")}}.
+
{{jsxref("Symbol.unscopables")}}
+
Массив строковых имен свойств. Позволяет скрыть свойства от инструкции with (прежде всего для обратной совместимости).
+
{{jsxref("Symbol.species")}}
+
Метод, определяющий конструктор для порождённых объектов.
+
{{jsxref("Symbol.toPrimitive")}}
+
Метод, преобразующий объект в примитив (примитивное значение).
+
{{jsxref("Symbol.toStringTag")}}
+
Строковое значение, используемое в качестве описания объекта по умолчанию. Используется функцией {{jsxref("Object.prototype.toString()")}}
+
+ +

Методы

+ +
+
{{jsxref("Symbol.for()", "Symbol.for(key)")}}
+
Ищет существующие символы по заданному ключу и возвращает его, если он найден. В противном случае создается новый символ для данного ключа в глобальном реестре символов.
+
{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
+
Получает по разделямому символу его ключ из глобального реестра символов.
+
+ +

Прототип Symbol

+ +

Все символы наследуют от {{jsxref("Symbol.prototype")}}.

+ +

Свойства

+ +

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

+ +

Методы

+ +

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

+ +

Примеры

+ +

Использование оператора typeof с символами

+ +

Оператор {{jsxref("Operators/typeof", "typeof")}} позволяет идентифицировать символ.

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

Преобразование типов с символами

+ +

Следующее необходимо помнить при преобразовании типа символов.

+ + + +

Символы и конструкция for...in

+ +

Символы не перечисляются при итерации {{jsxref("Statements/for...in","for...in")}}. В дополнение к этому, {{jsxref("Object.getOwnPropertyNames()")}} не вернет символьные свойства объекта. Тем не менее, их можно получить с помощью {{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); // выведет "c" и "d"
+}
+ +

Символы и JSON.stringify()

+ +

JSON.stringify() игнорирует свойства с ключами Symbol:

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

Подробности см. {{jsxref("JSON.stringify()")}}.

+ +

Объекты-обёртки для Symbol в качестве имен свойств

+ +

Когда объект-обёртка символа используется в качестве имени свойства, этот объект сводится к символу, который он оборачивает:

+ +
var sym = Symbol("foo");
+var obj = {[sym]: 1};
+obj[sym];            // 1
+obj[Object(sym)];    // снова 1
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ES6')}}Изначальное определение
{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}{{Spec2('ESDraft')}}
+ +

Поддержка браузерами

+ + + + + +

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

+ +

См. также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html b/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html new file mode 100644 index 0000000000..68ce170adc --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html @@ -0,0 +1,148 @@ +--- +title: Symbol.isConcatSpreadable +slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +tags: + - ECMScript 2015 + - JavaScript + - Property +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable +--- +
{{JSRef}}
+ +

 Symbol.isConcatSpreadable - это известный символ, который используется для  определения, должен ли объект редуцироваться к сумме своих элементов при использовании метода {{jsxref("Array.prototype.concat()")}}.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

@@isConcatSpreadable-символ (Symbol.isConcatSpreadable) можно определить как собственное или унаследованное свойство с булевым значением. Оно контролирует поведение массивов и массивоподобных объектов:

+ + + +

Примеры

+ +

Массивы

+ +

По умолчанию, {{jsxref("Array.prototype.concat()")}}  возвращает массив, объединяющий  элементы исходных массивов:

+ +
var alpha = ['a', 'b', 'c'],
+    numeric = [1, 2, 3];
+
+var alphaNumeric = alpha.concat(numeric);
+
+console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]
+
+ +

Если значение Symbol.isConcatSpreadable  =  false, то можно отменить поведение по умолчанию:

+ +
var alpha = ['a', 'b', 'c'],
+    numeric = [1, 2, 3];
+
+numeric[Symbol.isConcatSpreadable] = false;
+var alphaNumeric = alpha.concat(numeric);
+
+console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ]
+
+ +

Массивоподобные объекты

+ +

Для массивоподобных объектов поведением по умолчанию будет сохранение своей структуры. Чтобы вызвать его разложение до суммы  элементов  в итоговом массиве, нужно задать значение true для Symbol.isConcatSpreadable:

+ +
var x = [1, 2, 3];
+
+var fakeArray = {
+  [Symbol.isConcatSpreadable]: true,
+  length: 2,
+  0: 'hello',
+  1: 'world'
+}
+
+x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}{{Spec2('ESDraft')}}No change.
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatChrome(48)}}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(48) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(48) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Смотри также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html new file mode 100644 index 0000000000..4e7ceb90f0 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html @@ -0,0 +1,135 @@ +--- +title: Symbol.iterator +slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +tags: + - ECMAScript6 + - JavaScript + - Свойство + - Символы +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator +--- +
{{JSRef}}
+ +

Symbol.iterator — известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции for...of.

+ +
{{js_property_attributes(0, 0, 0)}}
+ +

Описание

+ +

Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла for..of), метод @@iterator вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.

+ +

Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как {{jsxref("Object")}}) таким свойством не обладают. Метод @@iterator имеют следующие встроенные типы:

+ + + +

Смотрите также Протоколы перебора для получения дополнительных сведений.

+ +

Примеры

+ +

Пользовательские итерируемые объекты

+ +

Мы можем создавать собственные итерируемые объекты, подобно следующему коду:

+ +
var myIterable = {}
+myIterable[Symbol.iterator] = function* () {
+    yield 1;
+    yield 2;
+    yield 3;
+};
+[...myIterable] // [1, 2, 3]
+
+ +

Плохо оформленные итераторы

+ +

Если метод @@iterator объекта не возвращает итератор, то это плохо оформленный итерируемый объект, его использование, скорее всего, приведёт к возникновению исключений или неправильному поведению:

+ +
var nonWellFormedIterable = {}
+nonWellFormedIterable[Symbol.iterator] = () => 1
+[...nonWellFormedIterable] // TypeError: [] is not a function
+
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.iterator', 'Symbol.iterator')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Browser compatibility

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatChrome(43)}}{{ CompatGeckoDesktop(36) }}{{CompatNo}}{{CompatOpera(30)}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile(36) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

See also

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html b/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html new file mode 100644 index 0000000000..3e250ce039 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html @@ -0,0 +1,87 @@ +--- +title: Symbol.keyFor() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +tags: + - JavaScript + - Method +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor +--- +
{{JSRef}}
+ +
 Метод Symbol.keyFor(sym) получает ключ для заданного символа из глобального реестра символов.
+ +
 
+ +

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

+ + + +

Синтакс

+ +
Symbol.keyFor(sym);
+ +

Параметры

+ +
+
sym
+
Символ, обязательный. Символ, ключ которого требуется найти
+
+ +

Возвращаемое значение

+ +

Строка с ключом заданного символа, если он есть в глобальном реестре символов, либо {{jsxref("undefined")}}, если его там нет.

+ +

Примеры

+ +
var globalSym = Symbol.for("foo"); // Создаёт новый глобальный символ
+Symbol.keyFor(globalSym); // "foo"
+
+var localSym = Symbol();
+Symbol.keyFor(localSym); // undefined
+
+// Известные символы не является символами,
+// которые находятся в глобальном реестре символов
+Symbol.keyFor(Symbol.iterator) // undefined
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ES6')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ +

 

+ + + +

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

+ +

 

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/match/index.html b/files/ru/web/javascript/reference/global_objects/symbol/match/index.html new file mode 100644 index 0000000000..135fbcc2ab --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/match/index.html @@ -0,0 +1,113 @@ +--- +title: Symbol.match +slug: Web/JavaScript/Reference/Global_Objects/Symbol/match +tags: + - ECMAScript6 + - JavaScript + - Свойство + - Символы +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match +--- +
{{JSRef}}
+ +

Symbol.match — известный символ, определяющий соответствие строки регулярному выражению. Этот метод вызывается функцией {{jsxref("String.prototype.match()")}}.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

Данный метод также используется для того, чтобы определить, обладает ли объект поведением регулярного выражения. Например, методы {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} и {{jsxref("String.prototype.includes()")}} проверяют, является ли первый аргумент регулярным выражением, и бросают {{jsxref("TypeError")}}, если это так. Соответственно, если символ match установлен в false (или имеет {{Glossary("Falsy", "ложное")}} значение) — это говорит о том, что объект не предназначен для использования в качестве регулярного выражения.

+ +

Примеры

+ +

Блокировка проверки isRegExp

+ +

Следующий код выбросит {{jsxref("TypeError")}}:

+ +
"/bar/".startsWith(/bar/); // Бросает TypeError, так как /bar/ является
+                           // регулярным выражением и Symbol.match не изменён.
+ +

Несмотря на это, если вы зададите свойству Symbol.match значение false, проверка isRegExp (которая использует свойство match) покажет, что объект не является регулярным выражением — как следствие, методы startsWith и endsWith не станут бросать TypeError.

+ +
var re = /foo/;
+re[Symbol.match] = false;
+"/foo/".startsWith(re); // true
+"/baz/".endsWith(re);   // false
+
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.match', 'Symbol.match')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatNo}}{{ CompatGeckoDesktop(40) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{ CompatGeckoMobile(40) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

См. также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html b/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html new file mode 100644 index 0000000000..9152cc6dd8 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html @@ -0,0 +1,106 @@ +--- +title: Symbol.prototype +slug: Web/JavaScript/Reference/Global_Objects/Symbol/prototype +tags: + - ECMAScript6 + - JavaScript + - Свойство + - Символы +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol +--- +
{{JSRef}}
+ +

Свойство Symbol.prototype указывает на прототип конструктора {{jsxref("Symbol")}}.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

Экземпляры типа {{jsxref("Symbol")}} наследуют {{jsxref("Symbol.prototype")}}. Вы можете использовать прототип конструктора, чтобы добавить свойства и методы ко всем экземплярам типа Symbol.

+ +

Свойства

+ +
+
Symbol.prototype.constructor
+
Указывает на функцию, создавшую прототип экземпляра. По умолчанию это функция {{jsxref("Symbol")}}.
+
+ +

Методы

+ +
+
{{jsxref("Symbol.prototype.toSource()")}} {{Non-standard_inline}}
+
Возвращает строку, содержащую исходный код объекта {{jsxref("Global_Objects/Symbol", "Symbol")}}. Перегружает метод {{jsxref("Object.prototype.toSource()")}}.
+
{{jsxref("Symbol.prototype.toString()")}}
+
Возвращает строку, содержащую описание символа. Перегружает метод {{jsxref("Object.prototype.toString()")}}.
+
{{jsxref("Symbol.prototype.valueOf()")}}
+
Возвращает примитивное значение объекта {{jsxref("Symbol")}}. Перегружает метод {{jsxref("Object.prototype.valueOf()")}}.
+
+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.prototype', 'Symbol.prototype')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatVersionUnknown}}{{ CompatGeckoDesktop("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html b/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html new file mode 100644 index 0000000000..abfb4b1f08 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html @@ -0,0 +1,99 @@ +--- +title: Symbol.replace +slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace +--- +
{{JSRef}}
+ +

Symbol.replace — известный символ, задающий метод для замены подстрок в строке. Эта функция вызывается методом {{jsxref("String.prototype.replace()")}}.

+ +

Смотрите также {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} и {{jsxref("String.prototype.replace()")}} для получения дополнительных сведений.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatChrome(50)}}{{CompatVersionUnknown}}{{ CompatGeckoDesktop(49) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}{{CompatNo}}{{CompatVersionUnknown}}{{ CompatGeckoMobile(49) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/search/index.html b/files/ru/web/javascript/reference/global_objects/symbol/search/index.html new file mode 100644 index 0000000000..2f484e317f --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/search/index.html @@ -0,0 +1,54 @@ +--- +title: Symbol.search +slug: Web/JavaScript/Reference/Global_Objects/Symbol/search +tags: + - ECMASript 2015 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search +--- +
{{JSRef}}
+ +

Широко известный символ Symbol.search указывает метод, который вернёт индекс внутри строки, соответствующей регулярному выражению. Эта функция вызывается методом {{jsxref("String.prototype.search()")}}.

+ +

Для получения дополнительной информации см. {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} и {{jsxref("String.prototype.search()")}}.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ + + +

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

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/species/index.html b/files/ru/web/javascript/reference/global_objects/symbol/species/index.html new file mode 100644 index 0000000000..de03682229 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/species/index.html @@ -0,0 +1,116 @@ +--- +title: Symbol.species +slug: Web/JavaScript/Reference/Global_Objects/Symbol/species +tags: + - ECMAScript6 + - Experimental + - JavaScript + - Свойство + - Символы +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species +--- +
{{JSRef}}
+ +

Symbol.species известный символ, позволяющий определить конструктор, использующийся для создания порождённых объектов.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

Свойство Symbol.species, содержащее аксессор (геттер), позволяет подклассам переопределить конструктор, используемый по умолчанию для создания новых объектов.

+ +

Примеры

+ +

Вам может понадобиться возвращать объекты типа {{jsxref("Array")}} в методах вашего производного класса MyArray. Например, при использовании метода вроде {{jsxref("Array.map", "map()")}}, использующего конструктор по умолчанию, вам может потребоваться возвращать объект родительского типа Array, вместо MyArray. Символ species позволит вам это сделать:

+ +
class MyArray extends Array {
+  // Перегружаем species для использования родительского конструктора Array
+  static get [Symbol.species]() { return Array; }
+}
+var a = new MyArray(1,2,3);
+var mapped = a.map(x => x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array);   // true
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ES6')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}{{Spec2('ESDraft')}} 
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка51{{ CompatGeckoDesktop(41) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatNo}}5{{ CompatGeckoMobile(41) }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

См. также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/split/index.html b/files/ru/web/javascript/reference/global_objects/symbol/split/index.html new file mode 100644 index 0000000000..e9c98051b4 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/split/index.html @@ -0,0 +1,53 @@ +--- +title: Symbol.split +slug: Web/JavaScript/Reference/Global_Objects/Symbol/split +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split +--- +
{{JSRef}}
+ +

Symbol.split общеизвестный символ определяет метод, который делит строки в индексах, соответствующих регулярному выражению. Эта функция вызывается методом {{jsxref("String.prototype.split()")}}.

+ +

Для подробной информации, смотрите {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} и {{jsxref("String.prototype.split()")}}.

+ +
{{EmbedInteractiveExample("pages/js/symbol-split.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Specifications

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}{{Spec2('ESDraft')}} 
+ +

Browser compatibility

+ + + +

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

+ +

See also

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html b/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html new file mode 100644 index 0000000000..fa512ba32f --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html @@ -0,0 +1,92 @@ +--- +title: Symbol.toPrimitive +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +tags: + - '@@toPrimitive' + - JavaScript + - toPrimitive +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive +--- +
{{JSRef}}
+ +

Symbol.toPrimitive является символом (symbol), который описывает свойство объекта как функцию, которая вызывается при преобразовании объекта в соответсвующее примитивное значение.

+ +

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

+ + + +

 

+ +

Описание

+ +

С помощью свойства Symbol.toPrimitive (которое описывается как функция), объект может быть приведен к примитивному типу. Функция вызывается со строковым аргументом hint, который передает желаемый тип примитива. Значением аргумента hint может быть одно из следующих значений "number", "string", и "default".

+ +

Примеры

+ +

Описанные ниже примеры показывают как с помощью свойства Symbol.toPrimitive можно привести объект к примитивному типу.

+ +
// Объект без свойства 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 'hello';
+    }
+    return true;
+  }
+};
+console.log(+obj2);     // 10        -- желаемый тип (hint) - "number"
+console.log(`${obj2}`); // "hello"   -- желаемый тип (hint) - "string"
+console.log(obj2 + ''); // "true"    -- желаемый тип (hint) - "default"
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}{{Spec2('ESDraft')}} 
+ +

Поддержка браузерами

+ +

 

+ + + +

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

+ +

См. также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html new file mode 100644 index 0000000000..89cfa3bda8 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html @@ -0,0 +1,89 @@ +--- +title: Symbol.toStringTag +slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag +--- +
{{JSRef}}
+ +
Известный символ Symbol.toStringTag - это строковое значение свойства, которое используется при создании строки описания объекта по умолчанию. Доступ к нему осуществляется через {{jsxref("Object.prototype.toString()")}} метод.
+ +
+ +
{{EmbedInteractiveExample("pages/js/symbol-tostringtag.html")}}
+ + + +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

Многие Javascript типы имеют теги по умолчанию: 

+ +
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]"
+// ... and more
+
+ +

Другие имеют встроенный символ toStringTag:

+ +
Object.prototype.toString.call(new Map());       // "[object Map]"
+Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
+Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
+// ... and more
+
+ +

При создании собственного класса JavaScript по умолчанию использует тег "Object":

+ +
class ValidatorClass {}
+
+Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
+
+ +

С помощью toStringTag можно установить свой собственный тег:

+ +
class ValidatorClass {
+  get [Symbol.toStringTag]() {
+    return 'Validator';
+  }
+}
+
+Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ES2015', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ES2015')}}Initial definition.
{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}{{Spec2('ESDraft')}}
+ +

Совместимость с браузерами

+ + + +

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

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html new file mode 100644 index 0000000000..1cb2a967b3 --- /dev/null +++ b/files/ru/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: + - ECMAScript6 + - JavaScript + - Property + - Symbol +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables +--- +
{{JSRef}}
+ +

Широко известный символ Symbol.unscopables используется для указания значения объекта, чьи собственные и наследуемые имена свойств исключаются из привязок связанного объекта оператора with.

+ +
{{js_property_attributes(0,0,0)}}
+ +

Описание

+ +

Символ @@unscopables (Symbol.unscopables)  может быть определён к любому объекту, чтобы исключить имена свойств из-за того, что они отображаются как лексические переменные с привязкой окружения with. Обратите внимание: если использовать "Строгий режим", оператор with будет недоступен и вероятнее всего также не понадобится этот символ.

+ +

Если Вы зададите свойству знаечние true в объекте unscopables  сделает его "unscopable" и, следовательно, оно не будет задействовано в области лексических переменных. Придав свойству значение false, Вы сделаете его scopable и, как следствие, оно будет задействовано в области лексических переменных.

+ +

Примеры

+ +

Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён метод  {{jsxref("Array.prototype.keys()")}}. Это означает, что внутри окружения with, "ключи" будут методом, а не пременной. Вот где теперь встроенные свойства символа {{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}} вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в оператор with.

+ +
var keys = [];
+
+with (Array.prototype) {
+  keys.push('что-то');
+}
+
+Object.keys(Array.prototype[Symbol.unscopables]);
+// ["copyWithin", "entries", "fill", "find", "findIndex",
+//  "includes", "keys", "values"]
+
+ +

Вы также можете задать unscopables для собственных объектов.

+ +
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
+}
+
+ +

Спецификации

+ + + + + + + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES2015', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ES2015')}}Изначальное определение.
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}{{Spec2('ESDraft')}} 
+ +

Совместимость с браузерами

+ + + +

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

+ +

Смотрите также

+ + diff --git a/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html b/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html new file mode 100644 index 0000000000..f5ed1d1060 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html @@ -0,0 +1,94 @@ +--- +title: Symbol.prototype.valueOf() +slug: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf +--- +
{{JSRef}}
+ +

Метод valueOf() возвращает примитивное значение символьного объекта.

+ +

Синтаксис

+ +
Symbol().valueOf();
+
+ +

Описание

+ +

Метод valueOf объекта {{jsxref("Symbol")}} возвращает примитивное значение символьного объекта как экземпляр типа Symbol.

+ +

JavaScript вызывает метод valueOf для конвертации объекта в примитивное значение. Вам нечасто потребуется вызывать метод valueOf самостоятельно; JavaScript автоматически вызывает его, когда натыкается на объект там, где ожидался примитив.

+ +

Спецификации

+ + + + + + + + + + + + + + +
СпецификацияСтатусКомментарий
{{SpecName('ES6', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}{{Spec2('ES6')}}Изначальное определение.
+ +

Поддержка браузерами

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + +
ВозможностьChromeFirefox (Gecko)Internet ExplorerOperaSafari
Базовая поддержка{{CompatVersionUnknown}}{{ CompatGeckoDesktop("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
ВозможностьAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Базовая поддержка{{CompatVersionUnknown}}{{CompatVersionUnknown}}{{ CompatGeckoMobile("36.0") }}{{CompatNo}}{{CompatNo}}{{CompatNo}}
+
+ +

См. также

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