From 841aae260382e2bf5ebb44d765d8c7301d27caab Mon Sep 17 00:00:00 2001 From: Alexey Istomin Date: Sat, 20 Mar 2021 18:37:44 +0300 Subject: Restore "ё" letter in Russian translation (#239) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs(ru): restore ё letter * docs(ru): resolve conflicts * refactor(idea): remove ide folder --- .../a_re-introduction_to_javascript/index.html | 8 +-- .../ru/web/javascript/about_javascript/index.html | 8 +-- files/ru/web/javascript/closures/index.html | 26 ++++----- files/ru/web/javascript/data_structures/index.html | 8 +-- .../equality_comparisons_and_sameness/index.html | 10 ++-- files/ru/web/javascript/eventloop/index.html | 10 ++-- .../control_flow_and_error_handling/index.html | 20 +++---- .../guide/details_of_the_object_model/index.html | 62 +++++++++++----------- .../guide/expressions_and_operators/index.html | 28 +++++----- files/ru/web/javascript/guide/functions/index.html | 30 +++++------ .../javascript/guide/grammar_and_types/index.html | 38 ++++++------- files/ru/web/javascript/guide/index.html | 2 +- .../guide/indexed_collections/index.html | 34 ++++++------ .../web/javascript/guide/introduction/index.html | 16 +++--- .../guide/iterators_and_generators/index.html | 12 ++--- .../javascript/guide/meta_programming/index.html | 18 +++---- .../javascript/guide/numbers_and_dates/index.html | 20 +++---- .../regular_expressions/assertions/index.html | 8 +-- .../character_classes/index.html | 34 ++++++------ .../guide/regular_expressions/index.html | 28 +++++----- .../javascript/guide/text_formatting/index.html | 16 +++--- .../web/javascript/guide/using_promises/index.html | 24 ++++----- .../guide/working_with_objects/index.html | 46 ++++++++-------- files/ru/web/javascript/index.html | 4 +- .../inheritance_and_the_prototype_chain/index.html | 4 +- .../javascript_technologies_overview/index.html | 14 ++--- .../web/javascript/language_resources/index.html | 6 +-- .../ru/web/javascript/memory_management/index.html | 2 +- .../reference/classes/constructor/index.html | 8 +-- .../reference/classes/extends/index.html | 2 +- .../ru/web/javascript/reference/classes/index.html | 26 ++++----- .../classes/private_class_fields/index.html | 4 +- .../classes/public_class_fields/index.html | 2 +- .../javascript/reference/classes/static/index.html | 2 +- .../reference/errors/already_has_pragma/index.html | 2 +- .../reference/errors/bad_radix/index.html | 2 +- .../reference/errors/bad_regexp_flag/index.html | 2 +- .../errors/bad_return_or_yield/index.html | 2 +- .../errors/called_on_incompatible_type/index.html | 2 +- .../index.html | 2 +- .../errors/cant_access_property/index.html | 20 +++---- .../reference/errors/cant_delete/index.html | 4 +- .../errors/cant_redefine_property/index.html | 8 +-- .../errors/cyclic_object_value/index.html | 2 +- .../reference/errors/dead_object/index.html | 12 ++--- .../errors/delete_in_strict_mode/index.html | 6 +-- .../deprecated_expression_closures/index.html | 4 +- .../errors/deprecated_string_generics/index.html | 6 +-- .../errors/deprecated_tolocaleformat/index.html | 4 +- .../reference/errors/equal_as_assign/index.html | 2 +- .../for-each-in_loops_are_deprecated/index.html | 4 +- .../reference/errors/getter_only/index.html | 6 +-- .../errors/identifier_after_number/index.html | 4 +- .../errors/in_operator_no_object/index.html | 4 +- .../ru/web/javascript/reference/errors/index.html | 4 +- .../errors/invalid_const_assignment/index.html | 4 +- .../errors/invalid_for-in_initializer/index.html | 4 +- .../reference/errors/is_not_iterable/index.html | 6 +-- .../errors/malformed_formal_parameter/index.html | 2 +- .../errors/missing_bracket_after_list/index.html | 2 +- .../missing_colon_after_property_id/index.html | 2 +- .../missing_curly_after_function_body/index.html | 4 +- .../index.html | 2 +- .../reference/errors/no_variable_name/index.html | 2 +- .../non_configurable_array_element/index.html | 10 ++-- .../reference/errors/not_a_codepoint/index.html | 2 +- .../reference/errors/not_a_constructor/index.html | 2 +- .../reference/errors/not_defined/index.html | 4 +- .../reference/errors/read-only/index.html | 4 +- .../errors/redeclared_parameter/index.html | 4 +- .../errors/reserved_identifier/index.html | 2 +- .../errors/strict_non_simple_params/index.html | 4 +- .../reference/errors/unexpected_token/index.html | 4 +- .../reference/errors/unexpected_type/index.html | 4 +- .../errors/unnamed_function_statement/index.html | 4 +- .../errors/unterminated_string_literal/index.html | 6 +-- .../reference/errors/var_hides_argument/index.html | 2 +- .../functions/arguments/callee/index.html | 2 +- .../reference/functions/arguments/index.html | 8 +-- .../reference/functions/arrow_functions/index.html | 4 +- .../functions/default_parameters/index.html | 10 ++-- .../javascript/reference/functions/get/index.html | 8 +-- .../functions/method_definitions/index.html | 2 +- .../javascript/reference/functions/set/index.html | 6 +-- .../global_objects/array/concat/index.html | 2 +- .../global_objects/array/every/index.html | 2 +- .../reference/global_objects/array/fill/index.html | 2 +- .../global_objects/array/filter/index.html | 2 +- .../reference/global_objects/array/find/index.html | 2 +- .../reference/global_objects/array/flat/index.html | 4 +- .../global_objects/array/foreach/index.html | 6 +-- .../reference/global_objects/array/keys/index.html | 2 +- .../global_objects/array/lastindexof/index.html | 2 +- .../reference/global_objects/array/map/index.html | 2 +- .../global_objects/array/reduce/index.html | 2 +- .../global_objects/array/reverse/index.html | 4 +- .../global_objects/array/slice/index.html | 8 +-- .../reference/global_objects/array/some/index.html | 2 +- .../reference/global_objects/array/sort/index.html | 2 +- .../global_objects/arraybuffer/index.html | 14 ++--- .../global_objects/arraybuffer/slice/index.html | 2 +- .../global_objects/asyncfunction/index.html | 6 +-- .../global_objects/atomics/add/index.html | 4 +- .../reference/global_objects/atomics/index.html | 8 +-- .../global_objects/atomics/sub/index.html | 4 +- .../reference/global_objects/bigint/index.html | 14 ++--- .../reference/global_objects/date/index.html | 2 +- .../global_objects/date/setminutes/index.html | 2 +- .../global_objects/date/toutcstring/index.html | 2 +- .../global_objects/decodeuricomponent/index.html | 2 +- .../reference/global_objects/encodeuri/index.html | 2 +- .../global_objects/encodeuricomponent/index.html | 2 +- .../reference/global_objects/error/index.html | 2 +- .../reference/global_objects/escape/index.html | 2 +- .../reference/global_objects/eval/index.html | 14 ++--- .../global_objects/float32array/index.html | 2 +- .../global_objects/function/bind/index.html | 8 +-- .../reference/global_objects/function/index.html | 2 +- .../global_objects/function/name/index.html | 8 +-- .../reference/global_objects/generator/index.html | 2 +- .../global_objects/generator/throw/index.html | 4 +- .../global_objects/generatorfunction/index.html | 4 +- .../reference/global_objects/globalthis/index.html | 2 +- .../reference/global_objects/intl/index.html | 2 +- .../reference/global_objects/isfinite/index.html | 4 +- .../reference/global_objects/map/delete/index.html | 2 +- .../global_objects/map/entries/index.html | 2 +- .../global_objects/map/foreach/index.html | 2 +- .../reference/global_objects/map/get/index.html | 4 +- .../reference/global_objects/map/index.html | 4 +- .../reference/global_objects/math/sqrt/index.html | 2 +- .../reference/global_objects/nan/index.html | 2 +- .../reference/global_objects/null/index.html | 6 +-- .../global_objects/object/create/index.html | 6 +-- .../global_objects/object/entries/index.html | 2 +- .../global_objects/object/fromentries/index.html | 2 +- .../object/getownpropertydescriptors/index.html | 2 +- .../global_objects/object/values/index.html | 2 +- .../reference/global_objects/parsefloat/index.html | 8 +-- .../reference/global_objects/parseint/index.html | 4 +- .../global_objects/promise/all/index.html | 10 ++-- .../global_objects/promise/any/index.html | 12 ++--- .../global_objects/promise/catch/index.html | 6 +-- .../global_objects/promise/finally/index.html | 8 +-- .../reference/global_objects/promise/index.html | 16 +++--- .../global_objects/promise/race/index.html | 6 +-- .../global_objects/promise/reject/index.html | 6 +-- .../global_objects/promise/resolve/index.html | 2 +- .../global_objects/promise/then/index.html | 8 +-- .../global_objects/reflect/construct/index.html | 2 +- .../reference/global_objects/reflect/index.html | 2 +- .../global_objects/reflect/ownkeys/index.html | 2 +- .../global_objects/regexp/@@split/index.html | 2 +- .../reference/global_objects/regexp/index.html | 4 +- .../global_objects/regexp/lastmatch/index.html | 2 +- .../reference/global_objects/regexp/n/index.html | 4 +- .../global_objects/regexp/unicode/index.html | 2 +- .../reference/global_objects/set/delete/index.html | 10 ++-- .../global_objects/set/foreach/index.html | 2 +- .../reference/global_objects/set/set/index.html | 2 +- .../global_objects/sharedarraybuffer/index.html | 10 ++-- .../global_objects/string/match/index.html | 2 +- .../global_objects/string/matchall/index.html | 2 +- .../global_objects/string/padend/index.html | 6 +-- .../global_objects/string/replaceall/index.html | 10 ++-- .../global_objects/string/slice/index.html | 8 +-- .../reference/global_objects/symbol/for/index.html | 2 +- .../reference/global_objects/symbol/index.html | 14 ++--- .../global_objects/symbol/toprimitive/index.html | 2 +- .../reference/global_objects/typedarray/index.html | 4 +- .../reference/global_objects/unescape/index.html | 2 +- .../reference/global_objects/uneval/index.html | 2 +- .../global_objects/weakmap/clear/index.html | 2 +- .../global_objects/weakmap/delete/index.html | 2 +- .../reference/global_objects/weakmap/index.html | 2 +- .../global_objects/webassembly/compile/index.html | 2 +- .../webassembly/compilestreaming/index.html | 6 +-- .../global_objects/webassembly/index.html | 22 ++++---- .../global_objects/webassembly/table/index.html | 14 ++--- .../reference/iteration_protocols/index.html | 6 +-- .../reference/lexical_grammar/index.html | 10 ++-- .../reference/operators/addition/index.html | 2 +- .../reference/operators/await/index.html | 4 +- .../reference/operators/bitwise_and/index.html | 2 +- .../reference/operators/comma_operator/index.html | 4 +- .../operators/conditional_operator/index.html | 12 ++--- .../reference/operators/delete/index.html | 20 +++---- .../javascript/reference/operators/in/index.html | 4 +- .../reference/operators/instanceof/index.html | 2 +- .../reference/operators/new.target/index.html | 4 +- .../javascript/reference/operators/new/index.html | 12 ++--- .../nullish_coalescing_operator/index.html | 2 +- .../operators/object_initializer/index.html | 22 ++++---- .../operators/optional_chaining/index.html | 4 +- .../operators/pipeline_operator/index.html | 2 +- .../reference/operators/spread_syntax/index.html | 12 ++--- .../javascript/reference/operators/this/index.html | 26 ++++----- .../javascript/reference/operators/void/index.html | 2 +- .../reference/statements/async_function/index.html | 6 +-- .../reference/statements/block/index.html | 4 +- .../reference/statements/class/index.html | 4 +- .../reference/statements/do...while/index.html | 4 +- .../reference/statements/empty/index.html | 2 +- .../reference/statements/for-await...of/index.html | 2 +- .../reference/statements/for...in/index.html | 2 +- .../reference/statements/for...of/index.html | 6 +-- .../javascript/reference/statements/for/index.html | 2 +- .../reference/statements/import/index.html | 14 ++--- .../javascript/reference/statements/let/index.html | 16 +++--- .../reference/statements/return/index.html | 2 +- .../reference/statements/throw/index.html | 24 ++++----- .../reference/statements/try...catch/index.html | 2 +- .../javascript/reference/statements/var/index.html | 10 ++-- .../reference/statements/while/index.html | 2 +- .../reference/statements/with/index.html | 2 +- .../javascript/reference/strict_mode/index.html | 24 ++++----- .../transitioning_to_strict_mode/index.html | 8 +-- files/ru/web/javascript/typed_arrays/index.html | 18 +++---- 218 files changed, 772 insertions(+), 772 deletions(-) (limited to 'files/ru/web/javascript') diff --git a/files/ru/web/javascript/a_re-introduction_to_javascript/index.html b/files/ru/web/javascript/a_re-introduction_to_javascript/index.html index 268fc9985d..01888a792b 100644 --- a/files/ru/web/javascript/a_re-introduction_to_javascript/index.html +++ b/files/ru/web/javascript/a_re-introduction_to_javascript/index.html @@ -9,7 +9,7 @@ translation_of: Web/JavaScript/A_re-introduction_to_JavaScript

Было бы полезно начать с истории языка. JavaScript был создан в 1995 Бренданом Айком, инженером в компании Netscape. Первый релиз состоялся вместе с выходом браузера Netscape 2 в начале 1996 года. Сначала язык назывался LiveScript, но затем был переименован в связи с маркетинговыми целями, чтобы сыграть на популярности языка Java компании Sun Microsystem — несмотря на это языки практически не имеют ничего общего друг с другом. Так было положено начало путаницы между этими языками.

-

Чуть позже Microsoft выпустила очень похожий и практически совместимый язык JScript, который шёл вместе с IE3. Через пару месяцев Netscape отправил язык в Ecma International, Европейскую организацию занимающуюся стандартами, которая выпустила первую версию стандарта ECMAScript в 1997. Стандарт получил значимое обновление в ECMAScript edition 3 в 1999, и остается самым стабильным до сегодняшнего дня. Четвертая версия была отклонена, из-за проблем с усложнениями в языке. Многие вещи из четвертого издания послужили основой для стандарта ECMAScript 5 (декабрь 2009) и ECMAScript 6 (июнь 2015).

+

Чуть позже Microsoft выпустила очень похожий и практически совместимый язык JScript, который шёл вместе с IE3. Через пару месяцев Netscape отправил язык в Ecma International, Европейскую организацию занимающуюся стандартами, которая выпустила первую версию стандарта ECMAScript в 1997. Стандарт получил значимое обновление в ECMAScript edition 3 в 1999, и остаётся самым стабильным до сегодняшнего дня. Четвёртая версия была отклонена, из-за проблем с усложнениями в языке. Многие вещи из четвёртого издания послужили основой для стандарта ECMAScript 5 (декабрь 2009) и ECMAScript 6 (июнь 2015).

На заметку: Далее по тексту мы будем называть язык ECMAScript как "JavaScript".

@@ -21,7 +21,7 @@ translation_of: Web/JavaScript/A_re-introduction_to_JavaScript

JavaScript является объектно-ориентированным языком, имеющий типы и операторы, встроенные объекты и методы. Его синтаксис происходит от языков Java и C, поэтому много конструкций из этих языков применимы и к JavaScript. Одним из ключевых отличий JavaScript является отсутствие классов, вместо этого функциональность классов осуществляется прототипами объектов (смотрите ES6 {{jsxref("Classes")}}) . Другое главное отличие в том, что функции это объекты, в которых содержится исполняемый код и которые могут быть переданы куда-либо, как и любой другой объект.

-

Начнём с основы любого языка: с типов данных. Программы на JavaScript оперируют значениями, и все эти значения принадлежат к определенному типу. Типы данных в JavaScript:

+

Начнём с основы любого языка: с типов данных. Программы на JavaScript оперируют значениями, и все эти значения принадлежат к определённому типу. Типы данных в JavaScript:

-

Да, еще Undefined и Null, которые немного обособлены. И Массивы, которые являются особым видом объектов. А также Даты и Регулярные выражения, тоже являющиеся объектами. И, если быть технически точным, функции это тоже особый вид объекта. Поэтому схема типов выглядит скорее так:

+

Да, ещё Undefined и Null, которые немного обособлены. И Массивы, которые являются особым видом объектов. А также Даты и Регулярные выражения, тоже являющиеся объектами. И, если быть технически точным, функции это тоже особый вид объекта. Поэтому схема типов выглядит скорее так:

-

В общих чертах, двойное равно перед сравнением величин производит приведение типов; тройное равно сравнивает величины без приведения (если величины разных типов, вернет false, даже не сравнивая); ну и Object.is ведет себя так же, как и тройное равно, но со специальной обработкой для NaN, -0 и +0, возвращая false при сравнении  -0 и +0, и true для операции Object.is(NaN, NaN). (В то время как двойное или тройное равенство вернут false согласно стандарту IEEE 754.) Следует отметить, что все эти различия в сравнениях применимы лишь для примитивов. Для любых не примитивных объектов x и y, которые имеют одинаковые структуры, но представляют собой два отдельных объекта (переменные x и y не ссылаются на один и тот же объект), все операторы сравнения вернут false.

+

В общих чертах, двойное равно перед сравнением величин производит приведение типов; тройное равно сравнивает величины без приведения (если величины разных типов, вернёт false, даже не сравнивая); ну и Object.is ведёт себя так же, как и тройное равно, но со специальной обработкой для NaN, -0 и +0, возвращая false при сравнении  -0 и +0, и true для операции Object.is(NaN, NaN). (В то время как двойное или тройное равенство вернут false согласно стандарту IEEE 754.) Следует отметить, что все эти различия в сравнениях применимы лишь для примитивов. Для любых не примитивных объектов x и y, которые имеют одинаковые структуры, но представляют собой два отдельных объекта (переменные x и y не ссылаются на один и тот же объект), все операторы сравнения вернут false.

Сравнение с использованием ==

@@ -109,7 +109,7 @@ translation_of: Web/JavaScript/Equality_comparisons_and_sameness

В таблице выше, ToNumber(A) пытается перед сравнением привести свой аргумент к числу. Такое поведение эквивалентно +A (унарный оператор +).  Если ToPrimitive(A) получает объект в качестве аргумента, то производятся попытки привести его к примитиву, вызывая на нем методы A.toString и A.valueOf.

-

Традиционно (и в соответствии с ECMAScript), ни один из объектов не равен undefined или null.  Но большинство браузеров позволяет определенному классу объектов (в частности, объектам document.all для любой страницы) эмулировать значение undefined.  Оператор равенства вернёт значение true для null == A и undefined == A, тогда, и только тогда, когда объект эмулирует значение undefined. Во всех остальных случаях объект не может быть равен undefined или null.

+

Традиционно (и в соответствии с ECMAScript), ни один из объектов не равен undefined или null.  Но большинство браузеров позволяет определённому классу объектов (в частности, объектам document.all для любой страницы) эмулировать значение undefined.  Оператор равенства вернёт значение true для null == A и undefined == A, тогда, и только тогда, когда объект эмулирует значение undefined. Во всех остальных случаях объект не может быть равен undefined или null.

var num = 0;
 var obj = new String("0");
@@ -134,7 +134,7 @@ console.log(obj == undefined);
 
 

Строгое равенство с использованием ===

-

Строгое равно проверяет на равенство две величины, при этом тип каждой из величин перед сравнением не изменяется (не приводится). Если значения имеют различающиеся типы, то они не могут быть равными. С другой стороны все не числовые переменные, принадлежащие одному типу, считаются равными между собой, если содержат одинаковые величины. Ну и, наконец, числовые переменные считаются равными, если они имеют одинаковые значения, либо одна из них +0, а вторая -0. В то же время, если хотя бы одна из числовых переменных содержит значение NaN, выражение вернет false.

+

Строгое равно проверяет на равенство две величины, при этом тип каждой из величин перед сравнением не изменяется (не приводится). Если значения имеют различающиеся типы, то они не могут быть равными. С другой стороны все не числовые переменные, принадлежащие одному типу, считаются равными между собой, если содержат одинаковые величины. Ну и, наконец, числовые переменные считаются равными, если они имеют одинаковые значения, либо одна из них +0, а вторая -0. В то же время, если хотя бы одна из числовых переменных содержит значение NaN, выражение вернёт false.

var num = 0;
 var obj = new String("0");
@@ -153,7 +153,7 @@ console.log(obj === null); // false
 console.log(obj === undefined); // false
 
-

Практически всегда для сравнения следует использовать оператор строгого равенства. Для всех значений, за исключением числовых используется очевидная семантика: величина равна только сама себе. Как было сказано выше для числовых типов можно выделить два особых случая. Во-первых, сравнение +0 и -0. Знак для нуля введен для упрощения некоторых вычислений с плавающей запятой, однако, с точки зрения математики, разницы между +0 и -0 не существует, поэтому оператор строгого равенства считает их равными. Во-вторых, сравнение величин NaN. NaN (Not a number) представляет из себя значение не определенной величины, которое применяется для не четко определенных математических задач (например +∞ + -∞). Для оператора строго равенства NaN не равен ни одной из величин, в том числе и самому себе (единственный случай, когда (x!==x) вернет true).

+

Практически всегда для сравнения следует использовать оператор строгого равенства. Для всех значений, за исключением числовых используется очевидная семантика: величина равна только сама себе. Как было сказано выше для числовых типов можно выделить два особых случая. Во-первых, сравнение +0 и -0. Знак для нуля введён для упрощения некоторых вычислений с плавающей запятой, однако, с точки зрения математики, разницы между +0 и -0 не существует, поэтому оператор строгого равенства считает их равными. Во-вторых, сравнение величин NaN. NaN (Not a number) представляет из себя значение не определённой величины, которое применяется для не чётко определённых математических задач (например +∞ + -∞). Для оператора строго равенства NaN не равен ни одной из величин, в том числе и самому себе (единственный случай, когда (x!==x) вернёт true).

Равенство одинаковых величин

@@ -169,7 +169,7 @@ function attemptMutation(v) }
-

При попытке изменения неизменяемого свойства, вызов Object.defineProperty выбросит исключение, однако, если новое свойство равняется старому, изменений не произойдет и исключение не будет выброшено. Если v содержит -0, изменений не произойдет, а значит, код отработает без выброса исключений. Однако, если же v содержит +0, Number.NEGATIVE_ZERO утратит свою неизменяемую величину. Именно для сравнения нового и текущего неизменяемых свойств используется сравнение одинаковых величин, представленное методом Object.is.

+

При попытке изменения неизменяемого свойства, вызов Object.defineProperty выбросит исключение, однако, если новое свойство равняется старому, изменений не произойдёт и исключение не будет выброшено. Если v содержит -0, изменений не произойдёт, а значит, код отработает без выброса исключений. Однако, если же v содержит +0, Number.NEGATIVE_ZERO утратит свою неизменяемую величину. Именно для сравнения нового и текущего неизменяемых свойств используется сравнение одинаковых величин, представленное методом Object.is.

Спецификации для равенства, строгого равенства и равенства одинаковых величин

diff --git a/files/ru/web/javascript/eventloop/index.html b/files/ru/web/javascript/eventloop/index.html index d659ecc73c..1d4023e2c5 100644 --- a/files/ru/web/javascript/eventloop/index.html +++ b/files/ru/web/javascript/eventloop/index.html @@ -21,7 +21,7 @@ translation_of: Web/JavaScript/EventLoop

Стек

-

Вызов любой функции создает контекст выполнения (Execution Context). При вызове вложенной функции создается новый контекст, а старый сохраняется в специальной структуре данных - стеке вызовов (Call Stack).

+

Вызов любой функции создаёт контекст выполнения (Execution Context). При вызове вложенной функции создаётся новый контекст, а старый сохраняется в специальной структуре данных - стеке вызовов (Call Stack).

function f(b) {
   var a = 12;
@@ -36,7 +36,7 @@ function g(x) {
 g(21);
 
-

Когда вызывается функция g,  создаётся первый контекст выполнения, содержащий аргументы функции g и локальные переменные. Когда g вызывает f, создаётся второй контекст с аргументами f и её локальными переменными.  И этот контекст выполнения f помещается в стек вызовов выше первого. Когда f возвращает результат, верхний элемент из стека удаляется. Когда g возвращает результат, ее контекст также удалится, и стек становится пустым.

+

Когда вызывается функция g,  создаётся первый контекст выполнения, содержащий аргументы функции g и локальные переменные. Когда g вызывает f, создаётся второй контекст с аргументами f и её локальными переменными.  И этот контекст выполнения f помещается в стек вызовов выше первого. Когда f возвращает результат, верхний элемент из стека удаляется. Когда g возвращает результат, её контекст также удалится, и стек становится пустым.

Куча

@@ -62,7 +62,7 @@ g(21);

Запуск до завершения

-

Каждая задача выполняется полностью, прежде чем начнет обрабатываться следующая. Благодаря этому мы точно знаем: когда выполняется текущая функция – она не может быть приостановлена и будет целиком завершена до начала выполнения другого кода (который может изменить данные, с которыми работает текущая функция). Это отличает JavaScript от такого языка программирования как C. Поскольку в С функция, запущенная в отдельном потоке, в любой момент может быть остановлена, чтобы выполнить какой-то другой код в другом потоке.

+

Каждая задача выполняется полностью, прежде чем начнёт обрабатываться следующая. Благодаря этому мы точно знаем: когда выполняется текущая функция – она не может быть приостановлена и будет целиком завершена до начала выполнения другого кода (который может изменить данные, с которыми работает текущая функция). Это отличает JavaScript от такого языка программирования как C. Поскольку в С функция, запущенная в отдельном потоке, в любой момент может быть остановлена, чтобы выполнить какой-то другой код в другом потоке.

У данного подхода есть и минусы. Если задача занимает слишком много времени, то веб-приложение не может обрабатывать действия пользователя в это время (например, скролл или клик). Браузер старается смягчить проблему и выводит сообщение "скрипт выполняется слишком долго" ("a script is taking too long to run") и предлагает остановить его. Хорошей практикой является создание задач, которые исполняются быстро, и если возможно, разбиение одной задачи на несколько мелких.

@@ -70,11 +70,11 @@ g(21);

В браузерах события добавляются в очередь в любое время, если событие произошло, а так же если у него есть обработчик. В случае, если обработчика нет – событие потеряно. Так, клик по элементу, имеющему обработчик события по событию click , добавит событие в очередь, а если обработчика нет – то и событие в очередь не попадет.

-

Вызов setTimeout добавит событие в очередь по прошествии времени, указанного во втором аргументе вызова. Если очередь событий на тот момент будет пуста, то событие обработается сразу же, в противном случае событию функции setTimeout придется ожидать завершения обработки остальных событий в очереди. Именно поэтому второй аргумент setTimeout корректно считать не временем, через которое выполнится функция из первого аргумента, а минимальное время, через которое она сможет выполниться.

+

Вызов setTimeout добавит событие в очередь по прошествии времени, указанного во втором аргументе вызова. Если очередь событий на тот момент будет пуста, то событие обработается сразу же, в противном случае событию функции setTimeout придётся ожидать завершения обработки остальных событий в очереди. Именно поэтому второй аргумент setTimeout корректно считать не временем, через которое выполнится функция из первого аргумента, а минимальное время, через которое она сможет выполниться.

Нулевые задержки

-

Нулевая задержка не дает гарантии, что обработчик выполнится через ноль миллисекунд. Вызов {{domxref("WindowTimers.setTimeout", "setTimeout")}} с аргументом  0 (ноль) не завершится за указанное время. Выполнение зависит от количества ожидающих задач в очереди. Например, сообщение ''this is just a message'' из примера ниже будет выведено на консоль раньше, чем произойдет выполнение обработчика cb1. Это произойдет, потому что задержка – это минимальное время, которое требуется среде выполнения на обработку запроса.

+

Нулевая задержка не даёт гарантии, что обработчик выполнится через ноль миллисекунд. Вызов {{domxref("WindowTimers.setTimeout", "setTimeout")}} с аргументом  0 (ноль) не завершится за указанное время. Выполнение зависит от количества ожидающих задач в очереди. Например, сообщение ''this is just a message'' из примера ниже будет выведено на консоль раньше, чем произойдёт выполнение обработчика cb1. Это произойдёт, потому что задержка – это минимальное время, которое требуется среде выполнения на обработку запроса.

(function () {
 
diff --git a/files/ru/web/javascript/guide/control_flow_and_error_handling/index.html b/files/ru/web/javascript/guide/control_flow_and_error_handling/index.html
index a7b952b323..dd86463b4a 100644
--- a/files/ru/web/javascript/guide/control_flow_and_error_handling/index.html
+++ b/files/ru/web/javascript/guide/control_flow_and_error_handling/index.html
@@ -9,7 +9,7 @@ translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling
 

{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}

-

JavaScript поддерживает компактный набор инструкций, особенно управляющих инструкций, которые вы можете использовать, чтобы реализовать интерактивность в вашем приложении. В данной главе дается обзор этих инструкций.

+

JavaScript поддерживает компактный набор инструкций, особенно управляющих инструкций, которые вы можете использовать, чтобы реализовать интерактивность в вашем приложении. В данной главе даётся обзор этих инструкций.

Более подробная информация об инструкциях, рассмотренных в данной главе, содержится в справочнике по JavaScript. Точка с запятой ( ; ) используется для разделения инструкций в коде.

@@ -26,9 +26,9 @@ translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling
while (x < 10) { x++; }
-

В вышеприведенном примере { x++; } является блоком.

+

В вышеприведённом примере { x++; } является блоком.

-

Обратите внимание: в JavaScript отсутствует область видимости блока до ECMAScript2015. Переменные, объявленные внутри блока, имеют область видимости функции (или скрипта), в которой находится данный блок, вследствие чего они сохранят свои значения при выходе за пределы блока. Другими словами, блок не создает новую область видимости. "Автономные" (standalone) блоки в JavaScript могут продуцировать полностью отличающийся результат, от результата в языках C или Java. Например:

+

Обратите внимание: в JavaScript отсутствует область видимости блока до ECMAScript2015. Переменные, объявленные внутри блока, имеют область видимости функции (или скрипта), в которой находится данный блок, вследствие чего они сохранят свои значения при выходе за пределы блока. Другими словами, блок не создаёт новую область видимости. "Автономные" (standalone) блоки в JavaScript могут продуцировать полностью отличающийся результат, от результата в языках C или Java. Например:

var x = 1;
 {
@@ -36,7 +36,7 @@ translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling
 }
 console.log(x); // выведет 2
-

В вышеприведенном примере инструкция var x внутри блока находится в той же области видимости, что и инструкция var x перед блоком. В C или Java эквивалентный код выведет значение 1.

+

В вышеприведённом примере инструкция var x внутри блока находится в той же области видимости, что и инструкция var x перед блоком. В C или Java эквивалентный код выведет значение 1.

Начиная с ECMAScript 6, оператор let позволяет объявить переменную в области видимости блока. Чтобы получить более подробную информацию, прочитайте {{jsxref("Statements/let", "let")}}.

@@ -75,7 +75,7 @@ console.if (x = y) { /* ... */ }
-

Если вам нужно использовать присваивание в условном выражении, то распространенной практикой является заключение операции присваивания в дополнительные скобки. Например:

+

Если вам нужно использовать присваивание в условном выражении, то распространённой практикой является заключение операции присваивания в дополнительные скобки. Например:

if ( (x = y) ) { /* ... */ }
@@ -101,7 +101,7 @@ if (b) // это условие true if (b == true) // это условие false -

В следующем примере функция checkData возвращает true, если число символов в объекте Text равно трем; в противном случае функция отображает окно alert и возвращает false.

+

В следующем примере функция checkData возвращает true, если число символов в объекте Text равно трём; в противном случае функция отображает окно alert и возвращает false.

function checkData() {
   if (document.form1.threeChar.value.length == 3) {
@@ -131,9 +131,9 @@ if (b == true) // это условие false
 }
 
-

Сначала производится поиск ветви case с меткой label, совпадающей со значением выражения expression. Если совпадение найдено, то соответствующий данной ветви код выполняется до оператора break, который прекращает выполнение switch и передает управление дальше. В противном случае управление передается необязательной ветви default и выполняется соответствующий ей код. Если ветвь default не найдена, то программа продолжит выполняться со строчки, следующей за инструкцией switch. По соглашению ветвь default является последней ветвью, но следовать этому соглашению необязательно.

+

Сначала производится поиск ветви case с меткой label, совпадающей со значением выражения expression. Если совпадение найдено, то соответствующий данной ветви код выполняется до оператора break, который прекращает выполнение switch и передаёт управление дальше. В противном случае управление передаётся необязательной ветви default и выполняется соответствующий ей код. Если ветвь default не найдена, то программа продолжит выполняться со строчки, следующей за инструкцией switch. По соглашению ветвь default является последней ветвью, но следовать этому соглашению необязательно.

-

Если оператор break отсутствует, то после выполнения кода, который соответствует выбранной ветви, начнется выполнение кода, который следует за ней.

+

Если оператор break отсутствует, то после выполнения кода, который соответствует выбранной ветви, начнётся выполнение кода, который следует за ней.

В следующем примере если fruittype имеет значение "Bananas", то будет выведено сообщение "Bananas are $0.48 a pound." и оператор break прекратит выполнение switch. Если бы оператор break отсутствовал, то был бы также выполнен код, соответствующий ветви "Cherries", т.е. выведено сообщение "Cherries are $3.00 a pound.".

@@ -180,7 +180,7 @@ console.throw expression; -

Вы можете выбросить любое выражение, а не только выражения определенного типа. В следующем примере выбрасываются исключения различных типов:

+

Вы можете выбросить любое выражение, а не только выражения определённого типа. В следующем примере выбрасываются исключения различных типов:

throw "Error2";                                              // string
 throw 42;                                                    // number
@@ -235,7 +235,7 @@ catch (e) {
 
 
catch (catchID) { statements }
-

JavaScript создает идентификатор catchID, которому присваивается перехваченное исключение, при входе в блок catch; данный идентификатор доступен только в пределах блока catch и уничтожается при выходе из него.

+

JavaScript создаёт идентификатор catchID, которому присваивается перехваченное исключение, при входе в блок catch; данный идентификатор доступен только в пределах блока catch и уничтожается при выходе из него.

В следующем примере выбрасывается исключение, которое перехватывается в блоке catch:

diff --git a/files/ru/web/javascript/guide/details_of_the_object_model/index.html b/files/ru/web/javascript/guide/details_of_the_object_model/index.html index 5a78bd6a74..a93d7aa85e 100644 --- a/files/ru/web/javascript/guide/details_of_the_object_model/index.html +++ b/files/ru/web/javascript/guide/details_of_the_object_model/index.html @@ -28,17 +28,17 @@ translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model

Подклассы и наследование

-

В языках, основанных на классах, вы создаете иерархию классов через объявление классов. В объявлении класса вы можете указать, что новый класс является подклассом уже существующего класса. При этом, подкласс унаследует все свойства суперкласса и в дополнение сможет добавить свои свойства или переопределить унаследованные. Например, предположим, что класс Employee включает два свойства: name и dept, а класс Manager является подклассом Employee и добавляет свойство reports. В этом случае, экземпляр класса Manager будет иметь три свойства: name, dept, и reports.

+

В языках, основанных на классах, вы создаёте иерархию классов через объявление классов. В объявлении класса вы можете указать, что новый класс является подклассом уже существующего класса. При этом, подкласс унаследует все свойства суперкласса и в дополнение сможет добавить свои свойства или переопределить унаследованные. Например, предположим, что класс Employee включает два свойства: name и dept, а класс Manager является подклассом Employee и добавляет свойство reports. В этом случае, экземпляр класса Manager будет иметь три свойства: name, dept, и reports.

JavaScript реализует наследование, позволяя связать прототипный ообъект с любой функцией-конструктором. Итак, вы можете создать ообъект точь-в-точь, как в примере Employee — Manager, но используя несколько иную технику. Для начала нужно определить функцию-конструктор Employee, которая определяет свойства name и dept. Затем, определяем функцию-конструктор Manager, в которой в свою очередь, будет явно вызываться конструктор Employee и определяться новое свойство reports. Наконец, присваиваем новый экземпляр Employee, в качестве prototype для функции-конструктора Manager. Теперь, когда вы создадите нового Manager, он унаследует свойства name и dept из объекта Employee.

Добавление и удаление свойств

-

В языках, основанных на классах, вы, как правило, создаете класс во время компиляции, а затем вы создаёте экземпляры класса либо во время компиляции, либо во время выполнения. Вы не можете изменить количество или тип свойств класса после определения класса. В JavaScript, однако, вы можете добавлять или удалять свойства любого объекта. Если вы добавляете свойство к объекту, который используется в качестве прототипа для множества объектов, то все эти объекты, для которых он является прототипом, также получат это свойство.

+

В языках, основанных на классах, вы, как правило, создаёте класс во время компиляции, а затем вы создаёте экземпляры класса либо во время компиляции, либо во время выполнения. Вы не можете изменить количество или тип свойств класса после определения класса. В JavaScript, однако, вы можете добавлять или удалять свойства любого объекта. Если вы добавляете свойство к объекту, который используется в качестве прототипа для множества объектов, то все эти объекты, для которых он является прототипом, также получат это свойство.

Подытожим различия

-

Следующая таблица дает краткий обзор некоторых из этих различий. А оставшаяся часть этой главы описывает детали использования конструкторов и прототипов JavaScript для создания иерархии объектов и сравнивает это с тем, как вы могли бы сделать это в Java.

+

Следующая таблица даёт краткий обзор некоторых из этих различий. А оставшаяся часть этой главы описывает детали использования конструкторов и прототипов JavaScript для создания иерархии объектов и сравнивает это с тем, как вы могли бы сделать это в Java.

@@ -54,7 +54,7 @@ translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model - + @@ -64,7 +64,7 @@ translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model @@ -73,7 +73,7 @@ translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model - +
Сравнение языков на основе классов (Java) и на базе прототипов (JavaScript)
Все объекты могут наследовать свойства другого объекта.
Определяем класс с помощью определения класса; создаем экземпляр класса с помощью метода-конструктора.Определяем класс с помощью определения класса; создаём экземпляр класса с помощью метода-конструктора. Определение и создание объекта происходит с помощью функций-конструкторов.
Иерархия объектов строится с помощью определения классов и их подклассов. -

Построение иерархии объектов происходит путем присвоения объекта в качестве прототипа функции-конструктора.

+

Построение иерархии объектов происходит путём присвоения объекта в качестве прототипа функции-конструктора.

Определение класса определяет все свойства всех экземпляров класса. Нельзя динамически добавлять свойства во время выполнения.Функция-конструктор или прототип задает начальный набор свойств. Можно добавить или удалить свойства динамически к отдельным объектам или всей совокупности объектов.Функция-конструктор или прототип задаёт начальный набор свойств. Можно добавить или удалить свойства динамически к отдельным объектам или всей совокупности объектов.
@@ -152,7 +152,7 @@ function Manager() { Employee.call(this); this.reports = []; } -//создаем пустой объект с прототипом от конструктора Employee +//создаём пустой объект с прототипом от конструктора Employee //и используем этот ообъект как прототип для Manager Manager.prototype = Object.create(Employee.prototype); @@ -236,7 +236,7 @@ public class Engineer extends WorkerBee {

Используя эти определения, вы можете создавать экземпляры объектов, которые получат значения по умолчанию для своих свойств. Рисунок 8.3 иллюстрирует использование этих определений и показывает значения свойств у полученных объектов.

-

{{ note('Термин экземпляр имеет специфическое значение в языках, основанных на классах. В этих языках экземпляр — это индивидуальная сущность определенного класса и принципиально отличается от класса. В JavaScript «экземпляр» не имеет такого технического значения, потому что JavaScript не делает таких отличий между классами и экземплярами. Однако, в разговоре о JavaScript, термин «экземпляр» может неформально использоваться для обозначения объекта, созданного с использованием конкретной функции конструктора. Так, в этом примере, вы можете неформально сказать, что jane является экземпляром Engineer. Аналогично, хотя термины parent, child, ancestor и descendant (родитель, ребенок, предок и потомок) не имеют формальных значений в JavaScript, вы можете использовать их неформально для ссылки на объекты выше или ниже в цепочке прототипов.') }}

+

{{ note('Термин экземпляр имеет специфическое значение в языках, основанных на классах. В этих языках экземпляр — это индивидуальная сущность определённого класса и принципиально отличается от класса. В JavaScript «экземпляр» не имеет такого технического значения, потому что JavaScript не делает таких отличий между классами и экземплярами. Однако, в разговоре о JavaScript, термин «экземпляр» может неформально использоваться для обозначения объекта, созданного с использованием конкретной функции конструктора. Так, в этом примере, вы можете неформально сказать, что jane является экземпляром Engineer. Аналогично, хотя термины parent, child, ancestor и descendant (родитель, ребёнок, предок и потомок) не имеют формальных значений в JavaScript, вы можете использовать их неформально для ссылки на объекты выше или ниже в цепочке прототипов.') }}

figure8.3.png
Рисунок 8.3: Создание объектов с простыми определениями

@@ -247,21 +247,21 @@ public class Engineer extends WorkerBee {

Наследование свойств

-

Предположим, вы создаете ообъект mark в качестве WorkerBee (как показано на Рисунок 8.3) с помощью следующего выражения:

+

Предположим, вы создаёте ообъект mark в качестве WorkerBee (как показано на Рисунок 8.3) с помощью следующего выражения:

var mark = new WorkerBee;
 
-

Когда JavaScript видит оператор new, он создает новый обобщенный ообъект и неявно устанавливает значение внутреннего свойства [[Prototype]] в WorkerkBee.prototype, затем передает этот новый ообъект в качестве значения this в функцию-конструктор WorkerBee. Внутреннее свойство [[Prototype]] определяет цепочку прототипов, используемых для получения значений свойств. После того, как эти свойства установлены, JavaScript возвращает новый ообъект, а оператор присваивания устанавливает переменную mark для этого объекта.

+

Когда JavaScript видит оператор new, он создаёт новый обобщённый ообъект и неявно устанавливает значение внутреннего свойства [[Prototype]] в WorkerkBee.prototype, затем передаёт этот новый ообъект в качестве значения this в функцию-конструктор WorkerBee. Внутреннее свойство [[Prototype]] определяет цепочку прототипов, используемых для получения значений свойств. После того, как эти свойства установлены, JavaScript возвращает новый ообъект, а оператор присваивания устанавливает переменную mark для этого объекта.

-

Этот процесс не задает значения свойств (локальных значений), которые унаследованы по цепочке прототипов, объекта mark напрямую. Когда вы запрашиваете значение свойства, JavaScript сначала проверяет, существует ли это значение в данном объекте. Если так и есть, тогда возвращается это значение. Если значение не найдено в самом объекте, JavaScript проверяет цепочку прототипов (используя внутреннее свойство [[Prorotype]]). Если ообъект в цепочке прототипов имеет значение для искомого свойства, это значение возвращается. Если такое свойство не найдено, JavaScript сообщает, что ообъект не обладает свойством. Таким образом, ообъект mark содержит следующие свойства и значения:

+

Этот процесс не задаёт значения свойств (локальных значений), которые унаследованы по цепочке прототипов, объекта mark напрямую. Когда вы запрашиваете значение свойства, JavaScript сначала проверяет, существует ли это значение в данном объекте. Если так и есть, тогда возвращается это значение. Если значение не найдено в самом объекте, JavaScript проверяет цепочку прототипов (используя внутреннее свойство [[Prorotype]]). Если ообъект в цепочке прототипов имеет значение для искомого свойства, это значение возвращается. Если такое свойство не найдено, JavaScript сообщает, что ообъект не обладает свойством. Таким образом, ообъект mark содержит следующие свойства и значения:

mark.name = '';
 mark.dept = 'general';
 mark.projects = [];
 
-

Значения для свойств name и dept объекту mark присваиваются из конструктора Employee. Также из конструктора WorkerBee присваивается локальное значение для свойства projects. Это дает вам наследование свойств и их значений в JavaScript. Некоторые детали этого процесса обсуждаются в Тонкости наследования свойств.

+

Значения для свойств name и dept объекту mark присваиваются из конструктора Employee. Также из конструктора WorkerBee присваивается локальное значение для свойства projects. Это даёт вам наследование свойств и их значений в JavaScript. Некоторые детали этого процесса обсуждаются в Тонкости наследования свойств.

Поскольку эти конструкторы не позволяют вводить значения, специфичные для экземпляра, добавленная информация является общей. Значения свойств устанавливаются по умолчанию одинаковыми для всех объектов, созданных функцией WorkerBee. Конечно, вы можете изменить значения любого из этих свойств. Так, вы можете добавить специфичную информацию для mark следующим образом:

@@ -397,7 +397,7 @@ public class Engineer extends WorkerBee {

{{ note('Это может работать не так, как ожидается, если функция-конструктор вызывается с аргументами, которые преобразуются в false, вроде нуля (0) или пустой строки (""). В этом случае будет выбрано значение по умолчанию.') }}

-

С помощью таких определений, создавая экземпляр объекта, вы можете указать значения для локально определенных свойств. Как показано на Рисунок 8.5, можно использовать следующее выражение для создания нового Engineer:

+

С помощью таких определений, создавая экземпляр объекта, вы можете указать значения для локально определённых свойств. Как показано на Рисунок 8.5, можно использовать следующее выражение для создания нового Engineer:

var jane = new Engineer('belau');
 
@@ -412,7 +412,7 @@ jane.machine == 'belau'

Обратите внимание, что с таким способом вы не можете указать начальное значение наследуемого свойства, такого как name. Если вы хотите задать начальное значение для наследуемых свойств в JavaScript, вам нужно добавить больше кода в функцию-конструктор.

-

До сих пор функция-конструктор создавала обобщенный ообъект, а затем определяла локальные свойства и значения для нового объекта. Вы можете использовать конструктор, который добавляет дополнительные свойства путем непосредственного вызова функции-конструктора для объекта, расположенного выше в цепочке прототипов. На следующем рисунке показаны эти новые определения.

+

До сих пор функция-конструктор создавала обобщённый ообъект, а затем определяла локальные свойства и значения для нового объекта. Вы можете использовать конструктор, который добавляет дополнительные свойства путём непосредственного вызова функции-конструктора для объекта, расположенного выше в цепочке прототипов. На следующем рисунке показаны эти новые определения.


Рисунок 8.6: Определение свойств в конструкторе, вариант 2

@@ -426,7 +426,7 @@ jane.machine == 'belau' }
-

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

+

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

var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
 
@@ -434,16 +434,16 @@ jane.machine == 'belau'

JavaScript выполняет следующие действия:

    -
  1. Оператор new создает обобщенный ообъект и устанавливает его свойству __proto__ значение Engineer.prototype.
  2. -
  3. Оператор new передает этот новый ообъект в конструктор Engineer в качестве значения ключевого слова this.
  4. -
  5. Конструктор создает новое свойство с именем base для этого объекта и присваивает значение свойства base из конструктора WorkerBee. Это делает конструктор WorkerBee методом объекта, созданного Engineer. Имя свойства base не является специальным словом. Вы можете использовать любое допустимое для свойства имя; base всего-лишь напоминает о предназначении свойства.
  6. +
  7. Оператор new создаёт обобщённый ообъект и устанавливает его свойству __proto__ значение Engineer.prototype.
  8. +
  9. Оператор new передаёт этот новый ообъект в конструктор Engineer в качестве значения ключевого слова this.
  10. +
  11. Конструктор создаёт новое свойство с именем base для этого объекта и присваивает значение свойства base из конструктора WorkerBee. Это делает конструктор WorkerBee методом объекта, созданного Engineer. Имя свойства base не является специальным словом. Вы можете использовать любое допустимое для свойства имя; base всего-лишь напоминает о предназначении свойства.
  12. Конструктор вызывает метод base, передавая в качестве аргументов два аргумента, переданных конструктору ("Doe, Jane" и ["navigator", "javascript"]), а также строку "engineering". Явное использование "engineering" в конструкторе указывает на то, что все объекты, созданные Engineer, имеют одинаковое значение для наследуемого свойства dept, это значение переопределяет значение, унаследованное из Employee.
  13. -
  14. Поскольку base является методом Engineer, внутри вызова base JavaScript привязывает ключевое свойство this к объекту, созданному в шаге 1. Таким образом, функция WorkerBee передает поочередно аргументы "Doe, Jane" и "engineering" в функцию-конструктор Employee. Получив результат из Employee, функция WorkerBee использует оставшийся аргумент для установки значения свойства projects.
  15. +
  16. Поскольку base является методом Engineer, внутри вызова base JavaScript привязывает ключевое свойство this к объекту, созданному в шаге 1. Таким образом, функция WorkerBee передаёт поочерёдно аргументы "Doe, Jane" и "engineering" в функцию-конструктор Employee. Получив результат из Employee, функция WorkerBee использует оставшийся аргумент для установки значения свойства projects.
  17. После возвращения из метода base, конструктор Engineer инициализирует свойство объекта machine со значением "belau".
  18. После возвращения из конструктора, JavaScript присваивает новый ообъект переменной jane.
-

Можно подумать, что вызвав WorkerBee из конструктора Engineer, вы настроили соответствующим образом наследование для объектов, создаваемых Engineer. Это не так. Вызов конструктора WorkerBee обеспечивает только то, что ообъект Engineer запускается со  свойствами, определенными во всех функциях-конструкторах, которые были вызваны. Так, если позже добавить свойства в прототипы Employee или WorkerBee, эти свойства не наследуются объектами из Engineer. Например, предположим, вы использовали следующие определения:

+

Можно подумать, что вызвав WorkerBee из конструктора Engineer, вы настроили соответствующим образом наследование для объектов, создаваемых Engineer. Это не так. Вызов конструктора WorkerBee обеспечивает только то, что ообъект Engineer запускается со  свойствами, определёнными во всех функциях-конструкторах, которые были вызваны. Так, если позже добавить свойства в прототипы Employee или WorkerBee, эти свойства не наследуются объектами из Engineer. Например, предположим, вы использовали следующие определения:

function Engineer (name, projs, mach) {
   this.base = WorkerBee;
@@ -511,7 +511,7 @@ function Engineer (name, projs, mach) {
  
  • Если искомое свойство не обнаружено, считается, что ообъект его не имеет.
  • -

    Результат выполнения этих шагов будет зависеть от того, в каком порядке вы создаете объекты, прототипы и их свойства. Рассмотрим пример:

    +

    Результат выполнения этих шагов будет зависеть от того, в каком порядке вы создаёте объекты, прототипы и их свойства. Рассмотрим пример:

    function Employee () {
       this.name = "";
    @@ -524,7 +524,7 @@ function WorkerBee () {
     WorkerBee.prototype = new Employee;
     
    -

    Предположим, на основе конструкции выше, вы создаете ообъект amy как экземпляр класса WorkerBee следующим выражением:

    +

    Предположим, на основе конструкции выше, вы создаёте ообъект amy как экземпляр класса WorkerBee следующим выражением:

    var amy = new WorkerBee;
     
    @@ -543,7 +543,7 @@ amy.projects == [];

    На первый взгляд вы можете ожидать, что это изменение распространится на все экземпляры Employee. Однако этого не случится.

    -

    Когда вы устанавливаете прототип для WorkerBee вы создаете новый ообъект Employee, таким образом WorkerBee.prototype получает свое собственное локальное свойство name (в данном примере пустую строку). Следовательно, когда JavaScript ищет свойство name у объекта amy (экземпляра WorkerBee), он первым делом натыкается на него в прототипе WorkerBee.prototype, и до проверки Employee.prototype дело не доходит.

    +

    Когда вы устанавливаете прототип для WorkerBee вы создаёте новый ообъект Employee, таким образом WorkerBee.prototype получает своё собственное локальное свойство name (в данном примере пустую строку). Следовательно, когда JavaScript ищет свойство name у объекта amy (экземпляра WorkerBee), он первым делом натыкается на него в прототипе WorkerBee.prototype, и до проверки Employee.prototype дело не доходит.

    Если у вас есть необходимость изменять некоторое свойство объекта во время работы приложения, и применять это изменение на все существующие экземпляры, не нужно создавать это свойство внутри конструктора. Вместо этого добавьте свойство в прототип, принадлежащий конструктору. Для примера, предположим, вы изменили код, который был показан выше, следующим образом:

    @@ -617,7 +617,7 @@ instanceOf (chris, Employee) instanceOf (chris, Object)
    -

    Но следующее выражение вернет false:

    +

    Но следующее выражение вернёт false:

    instanceOf (chris, SalesPerson)
     
    @@ -635,13 +635,13 @@ function Employee (name, dept) { } -

    Здесь, когда вы создаете новый экземпляр Employee, конструктор присваивает ему все новый и новый ID увеличивая значение глобальной переменной idCounter. Следовательно, при выполнении кода ниже, victoria.id станет равным 1 а harry.id — 2:

    +

    Здесь, когда вы создаёте новый экземпляр Employee, конструктор присваивает ему все новый и новый ID увеличивая значение глобальной переменной idCounter. Следовательно, при выполнении кода ниже, victoria.id станет равным 1 а harry.id — 2:

    var victoria = new Employee("Pigbert, Victoria", "pubs")
     var harry = new Employee("Tschopik, Harry", "sales")
     
    -

    Навскидку, все выглядит предсказуемо. Однако, idCounter увеличивается при создании каждого объекта Employee вне зависимости от цели его создания. Если вы создаете полную иерархию класса Employee, показанную выше в этой главе, конструктор Employee будет так же вызван каждый раз, когда вы устанавливаете прототип для подклассов. Следующий код раскрывает суть возможной проблемы:

    +

    Навскидку, все выглядит предсказуемо. Однако, idCounter увеличивается при создании каждого объекта Employee вне зависимости от цели его создания. Если вы создаёте полную иерархию класса Employee, показанную выше в этой главе, конструктор Employee будет так же вызван каждый раз, когда вы устанавливаете прототип для подклассов. Следующий код раскрывает суть возможной проблемы:

    var idCounter = 1;
     
    @@ -666,9 +666,9 @@ SalesPerson.prototype = new WorkerBee;
     var mac = new Engineer("Wood, Mac");
     
    -

    Предположим, каждый из конструкторов, тело которого опущено для краткости, содержит вызов конструктора прародителя. Это приведет к тому, что id у объекта mac примет значение 5 вместо ожидаемой единицы.

    +

    Предположим, каждый из конструкторов, тело которого опущено для краткости, содержит вызов конструктора прародителя. Это приведёт к тому, что id у объекта mac примет значение 5 вместо ожидаемой единицы.

    -

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

    +

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

    function Employee (name, dept) {
        this.name = name || "";
    @@ -678,15 +678,15 @@ var mac = new Engineer("Wood, Mac");
     }
     
    -

    Когда вы создаете экземпляр Employee в качестве прототипа, вы не предоставляете аргументы в конструктор за ненадобностью. Конструктор выше проверяет наличие аргумента name, и в случае, если значение не указано, идентификатор id объекту не присваивается, а значение глобального счетчика idCounter не увеличивается. Таким образом, для получения уникального id становится обязательным указание параметра name при вызове конструктора Employee. С внесенными в пример выше изменениями, mac.id станет равным долгожданной, заветной единице.

    +

    Когда вы создаёте экземпляр Employee в качестве прототипа, вы не предоставляете аргументы в конструктор за ненадобностью. Конструктор выше проверяет наличие аргумента name, и в случае, если значение не указано, идентификатор id объекту не присваивается, а значение глобального счётчика idCounter не увеличивается. Таким образом, для получения уникального id становится обязательным указание параметра name при вызове конструктора Employee. С внесёнными в пример выше изменениями, mac.id станет равным долгожданной, заветной единице.

    Никакого множественного наследования

    Некоторые из объектно-ориентированных языков предоставляют возможность множественного наследования. Когда один ообъект может унаследовать свойства и методы множества других, не связанных друг с другом объектов. В JavaScript такого не предусмотрено.

    -

    В JavaScript наследование свойств осуществляется путем поиска в цепочке прототипов. Так как ообъект может иметь лишь единственный присвоенный ему прототип, JavaScript не может осуществить наследование более чем от одной цепочки прототипов.

    +

    В JavaScript наследование свойств осуществляется путём поиска в цепочке прототипов. Так как ообъект может иметь лишь единственный присвоенный ему прототип, JavaScript не может осуществить наследование более чем от одной цепочки прототипов.

    -

    Однако конструктор в JavaScript может вызывать любое количество вложенных конструкторов. Это дает некоторую, хоть и ограниченную (отсутствием прототипной связанности) видимость множественного наследования. Рассмотрим следующий фрагмент:

    +

    Однако конструктор в JavaScript может вызывать любое количество вложенных конструкторов. Это даёт некоторую, хоть и ограниченную (отсутствием прототипной связанности) видимость множественного наследования. Рассмотрим следующий фрагмент:

    function Hobbyist (hobby) {
        this.hobby = hobby || "scuba";
    diff --git a/files/ru/web/javascript/guide/expressions_and_operators/index.html b/files/ru/web/javascript/guide/expressions_and_operators/index.html
    index dea3cef0d6..046e83e9fb 100644
    --- a/files/ru/web/javascript/guide/expressions_and_operators/index.html
    +++ b/files/ru/web/javascript/guide/expressions_and_operators/index.html
    @@ -59,14 +59,14 @@ translation_of: Web/JavaScript/Guide/Expressions_and_Operators
     
     

    В результате операции присваивания операнду слева от оператора присваивания (знак "=") устанавливается значение , которое берётся из правого операнда. Основным оператором присваивания является  =, он присваивает значение правого операнда операнду, находящемуся слева. Таким образом, выражение x = y означает, что x присваивается значение y.

    -

    Существуют также составные операторы присваивания, которые используются для сокращенного представления операций, описанных в следующей таблице:

    +

    Существуют также составные операторы присваивания, которые используются для сокращённого представления операций, описанных в следующей таблице:

    - + @@ -491,7 +491,7 @@ var n3 = !"Cat"; // !t возвращает false
  • true || anything - сокращение с результатом true.
  • -

    Правила логики гарантируют, что данные вычисления всегда корректны. Обратите внимание, что часть "anything" представленных выше выражений не вычисляется, таким образом удается избежать любых побочных эффектов вычисления данной части.

    +

    Правила логики гарантируют, что данные вычисления всегда корректны. Обратите внимание, что часть "anything" представленных выше выражений не вычисляется, таким образом удаётся избежать любых побочных эффектов вычисления данной части.

    Строковые операторы

    @@ -499,7 +499,7 @@ var n3 = !"Cat"; // !t возвращает false
    console.log("my " + "string");  // в консоли выведется строка  "my string".
    -

    Сокращенный оператор присваивания += также может быть использован для объединения (конкатенации) строк:

    +

    Сокращённый оператор присваивания += также может быть использован для объединения (конкатенации) строк:

    var  mystring = "alpha";  mystring += "bet"; // получается значение "alphabet" и присваивается mystring.
     
    @@ -548,7 +548,7 @@ delete property; // допустимо только внутри with

    где objectName представляет собой имя объекта, property - свойство объекта, а index - целое число, указывающее на положение (номер позиции)  элемента в массиве.

    -

    Четвертый вариант использования позволяет удалить свойство объекта, но допускается только внутри with.

    +

    Четвёртый вариант использования позволяет удалить свойство объекта, но допускается только внутри with.

    Вы можете использовать оператор delete для удаления переменных, объявленных неявно, но вы не можете с его помощью удалять переменные, объявленные с помощью var.

    @@ -569,7 +569,7 @@ delete myobj; // возвращает true (можно удалить объе

    Удаление элемента массива не влияет на длину массива. Например, если вы удалите a[3], элемент a[4] останется a[4], a[3] станет undefined.

    -

    Когда элемент массива удаляется с помощью оператора delete, то из массива удаляется значение данного элемента. В следующем примере элемент trees[3] удален с помощью оператора delete. Однако, элемент trees[3] остается адресуемым и возвращает значение undefined.

    +

    Когда элемент массива удаляется с помощью оператора delete, то из массива удаляется значение данного элемента. В следующем примере элемент trees[3] удалён с помощью оператора delete. Однако, элемент trees[3] остаётся адресуемым и возвращает значение undefined.

    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
     delete trees[3];
    @@ -578,7 +578,7 @@ if (3 in trees) {
     }
     
    -

    Если вы хотите, чтобы элемент оставался в массиве, но имел значение undefined, то используйте ключевое слово undefined вместо оператора delete. В следующем примере элементу trees[3] присвоено значение undefined, но элемент при этом остается в массиве:

    +

    Если вы хотите, чтобы элемент оставался в массиве, но имел значение undefined, то используйте ключевое слово undefined вместо оператора delete. В следующем примере элементу trees[3] присвоено значение undefined, но элемент при этом остаётся в массиве:

    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
     trees[3] = undefined;
    @@ -665,7 +665,7 @@ void expression
     
    <A HREF="javascript:void(0)">Нажмите здесь, чтобы ничего не произошло</A>
     
    -

    Приведенный ниже код создает гипертекстовую ссылку, которая подтверждает отправку формы при клике на ней пользователем:

    +

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

    <A HREF="javascript:void(document.form.submit())">
     Нажмите здесь, чтобы подтвердить отправку формы</A>
    @@ -728,7 +728,7 @@ if (theDay instanceof Date) {

    Приоритет операторов определяет порядок их выполнения при вычислении выражения. Вы можете влиять на приоритет операторов с помощью скобок.

    -

    Приведенная ниже таблица описывает приоритет операторов от наивысшего до низшего.

    +

    Приведённая ниже таблица описывает приоритет операторов от наивысшего до низшего.

    Список операторов присваивания
    ИмяСокращенный операторСокращённый оператор Смысл
    @@ -875,18 +875,18 @@ a + (b * c) // 7 // что эквивалентно следующему a * c + b * c // 9 -

    Упрощенный синтаксис создания массивов и генераторов

    +

    Упрощённый синтаксис создания массивов и генераторов

    -

    Упрощенный синтаксис - экспериментальная возможность JavaScript, которая возможно будет добавлена в будущие версии ECMAScript. Есть 2 версии синтаксиса:

    +

    Упрощённый синтаксис - экспериментальная возможность JavaScript, которая возможно будет добавлена в будущие версии ECMAScript. Есть 2 версии синтаксиса:

    {{experimental_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}
    -
    Упрощенный синтаксис для массивов.
    +
    Упрощённый синтаксис для массивов.
    {{experimental_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}
    -
    Упрощенный синтаксис для генераторов.
    +
    Упрощённый синтаксис для генераторов.
    -

    Упрощенные синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например:

    +

    Упрощённые синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например:

    [for (i of [ 1, 2, 3 ]) i*i ];
     // [ 1, 4, 9 ]
    diff --git a/files/ru/web/javascript/guide/functions/index.html b/files/ru/web/javascript/guide/functions/index.html
    index 2e62690a66..ef48cf9b64 100644
    --- a/files/ru/web/javascript/guide/functions/index.html
    +++ b/files/ru/web/javascript/guide/functions/index.html
    @@ -43,7 +43,7 @@ translation_of: Web/JavaScript/Guide/Functions
     
     
    • Имя функции.
    • -
    • Список параметров (принимаемых функцией) заключенных в круглые скобки () и разделенных запятыми.
    • +
    • Список параметров (принимаемых функцией) заключённых в круглые скобки () и разделённых запятыми.
    • Инструкции, которые будут выполнены после вызова функции, заключают в фигурные скобки { }.
    @@ -92,7 +92,7 @@ var x = square(4); // x получает значение 16 console.log(factorial(3));
    -

    Функции вида "function definition expression" удобны, когда функция передается аргументом другой функции. Следующий пример показывает функцию map, которая должна получить функцию первым аргументом и массив вторым.

    +

    Функции вида "function definition expression" удобны, когда функция передаётся аргументом другой функции. Следующий пример показывает функцию map, которая должна получить функцию первым аргументом и массив вторым.

    function map(f, a) {
       var result = [], // Create a new Array
    @@ -184,7 +184,7 @@ d = factorial(4); // d gets the value 24
     e = factorial(5); // e gets the value 120
     
    -

    Есть другие способы вызвать функцию. Существуют частые случаи, когда функции необходимо вызывать динамически, или поменять номера аргументов функции, или необходимо вызвать функцию с привязкой к определенному контексту. Оказывается, что функции сами по себе являются объектами, и эти объекты в свою очередь имеют методы (посмотрите объект Function). Один из них это метод apply(), использование которого может достигнуть этой цели.

    +

    Есть другие способы вызвать функцию. Существуют частые случаи, когда функции необходимо вызывать динамически, или поменять номера аргументов функции, или необходимо вызвать функцию с привязкой к определённому контексту. Оказывается, что функции сами по себе являются объектами, и эти объекты в свою очередь имеют методы (посмотрите объект Function). Один из них это метод apply(), использование которого может достигнуть этой цели.

    Область видимости функций

    @@ -202,7 +202,7 @@ function multiply() { return num1 * num2; } -multiply(); // вернет 60 +multiply(); // вернёт 60 // Пример вложенной функции function getScore() { @@ -216,7 +216,7 @@ function getScore() { return add(); } -getScore(); // вернет "Chamahk scored 5" +getScore(); // вернёт "Chamahk scored 5"

    Scope и стек функции

    @@ -309,7 +309,7 @@ foo(3);

    Поскольку вложенная функция это closure, это означает, что вложенная функция может "унаследовать" (inherit) аргументы и переменные функции, в которую та вложена. Другими словами, вложенная функция содержит scope внешней ("outer") функции.

    -

    Подведем итог:

    +

    Подведём итог:

    • Вложенная функция имеет доступ ко всем инструкциям внешней функции.
    • @@ -350,7 +350,7 @@ result1 = outside(3)(5); // возвращает 8

      Сохранение переменных

      -

      Обратите внимание, значение x сохранилось, когда возвращалось inside. Closure должно сохранять аргументы и переменные во всем scope. Поскольку каждый вызов предоставляет потенциально разные аргументы, создается новый closure для каждого вызова во вне. Память может быть очищена только тогда, когда inside уже возвратился и больше не доступен.

      +

      Обратите внимание, значение x сохранилось, когда возвращалось inside. Closure должно сохранять аргументы и переменные во всем scope. Поскольку каждый вызов предоставляет потенциально разные аргументы, создаётся новый closure для каждого вызова во вне. Память может быть очищена только тогда, когда inside уже возвратился и больше не доступен.

      Это не отличается от хранения ссылок в других объектах, но часто менее очевидно, потому что не устанавливаются ссылки напрямую и нельзя посмотреть там.

      @@ -379,9 +379,9 @@ A(1); // в консоле выведится 6 (1 + 2 + 3)
    • Раз closure функции B включает A, то closure С тоже включает A, C имеет доступ к аргументам и переменным обоих функций B и A. Другими словами, С связывает цепью (chain) scopes функций B и A в таком порядке.
    • -

      В обратном порядке, однако, это не верно. A не имеет доступ к переменным и аргументам C, потому что A не имеет такой доступ к B. Таким образом, C остается приватным только для B.

      +

      В обратном порядке, однако, это не верно. A не имеет доступ к переменным и аргументам C, потому что A не имеет такой доступ к B. Таким образом, C остаётся приватным только для B.

      -

      Конфликты имен (Name conflicts)

      +

      Конфликты имён (Name conflicts)

      Когда два аргумента или переменных в scope у closure имеют одинаковые имена, происходит конфликт имени (name conflict). Более вложенный (more inner) scope имеет приоритет, так самый вложенный scope имеет наивысший приоритет, и наоборот. Это цепочка областей видимости (scope chain). Самым первым звеном является самый глубокий scope, и наоборот. Рассмотрим следующие:

      @@ -395,7 +395,7 @@ A(1); // в консоле выведится 6 (1 + 2 + 3) outside()(10); // возвращает 20 вместо 10 -

      Конфликт имени произошел в инструкции return x * 2 между параметром x функции inside и переменной x функции outside. Scope chain здесь будет таким: {inside ==> outside ==> глобальный объект (global object)}. Следовательно x функции inside имеет больший приоритет по сравнению с outside, и нам вернулось 20 (= 10 * 2), а не 10 (= 5 * 2).

      +

      Конфликт имени произошёл в инструкции return x * 2 между параметром x функции inside и переменной x функции outside. Scope chain здесь будет таким: {inside ==> outside ==> глобальный объект (global object)}. Следовательно x функции inside имеет больший приоритет по сравнению с outside, и нам вернулось 20 (= 10 * 2), а не 10 (= 5 * 2).

      Замыкания

      @@ -407,7 +407,7 @@ outside()(10); // возвращает 20 вместо 10

      Также, поскольку вложенная функция имеет доступ к scope внешней функции, переменные и функции, объявленные во внешней функции, будет продолжать существовать и после её выполнения для вложенной функции, если на них и на неё сохранился доступ (имеется ввиду, что переменные, объявленные во внешней функции, сохраняются, только если внутренняя функция обращается к ним).

      -

      Closure создается, когда вложенная функция как-то стала доступной в неком scope вне внешней функции.

      +

      Closure создаётся, когда вложенная функция как-то стала доступной в неком scope вне внешней функции.

      var pet = function(name) {   // Внешняя функция объявила переменную "name"
         var getName = function() {
      @@ -568,7 +568,7 @@ multiply(5); // 5

      Оставшиеся параметры (Rest parameters)

      -

      Оставшиеся параметры предоставляют нам массив неопределенных аргументов. В примере мы используем оставшиеся параметры, чтобы собрать аргументы с индексами со 2-го до последнего. Затем мы умножим каждый из них на значение первого аргумента. В этом примере используется стрелочная функция (Arrow functions), о которой будет рассказано в следующей секции.

      +

      Оставшиеся параметры предоставляют нам массив неопределённых аргументов. В примере мы используем оставшиеся параметры, чтобы собрать аргументы с индексами со 2-го до последнего. Затем мы умножим каждый из них на значение первого аргумента. В этом примере используется стрелочная функция (Arrow functions), о которой будет рассказано в следующей секции.

      function multiply(multiplier, ...theArgs) {
         return theArgs.map(x => multiplier * x);
      @@ -607,7 +607,7 @@ console.log(a3); // logs [8, 6, 7, 9]

      Лексика this

      -

      До стрелочных функций каждая новая функция определяла свое значение this (новый объект в случае конструктора, undefined в strict mode,  контекстный объект, если функция вызвана как метод объекта, и т.д.).  Это оказалось раздражающим с точки зрения объектно-ориентированного стиля программирования.

      +

      До стрелочных функций каждая новая функция определяла своё значение this (новый объект в случае конструктора, undefined в strict mode,  контекстный объект, если функция вызвана как метод объекта, и т.д.).  Это оказалось раздражающим с точки зрения объектно-ориентированного стиля программирования.

      function Person() {
         // Конструктор Person() определяет `this` как самого себя.
      @@ -616,14 +616,14 @@ console.log(a3); // logs [8, 6, 7, 9]
      setInterval(function growUp() { // Без strict mode функция growUp() определяет `this` // как global object, который отличается от `this` - // определенного конструктором Person(). + // определённого конструктором Person(). this.age++; }, 1000); } var p = new Person(); -

      В ECMAScript 3/5 эта проблема была исправлена путем присвоения значения this переменной, которую можно было бы замкнуть.

      +

      В ECMAScript 3/5 эта проблема была исправлена путём присвоения значения this переменной, которую можно было бы замкнуть.

      function Person() {
         var self = this; // Некоторые выбирают `that` вместо `self`.
      diff --git a/files/ru/web/javascript/guide/grammar_and_types/index.html b/files/ru/web/javascript/guide/grammar_and_types/index.html
      index 6618946fbb..3807d40ef0 100644
      --- a/files/ru/web/javascript/guide/grammar_and_types/index.html
      +++ b/files/ru/web/javascript/guide/grammar_and_types/index.html
      @@ -51,13 +51,13 @@ translation_of: Web/JavaScript/Guide/Grammar_and_types
       
       

      Переменные

      -

      Вы можете использовать переменные как символические имена для значений в вашем приложении. Имена переменных называются {{Glossary("Identifier", "identifiers")}} и должны соответствовать определенным правилам.

      +

      Вы можете использовать переменные как символические имена для значений в вашем приложении. Имена переменных называются {{Glossary("Identifier", "identifiers")}} и должны соответствовать определённым правилам.

      -

      Идентификатор в JavaScript должен начинаться с буквы, нижнего подчеркивания (_) или знака доллара ($); последующие символы могут также быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру, буквы включают символы от "A" до "Z" (верхний регистр) и символы от "a" до "z" (нижний регистр).

      +

      Идентификатор в JavaScript должен начинаться с буквы, нижнего подчёркивания (_) или знака доллара ($); последующие символы могут также быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру, буквы включают символы от "A" до "Z" (верхний регистр) и символы от "a" до "z" (нижний регистр).

      Вы можете использовать в идентификаторах буквы ISO 8859-1 или Unicode, например, å или ü. Вы также можете использовать управляющие последовательности Unicode как символы в идентификаторах.

      -

      Некоторые примеры корректных имен: Number_hitstemp99,  _name.

      +

      Некоторые примеры корректных имён: Number_hitstemp99,  _name.

      Объявление переменных

      @@ -95,7 +95,7 @@ let x;
      doThat(); } -

      Значение undefined ведет себя как false, когда используется в логическом контексте. Например, следующий код выполняет функцию myFunction, т.к. элемент myArray не определен:

      +

      Значение undefined ведёт себя как false, когда используется в логическом контексте. Например, следующий код выполняет функцию myFunction, т.к. элемент myArray не определён:

      var myArray = [];
       if (!myArray[0]) {
      @@ -108,7 +108,7 @@ let x; 
      var a;
       a + 2; // NaN
      -

      Значение {{jsxref("null")}} ведет себя как 0 в числовом контексте и как false в логическом контексте:

      +

      Значение {{jsxref("null")}} ведёт себя как 0 в числовом контексте и как false в логическом контексте:

      var n = null;
       console.log(n * 32); // В консоль выведется 0
      @@ -124,7 +124,7 @@ console.} console.log(x); // 5
      -

      Такое поведение меняется, если используется оператор let, введенный в ECMAScript 6:

      +

      Такое поведение меняется, если используется оператор let, введённый в ECMAScript 6:

      if (true) {
         let y = 5;
      @@ -133,7 +133,7 @@ console.Поднятие переменных
       
      -

      Другим необычным свойством переменных в JavaScript является то, что можно сослаться на переменную, которая объявляется позже, и не получить при этом исключения. Эта концепция известна как поднятие (hoisting) переменных; переменные в JavaScript поднимаются в самое начало функции или выражения. Однако, переменные, которые еще не были инициализированы, возвратят значение undefined:

      +

      Другим необычным свойством переменных в JavaScript является то, что можно сослаться на переменную, которая объявляется позже, и не получить при этом исключения. Эта концепция известна как поднятие (hoisting) переменных; переменные в JavaScript поднимаются в самое начало функции или выражения. Однако, переменные, которые ещё не были инициализированы, возвратят значение undefined:

      /*
        * Example 1
      @@ -151,7 +151,7 @@ console.  var myvar = "local value";
       })();
      -

      Приведенные выше примеры будут интерпретироваться так же, как:

      +

      Приведённые выше примеры будут интерпретироваться так же, как:

      /*
        * Example 1
      @@ -209,7 +209,7 @@ var baz = function() {
       
       

      Константы

      -

      Вы можете создать именованную константу, доступную только для чтения, используя ключевое слово {{jsxref("Statements/const", "const")}}. Синтаксис идентификатора константы является таким же, как и у идентификатора переменной: он должен начинаться с буквы, нижнего подчеркивания или знака $ и может содержать буквы, цифры или нижнее подчеркивание.

      +

      Вы можете создать именованную константу, доступную только для чтения, используя ключевое слово {{jsxref("Statements/const", "const")}}. Синтаксис идентификатора константы является таким же, как и у идентификатора переменной: он должен начинаться с буквы, нижнего подчёркивания или знака $ и может содержать буквы, цифры или нижнее подчеркивание.

      const PREFIX = '212';
      @@ -260,7 +260,7 @@ MY_OBJECT.key = "otherValue";

      Преобразование типов данных

      -

      JavaScript — это динамически типизированный язык. Это означает, что вам не нужно указывать тип данных переменной, когда вы ее объявляете, типы данных преобразуются автоматически по мере необходимости во время выполнения скрипта. Так, например, вы можете определить переменную следующим образом:

      +

      JavaScript — это динамически типизированный язык. Это означает, что вам не нужно указывать тип данных переменной, когда вы её объявляете, типы данных преобразуются автоматически по мере необходимости во время выполнения скрипта. Так, например, вы можете определить переменную следующим образом:

      var answer = 42;
      @@ -313,9 +313,9 @@ MY_OBJECT.key = "otherValue";

      Литерал массива

      -

      Литерал массива — это список из нуля или более выражений, каждое из которых представляет элемент массива, заключенный в квадратные скобки ( [] ). Когда вы создаете массив, используя литерал массива, он инициализируется с помощью переданных значений, которые будут являться его элементами, длина массива будет равна числу переданных аргументов.

      +

      Литерал массива — это список из нуля или более выражений, каждое из которых представляет элемент массива, заключённый в квадратные скобки ( [] ). Когда вы создаёте массив, используя литерал массива, он инициализируется с помощью переданных значений, которые будут являться его элементами, длина массива будет равна числу переданных аргументов.

      -

      В следующем примере создается массив coffees с тремя элементам и длиной, равной трем:

      +

      В следующем примере создаётся массив coffees с тремя элементам и длиной, равной трём:

      var coffees = ["French Roast", "Colombian", "Kona"];
       
      @@ -324,7 +324,7 @@ MY_OBJECT.key = "otherValue";

      Замечание : Обратите внимание на то, что литерал массива является инициализатором объекта. Чтобы получить более подробную информацию, прочитайте Использование инициализаторов объекта.

      -

      Если массив создается с помощью литерала в скрипте верхнего уровня, то JavaScript интерпретирует массив каждый раз, когда вычисляет выражение, содержащее литерал. Кроме того, литерал, используемый в функции, создается каждый раз, когда вызывается функция.

      +

      Если массив создаётся с помощью литерала в скрипте верхнего уровня, то JavaScript интерпретирует массив каждый раз, когда вычисляет выражение, содержащее литерал. Кроме того, литерал, используемый в функции, создаётся каждый раз, когда вызывается функция.

      Литералы массива также являются объектами Array. Чтобы получить более подробную информацию, прочитайте {{jsxref("Array")}} и упорядоченные наборы данных.

      @@ -345,11 +345,11 @@ MY_OBJECT.key = "otherValue";
      var myList = ['home', , 'school', ]; // ["home", undefined, "school"]
       
      -

      В следующем примере длина массива равна четырем, элементы myList[0] и myList[2] имеют значение undefined:

      +

      В следующем примере длина массива равна четырём, элементы myList[0] и myList[2] имеют значение undefined:

      var myList = [ , 'home', , 'school']; // [undefined, "home", undefined, "school"]
      -

      В следующем примере длина массива равна четырем, элементы myList[1] и myList[3] имеют значение undefined. Игнорируется только последняя запятая.

      +

      В следующем примере длина массива равна четырём, элементы myList[1] и myList[3] имеют значение undefined. Игнорируется только последняя запятая.

      var myList = ['home', , 'school', , ]; // ["home", undefined, "school", undefined]
      @@ -409,7 +409,7 @@ MY_OBJECT.key = "otherValue";

      Литерал объекта

      -

      Литерал объекта — это список из нуля или более пар, состоящих из имен свойств и связанных с ними значений, заключенный в фигурные скобки ( {} ). Вам не следует использовать литерал объекта в начале выражения, т.к. это приведет к ошибке или к поведению, которого вы не ожидаете, потому что символ "{" будет интерпретироваться как начало блока.

      +

      Литерал объекта — это список из нуля или более пар, состоящих из имён свойств и связанных с ними значений, заключённый в фигурные скобки ( {} ). Вам не следует использовать литерал объекта в начале выражения, т.к. это приведёт к ошибке или к поведению, которого вы не ожидаете, потому что символ "{" будет интерпретироваться как начало блока.

      В следующем примере свойству myCar объекта car присваивается строка "Saturn", свойству getCar — результат вызова функции CarTypes("Honda"), свойству special — значение переменной Sales:

      @@ -482,7 +482,7 @@ console.Строковый литерал -

      Строковый литерал — это ноль или более символов, заключенных в двойные ( " ) или одинарные ( ' ) кавычки. Строка должна быть ограничена кавычками одного типа, т.е. либо обе одинарные, либо обе двойные. Например:

      +

      Строковый литерал — это ноль или более символов, заключённых в двойные ( " ) или одинарные ( ' ) кавычки. Строка должна быть ограничена кавычками одного типа, т.е. либо обе одинарные, либо обе двойные. Например:

      "foo"
       'bar'
      @@ -599,14 +599,14 @@ POST`http://foo.org/bar?a=${a}&b=${b}
       
       

      Экранирующие символы

      -

      Для символов, не перечисленных в вышеприведенной таблице, предваряющая обратная косая черта игнорируется. Такое использование не является рекомендованным (deprecated) и вам следует избегать его.

      +

      Для символов, не перечисленных в вышеприведённой таблице, предваряющая обратная косая черта игнорируется. Такое использование не является рекомендованным (deprecated) и вам следует избегать его.

      Вы можете вставить кавычку в строку, если поставите перед ней обратную косую черту. Это называется экранированием кавычек. Например:

      var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
       console.log(quote); // He read "The Cremation of Sam McGee" by R.W. Service.
      -

      Чтобы включить обратную косую черту в строку, перед ней нужно поставить еще одну обратную косую черту. Например:

      +

      Чтобы включить обратную косую черту в строку, перед ней нужно поставить ещё одну обратную косую черту. Например:

      var home = "c:\\temp"; // c:\temp
      diff --git a/files/ru/web/javascript/guide/index.html b/files/ru/web/javascript/guide/index.html index fcd22de953..52a44a45d9 100644 --- a/files/ru/web/javascript/guide/index.html +++ b/files/ru/web/javascript/guide/index.html @@ -110,7 +110,7 @@ translation_of: Web/JavaScript/Guide

      Гарантии
      Цепочка вызовов
      - Распространенные ошибки
      + Распространённые ошибки
      Композиция
      Порядок выполнения

      diff --git a/files/ru/web/javascript/guide/indexed_collections/index.html b/files/ru/web/javascript/guide/indexed_collections/index.html index ed49aa33bd..68a5001fdb 100644 --- a/files/ru/web/javascript/guide/indexed_collections/index.html +++ b/files/ru/web/javascript/guide/indexed_collections/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Guide/Indexed_collections

      Массив представляется собой упорядоченный набор значений, к которому вы ссылаетесь по имени и индексу. Допустим, у вас есть массив с именем emp, содержащий имена сотрудников и упорядоченный по номеру сотрудников. Следовательно, emp[1] будет представлять собой имя сотрудника номер один, emp[2] -- имя сотрудника номер два, и т.д.

      -

      Язык JavaScript не содержит явного типа данных "массив". Тем не менее, возможно использовать предопределенный объект Array и его методы для работы с массивами в создаваемых приложениях. Объект Array содержит методы для работы с массивами самыми различными способами, например, есть методы для объединения,  переворачивания и сортировки. Объект содержит свойство для определения длины массива, а также свойства для работы с регулярными выражениями.

      +

      Язык JavaScript не содержит явного типа данных "массив". Тем не менее, возможно использовать предопределённый объект Array и его методы для работы с массивами в создаваемых приложениях. Объект Array содержит методы для работы с массивами самыми различными способами, например, есть методы для объединения,  переворачивания и сортировки. Объект содержит свойство для определения длины массива, а также свойства для работы с регулярными выражениями.

      Создание массива

      @@ -37,7 +37,7 @@ arr.length = arrayLength;
      -

      Замечание: в примере выше arrayLength должно иметь числовой тип Number. В противном случае будет создан массив с единственным элементом (указанное значение). Вызванная функция arr.length вернет значение arrayLength, но на самом деле массив будет содержать пустые элементы (undefined). Использование цикла {{jsxref("Statements/for...in","for...in")}} для обработки значений массива не вернет ни одного элемента.

      +

      Замечание: в примере выше arrayLength должно иметь числовой тип Number. В противном случае будет создан массив с единственным элементом (указанное значение). Вызванная функция arr.length вернёт значение arrayLength, но на самом деле массив будет содержать пустые элементы (undefined). Использование цикла {{jsxref("Statements/for...in","for...in")}} для обработки значений массива не вернёт ни одного элемента.

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

      @@ -114,7 +114,7 @@ arr["length"]; // Вернёт число 3, так как это свойст

      Понимание length

      -

      На уровне реализации, массивы в JavaScript хранят свои элементы как стандартные свойства объекта, используя индекс в качестве имени свойства. Специальное свойство length всегда возвращает индекс последнего элемента плюс один (в примере ниже, элемент 'Dusty' размещается под индексом 30, по этому cats.length возвращает 30 + 1). Особо следует запомнить, что в JavaScript массивы индексируются с нуля: отсчет ведется с 0, а не с 1. Из этого и следует, что свойство length всегда на единицу больше, чем наибольший индекс хранящийся в массиве:

      +

      На уровне реализации, массивы в JavaScript хранят свои элементы как стандартные свойства объекта, используя индекс в качестве имени свойства. Специальное свойство length всегда возвращает индекс последнего элемента плюс один (в примере ниже, элемент 'Dusty' размещается под индексом 30, по этому cats.length возвращает 30 + 1). Особо следует запомнить, что в JavaScript массивы индексируются с нуля: отсчёт ведётся с 0, а не с 1. Из этого и следует, что свойство length всегда на единицу больше, чем наибольший индекс хранящийся в массиве:

      var cats = [];
       cats[30] = ['Dusty'];
      @@ -127,7 +127,7 @@ console.log(cats.length); // 31
       console.log(cats.length); // 3
       
       cats.length = 2;
      -console.log(cats); // выводит в консоль "Dusty,Misty" - элемент "Twiggy" был удален
      +console.log(cats); // выводит в консоль "Dusty,Misty" - элемент "Twiggy" был удалён
       
       cats.length = 0;
       console.log(cats); // выводит пустую строку; массив cats пуст
      @@ -138,7 +138,7 @@ console.log(cats); // выводит [undefined, undefined, undefined]
       
       

      Перебор содержимого массивов

      -

      Очень распространенная задача - это перебор всех элементов массива и обработка каждого элемента некоторой операцией. Вот наипростейший способ сделать это:

      +

      Очень распространённая задача - это перебор всех элементов массива и обработка каждого элемента некоторой операцией. Вот наипростейший способ сделать это:

      var colors = ['red', 'green', 'blue'];
       for (var i = 0; i < colors.length; i++) {
      @@ -146,7 +146,7 @@ for (var i = 0; i < colors.length; i++) {
       }
       
      -

      Если вам заранее известно, что ни один элемент массива не будет расценен как false при приведении к boolean — например, каждый элемент массива является DOM узлом, тогда вы можете блеснуть чуть более эффективным оборотом:

      +

      Если вам заранее известно, что ни один элемент массива не будет расценён как false при приведении к boolean — например, каждый элемент массива является DOM узлом, тогда вы можете блеснуть чуть более эффективным оборотом:

      var divs = document.getElementsByTagName('div');
       for (var i = 0, div; div = divs[i]; i++) {
      @@ -275,7 +275,7 @@ myArray.sort();
       // массив отсортирован myArray = [ "Fire", "Rain", "Wind" ]
       
      -

      Метод sort() может принимать в качестве аргумента callback-функцию, которая определяет каким образом сравнивать элементы массива при сортировке. Функция сравнивает два значения, и возвращает одно из трех значений (список вариантов значений смотрите после примера):

      +

      Метод sort() может принимать в качестве аргумента callback-функцию, которая определяет каким образом сравнивать элементы массива при сортировке. Функция сравнивает два значения, и возвращает одно из трёх значений (список вариантов значений смотрите после примера):

      Пример. Следующий код сортирует массив по последнему символу в строке:

      @@ -297,16 +297,16 @@ myArray.sort(sortFn);
      var a = ['a', 'b', 'a', 'b', 'a'];
       console.log(a.indexOf('b')); // выводит 1
      -// Попробуем еще раз, начиная с индекса последнего совпадения
      +// Попробуем ещё раз, начиная с индекса последнего совпадения
       console.log(a.indexOf('b', 2)); // выводит 3
       console.log(a.indexOf('z')); // выводит -1, потому что 'z' не найдено
       
      -

      {{jsxref("Array.lastIndexOf", "lastIndexOf(searchElement[, fromIndex])")}} тоже самое, что и indexOf, но поиск ведется в обратном порядке, с конца массива.

      +

      {{jsxref("Array.lastIndexOf", "lastIndexOf(searchElement[, fromIndex])")}} тоже самое, что и indexOf, но поиск ведётся в обратном порядке, с конца массива.

      var a = ['a', 'b', 'c', 'd', 'a', 'b'];
       console.log(a.lastIndexOf('b')); // выводит 5
      -// Попробуем еще раз, начиная с индекса, предшествующего индексу последнего совпадения
      +// Попробуем ещё раз, начиная с индекса, предшествующего индексу последнего совпадения
       console.log(a.lastIndexOf('b', 4)); // выводит 1
       console.log(a.lastIndexOf('z')); // выводит -1
       
      @@ -343,7 +343,7 @@ var a2 = [1, '2', 3]; console.log(a2.every(isNumber)); // выводит false
      -

      {{jsxref("Array.some", "some(callback[, thisObject])")}} возвращает true, если вызов callback-функции вернет true хотя бы для одного элемента.

      +

      {{jsxref("Array.some", "some(callback[, thisObject])")}} возвращает true, если вызов callback-функции вернёт true хотя бы для одного элемента.

      function isNumber(value){
         return typeof value == 'number';
      @@ -356,7 +356,7 @@ var a3 = ['1', '2', '3'];
       console.log(a3.some(isNumber)); // выводит false
       
      -

      Те из методов выше, что принимают callback-функцию в качестве аргумента, известны как методы итерации (iterative methods), потому что определенным образом проходятся по всем элементам массива. Каждый из таких методов принимает второй, опциональный элемент, называемый thisObject. Если этот аргумент присутствует, то его значение присваивается ключевому слову this в теле callback-функции. Иначе, как и в любом другом случае вызова функции вне явного контекста, this будет ссылаться на глобальный объект ({{domxref("window")}}).

      +

      Те из методов выше, что принимают callback-функцию в качестве аргумента, известны как методы итерации (iterative methods), потому что определённым образом проходятся по всем элементам массива. Каждый из таких методов принимает второй, опциональный элемент, называемый thisObject. Если этот аргумент присутствует, то его значение присваивается ключевому слову this в теле callback-функции. Иначе, как и в любом другом случае вызова функции вне явного контекста, this будет ссылаться на глобальный объект ({{domxref("window")}}).

      В действительности callback-функция вызывается с тремя аргументами. Первый аргумент - текущий элемент массива, второй - индекс этого элемента, и третий - ссылка на сам массив. Однако, в JavaScript, функции игнорируют любые аргументы, которые не перечислены в списке аргументов. Таким образом, нет ничего страшного в использовании функции с одним аргументом, такой как alert.

      @@ -367,7 +367,7 @@ var total = a.reduce(function(first, second, index) { return first + second; }, console.log(total) // выводит 60 -

      {{jsxref("Array.reduceRight", "reduceRight(callback[, initalvalue])")}} работает так же как и reduce(), но порядок обхода ведется от конца к началу.

      +

      {{jsxref("Array.reduceRight", "reduceRight(callback[, initalvalue])")}} работает так же как и reduce(), но порядок обхода ведётся от конца к началу.

      Методы reduce и reduceRight являются наименее очевидными методами объекта Array. Они должны использоваться в алгоритмах, которые рекурсивно совмещают два элемента массива, для сведения всей последовательности к одному значению.

      @@ -375,7 +375,7 @@ console.log(total) // выводит 60

      Массивы могут быть вложенными, то есть массив может содержать массивы в элементах. Используя эту возможность массивов JavaScript, можно построить многомерные массивы.

      -

      Следующий код создает двумерный массив:

      +

      Следующий код создаёт двумерный массив:

      var a = new Array(4);
       for (i = 0; i < 4; i++) {
      @@ -386,7 +386,7 @@ for (i = 0; i < 4; i++) {
       }
       
      -

      В этом примере создается массив со следующим содержимым:

      +

      В этом примере создаётся массив со следующим содержимым:

      Ряд 0: [0,0] [0,1] [0,2] [0,3]
       Ряд 1: [1,0] [1,1] [1,2] [1,3]
      @@ -428,11 +428,11 @@ for (i = 0; i < 4; i++) {
       
       

      ArrayBuffer

      -

      Объект {{jsxref("ArrayBuffer")}} это стандартный набор бинарных данных с фиксированной длиной. Вы не можете манипулировать содержимым ArrayBuffer напрямую. Вместо этого необходимо создать типизированное представление {{jsxref("DataView")}}, которое будет отображать буфер в определенном формате, и даст доступ на запись и чтение его содержимого.

      +

      Объект {{jsxref("ArrayBuffer")}} это стандартный набор бинарных данных с фиксированной длиной. Вы не можете манипулировать содержимым ArrayBuffer напрямую. Вместо этого необходимо создать типизированное представление {{jsxref("DataView")}}, которое будет отображать буфер в определённом формате, и даст доступ на запись и чтение его содержимого.

      Типизированные представления

      -

      Название типизированного представления массива говорит само за себя. Оно представляет массив в распространенных числовых форматах, таких как  Int8, Uint32, Float64 и так далее. Среди прочих существует специальное представление Uint8ClampedArray. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при Обработке данных изображения в Canvas.

      +

      Название типизированного представления массива говорит само за себя. Оно представляет массив в распространённых числовых форматах, таких как  Int8, Uint32, Float64 и так далее. Среди прочих существует специальное представление Uint8ClampedArray. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при Обработке данных изображения в Canvas.

      {{page("en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", "TypedArray_objects")}}

      diff --git a/files/ru/web/javascript/guide/introduction/index.html b/files/ru/web/javascript/guide/introduction/index.html index 07c31a7a05..825d8cf2d6 100644 --- a/files/ru/web/javascript/guide/introduction/index.html +++ b/files/ru/web/javascript/guide/introduction/index.html @@ -21,7 +21,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript
      • Общее понимание Internet и World Wide Web ({{Glossary("WWW")}}).
      • Хорошее знание HyperText Markup Language ({{Glossary("HTML")}}).
      • -
      • Некоторый опыт программирования. Если вы являетесь новичком в программировании, то ознакомьтесь с руководствами, приведенными на странице по JavaScript.
      • +
      • Некоторый опыт программирования. Если вы являетесь новичком в программировании, то ознакомьтесь с руководствами, приведёнными на странице по JavaScript.

      Где можно найти информацию о JavaScript?

      @@ -40,7 +40,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript

      JavaScript — это кросс-платформенный, объектно-ориентированный скриптовый язык, являющийся небольшим и легковесным. Внутри среды исполнения JavaScript может быть связан с объектами данной среды и предоставлять программный контроль над ними.

      -

      JavaScript включает стандартную библиотеку объектов, например, Array, Date и Math, а также базовый набор языковых элементов, например, операторы и управляющие конструкции. Ядро JavaScript может быть расширено для различных целей путем добавления в него новых объектов, например:

      +

      JavaScript включает стандартную библиотеку объектов, например, Array, Date и Math, а также базовый набор языковых элементов, например, операторы и управляющие конструкции. Ядро JavaScript может быть расширено для различных целей путём добавления в него новых объектов, например:

      • JavaScript на стороне клиента расширяет ядро языка, предоставляя объекты для контроля браузера и его Document Object Model (DOM). Например, клиентские расширения позволяют приложению размещать элементы в форме HTML и обрабатывать пользовательские события, такие как щелчок мыши, ввод данных в форму и навигация по страницам.
      • @@ -53,7 +53,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript

        В отличие от системы скомпилированных классов Java, построенной на объявлениях, JavaScript поддерживает систему исполнения, основанную на небольшом числе типов данных, представляющих числовые, логические и строковые значения. JavaScript имеет объектную модель на базе прототипов вместо более общей модели на базе классов. Модель объектов на базе прототипов предоставляет динамическое наследование, т.е. то, что наследуется, может отличаться для отдельных объектов. JavaScript также поддерживает функции без каких-либо специальных декларативных требований. Функции могут быть свойствами объектов, выполняться как свободно-типизированные методы.

        -

        По сравнению с Java, JavaScript является языком с очень свободной формой. Вам не надо объявлять переменные, классы и методы. Вам не надо беспокоиться о том, являются ли методы публичными (public), приватными (private) или защищенными (protected), а также вам не надо реализовывать интерфейсы. Переменные, параметры и возвращаемые функциями типы не являются явно типизированными.

        +

        По сравнению с Java, JavaScript является языком с очень свободной формой. Вам не надо объявлять переменные, классы и методы. Вам не надо беспокоиться о том, являются ли методы публичными (public), приватными (private) или защищёнными (protected), а также вам не надо реализовывать интерфейсы. Переменные, параметры и возвращаемые функциями типы не являются явно типизированными.

        Java — это язык программирования, основанный на классах и предназначенный для быстрого выполнения и безопасности типов. Безопасность типов означает, например, что вы не можете привести тип integer к типу object reference или получить доступ к приватной памяти, изменяя байт-код Java. Ориентированная на классы модель Java означает, что программы состоят исключительно из классов и их методов. Наследование классов и строгая типизация в Java обычно требуют тесно связанные иерархии объектов. Эти требования делают программирование на Java более комплексным, чем программирование на JavaScript.

        @@ -77,8 +77,8 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript
    - - + +
    Таблица 3.7 Приоритет операторов
    Типы данных переменных должны быть объявлены (статическая типизация).
    Не может автоматически записывать на жесткий диск.Может автоматически записывать на жесткий диск.Не может автоматически записывать на жёсткий диск.Может автоматически записывать на жёсткий диск.
    @@ -89,7 +89,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript

    JavaScript стандартизирован европейской ассоциацией Ecma International, деятельность которой посвящена стандартизации информационных и коммуникационных систем (изначально ECMA являлся акронимом European Computer Manufacturers Association). Эта стандартизированная версия JavaScript, называемая ECMAScript, работает одинаково во всех приложениях, поддерживающих стандарт. Компании могут использовать открытый стандарт языка, чтобы разработать собственную реализацию JavaScript. Стандарт ECMAScript задокументирован в спецификации ECMA-262. Чтобы узнать больше информации о разных версиях JavaScript и ECMAScript, прочитайте Что нового в JavaScript.

    -

    Стандарт ECMA-262 также утвержден ISO (International Organization for Standardization) как ISO-16262. Вы можете найти спецификацию на сайте Ecma International. Спецификация ECMAScript не описывает Document Object Model (DOM), которая стандартизирована World Wide Web Consortium (W3C). DOM определяет способ для доступа к объектам HTML документа из вашего скрипта. Чтобы получить более точное представление о различных технологиях, используемых при программировании на JavaScript, прочитайте Обзор JavaScript.

    +

    Стандарт ECMA-262 также утверждён ISO (International Organization for Standardization) как ISO-16262. Вы можете найти спецификацию на сайте Ecma International. Спецификация ECMAScript не описывает Document Object Model (DOM), которая стандартизирована World Wide Web Consortium (W3C). DOM определяет способ для доступа к объектам HTML документа из вашего скрипта. Чтобы получить более точное представление о различных технологиях, используемых при программировании на JavaScript, прочитайте Обзор JavaScript.

    Документация JavaScript против спецификации ECMAScript

    @@ -97,7 +97,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript

    Документ ECMAScript не предназначен для помощи программистам в создании скриптов; чтобы получить информацию о том, как писать скрипты, используйте документацию JavaScript.

    -

    Спецификация ECMAScript использует терминологию и синтаксис, которые могут быть незнакомы JavaScript-программистам. Хотя описание языка может отличаться в ECMAScript, но сам язык остается таким же. JavaScript поддерживает всю функциональность, описанную в спецификации ECMAScript.

    +

    Спецификация ECMAScript использует терминологию и синтаксис, которые могут быть незнакомы JavaScript-программистам. Хотя описание языка может отличаться в ECMAScript, но сам язык остаётся таким же. JavaScript поддерживает всю функциональность, описанную в спецификации ECMAScript.

    Документация JavaScript описывает аспекты языка, являющиеся подходящими для JavaScript-программиста.

    @@ -128,7 +128,7 @@ original_slug: Web/JavaScript/Guide/Введение_в_JavaScript

    Web Console отлично подходит для выполнения одиночных строк JavaScript, но хотя вы можете выполнить и несколько строк, это не очень удобно, к тому же вы не можете сохранить ваш код, используя Web Console. Поэтому для более комплексных примеров Scratchpad является более подходящим инструментом.

    -

    Чтобы открыть Scratchpad(Shift+F4), выберите "Scratchpad" из меню "Web Developer", которое находится под меню "Tools" в Firefox. Блокнот будет открыт в отдельном окне, вы можете использовать его для создания и выполнения JavaScript в браузере. Вы также можете сохранять ваши скрипты на жесткий диск, а потом загружать их.

    +

    Чтобы открыть Scratchpad(Shift+F4), выберите "Scratchpad" из меню "Web Developer", которое находится под меню "Tools" в Firefox. Блокнот будет открыт в отдельном окне, вы можете использовать его для создания и выполнения JavaScript в браузере. Вы также можете сохранять ваши скрипты на жёсткий диск, а потом загружать их.

    Если вы выберете "Display", то код в вашем блокноте будет выполнен в браузере, а результат вставлен обратно в блокнот как комментарий:

    diff --git a/files/ru/web/javascript/guide/iterators_and_generators/index.html b/files/ru/web/javascript/guide/iterators_and_generators/index.html index ea05bf2965..b447156ea8 100644 --- a/files/ru/web/javascript/guide/iterators_and_generators/index.html +++ b/files/ru/web/javascript/guide/iterators_and_generators/index.html @@ -9,7 +9,7 @@ translation_of: Web/JavaScript/Guide/Iterators_and_Generators ---
    {{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Meta_programming")}}
    -

    Обработка каждого элемента коллекции является весьма распространенной операцией. JavaScript предоставляет несколько способов перебора коллекции, от простого цикла for до map(), filter() и array comprehensions. Итераторы и генераторы внедряют концепцию перебора непосредственно в ядро языка и обеспечивают механизм настройки поведения for...of циклов.

    +

    Обработка каждого элемента коллекции является весьма распространённой операцией. JavaScript предоставляет несколько способов перебора коллекции, от простого цикла for до map(), filter() и array comprehensions. Итераторы и генераторы внедряют концепцию перебора непосредственно в ядро языка и обеспечивают механизм настройки поведения for...of циклов.

    Подробнее см. также:

    @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Guide/Iterators_and_Generators

    Итераторы

    -

    Объект является итератором, если он умеет обращаться к элементам коллекции по одному за раз, при этом отслеживая свое текущее положение внутри этой последовательности. В JavaScript итератор - это объект, который предоставляет метод next(), возвращающий следующий элемент последовательности. Этот метод возвращает объект с двумя свойствами: done и value.

    +

    Объект является итератором, если он умеет обращаться к элементам коллекции по одному за раз, при этом отслеживая своё текущее положение внутри этой последовательности. В JavaScript итератор - это объект, который предоставляет метод next(), возвращающий следующий элемент последовательности. Этот метод возвращает объект с двумя свойствами: done и value.

    После создания, объект-итератор может быть явно использован, с помощью вызовов метода next().

    @@ -39,7 +39,7 @@ translation_of: Web/JavaScript/Guide/Iterators_and_Generators } }
    -

    После инициализации, метод next() может быть вызван для поочередного доступа к парам ключ-значение в объекте:

    +

    После инициализации, метод next() может быть вызван для поочерёдного доступа к парам ключ-значение в объекте:

    var it = makeIterator(['yo', 'ya']);
     console.log(it.next().value); // 'yo'
    @@ -48,7 +48,7 @@ console.log(it.next().done);  // true

    Генераторы

    -

    В то время как пользовательские итераторы могут быть весьма полезны, при их программировании требуется уделять серьезное внимание поддержке внутреннего состояния. {{jsxref("Global_Objects/Generator","Генераторы","","true")}} предоставляют мощную альтернативу: они позволяют определить алгоритм перебора, написав единственную функцию, которая умеет поддерживать собственное состояние.

    +

    В то время как пользовательские итераторы могут быть весьма полезны, при их программировании требуется уделять серьёзное внимание поддержке внутреннего состояния. {{jsxref("Global_Objects/Generator","Генераторы","","true")}} предоставляют мощную альтернативу: они позволяют определить алгоритм перебора, написав единственную функцию, которая умеет поддерживать собственное состояние.

    Генераторы - это специальный тип функции, который работает как фабрика итераторов. Функция становится генератором, если содержит один или более {{jsxref("Operators/yield","yield")}} операторов и использует {{jsxref("Statements/function*","function*")}} синтаксис.

    @@ -67,7 +67,7 @@ console.log(it.next().value); // 2

    Итерируемые объекты

    -

    Объект является итерируемым, если в нем определен способ перебора значений, то есть, например, как значения перебираются в конструкции {{jsxref("Statements/for...of", "for..of")}}. Некоторые встроенные типы, такие как {{jsxref("Array")}} или {{jsxref("Map")}}, по умолчанию являются итерируемыми, в то время как другие типы, как, например, {{jsxref("Object")}}, таковыми не являются.

    +

    Объект является итерируемым, если в нем определён способ перебора значений, то есть, например, как значения перебираются в конструкции {{jsxref("Statements/for...of", "for..of")}}. Некоторые встроенные типы, такие как {{jsxref("Array")}} или {{jsxref("Map")}}, по умолчанию являются итерируемыми, в то время как другие типы, как, например, {{jsxref("Object")}}, таковыми не являются.

    Чтобы быть итерируемым, объект обязан реализовать метод @@iterator, что означает, что он (или один из объектов выше по цепочке прототипов) обязан иметь свойство с именем {{jsxref("Symbol.iterator")}}:

    @@ -152,7 +152,7 @@ console.log(sequence.next().value); // 3

    Можно заставить генератор выбросить исключение, вызвав его метод {{jsxref("Global_Objects/Generator/throw","throw()")}} и передав в качестве параметра значение исключения, которое должно быть выброшено. Это исключение будет выброшено из текущего приостановленного контекста генератора так, будто текущий приостановленный yield оператор являлся throw оператором.

    -

    Если yield оператор не встречается во время обработки выброшенного исключения, то исключение передается выше через вызов throw(), и результатом последующих вызовов next() будет свойство done равное true.

    +

    Если yield оператор не встречается во время обработки выброшенного исключения, то исключение передаётся выше через вызов throw(), и результатом последующих вызовов next() будет свойство done равное true.

    У генераторов есть метод  {{jsxref("Global_Objects/Generator/return","return(value)")}}, который возвращает заданное значение и останавливает работу генератора.

    diff --git a/files/ru/web/javascript/guide/meta_programming/index.html b/files/ru/web/javascript/guide/meta_programming/index.html index 49b3657c4c..d1d84977b8 100644 --- a/files/ru/web/javascript/guide/meta_programming/index.html +++ b/files/ru/web/javascript/guide/meta_programming/index.html @@ -17,7 +17,7 @@ translation_of: Web/JavaScript/Guide/Meta_programming

    Объекты Proxy

    -

    Введенный в ECMAScript 6, объект {{jsxref("Proxy")}} позволяет перехватить и определить пользовательское поведение для определенных операций. Например, получение свойства объекта:

    +

    Введённый в ECMAScript 6, объект {{jsxref("Proxy")}} позволяет перехватить и определить пользовательское поведение для определённых операций. Например, получение свойства объекта:

    var handler = {
       get: function(target, name) {
    @@ -28,7 +28,7 @@ p.a = 1;
     console.log(p.a, p.b); // 1, 42
     
    -

    Объект Proxy определяет target (в данном случае новый пустой объект) и handler - объект в котором реализована особая функция-ловушка get. "Проксированный" таким образом объект, при доступе к его несуществующему свойству вернет не undefined, а числовое значение 42.

    +

    Объект Proxy определяет target (в данном случае новый пустой объект) и handler - объект в котором реализована особая функция-ловушка get. "Проксированный" таким образом объект, при доступе к его несуществующему свойству вернёт не undefined, а числовое значение 42.

    Дополнительные примеры доступны в справочнике {{jsxref("Proxy")}}.

    @@ -38,7 +38,7 @@ console.log(p.a, p.b); // 1, 42
    {{jsxref("Global_Objects/Proxy/handler","handler","","true")}} (обработчик)
    -
    Объект - обертка, содержащий в себе функции-ловушки.
    +
    Объект - обёртка, содержащий в себе функции-ловушки.
    ловушки (traps)
    Методы, реализующие доступ к свойствам. В своей концепции они аналогичны методам перехвата(hooking) в операционных системах.
    цель (target)
    @@ -103,7 +103,7 @@ console.log(p.a, p.b); // 1, 42
  • Свойство не может быть описано как несуществующее, если оно существует как собственное свойство целевого объекта target и target не расширяем.
  • Свойство не может быть описано как существующее, если оно не существует как собственное свойство  целевого объекта target и target не расширяем.
  • Свойство не может быть описано как неизменяемое, если оно не существует как собственное свойство целевого объекта target или если оно существует и является изменяемым, собственным свойством целевого объекта target.
  • -
  • Значение возвращенное методом Object.getOwnPropertyDescriptor(target) может быть применено к целевому объекту через метод Object.defineProperty и это не вызовет ошибки.
  • +
  • Значение возвращённое методом Object.getOwnPropertyDescriptor(target) может быть применено к целевому объекту через метод Object.defineProperty и это не вызовет ошибки.
  • @@ -117,7 +117,7 @@ console.log(p.a, p.b); // 1, 42
  • Нельзя добавить новое конфигурируемое свойство, или преобразовать существующее свойство в конфигурируемое, если оно не существует как собственное свойство целевого объекта или не является конфигурируемым.
  • Свойство не может быть неконфигурируемым, если целевой объект имеет соответствующее собственное, конфигурируемое свойство.
  • Если объект имеет свойство соответствующее создаваемому свойству, то Object.defineProperty(target, prop, descriptor) не вызовет ошибки.
  • -
  • В строгом режиме ("use strict";), если обработчик defineProperty вернет false, это вызовет ошибку {{jsxref("TypeError")}}.
  • +
  • В строгом режиме ("use strict";), если обработчик defineProperty вернёт false, это вызовет ошибку {{jsxref("TypeError")}}.
  • @@ -141,7 +141,7 @@ console.log(p.a, p.b); // 1, 42
    • Значение, возвращаемое для свойства, должно равняться значению соответствующего свойства целевого объекта, если это свойство является доступным только для чтения, неконфигурируемым.
    • -
    • Значение, возвращаемое для свойства, должно равняться undefined, если соответствующее свойство целевого объекта является неконфигурируемым и обернуто в геттер и сеттер, где сеттер равен undefined.
    • +
    • Значение, возвращаемое для свойства, должно равняться undefined, если соответствующее свойство целевого объекта является неконфигурируемым и обёрнуто в геттер и сеттер, где сеттер равен undefined.
    @@ -153,7 +153,7 @@ console.log(p.a, p.b); // 1, 42
    • Нельзя изменить значение свойства на значение, отличное от значения соответствующего свойства целевого объекта, если это свойство целевого объекта доступно только для чтения, и является неконфигурируемым.
    • -
    • Нельзя установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым, и обернуто в геттер и сеттер, где сеттер равен undefined.
    • +
    • Нельзя установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым, и обёрнуто в геттер и сеттер, где сеттер равен undefined.
    • В строгом режиме, возвращение false из обработчика set вызовет ошибку {{jsxref("TypeError")}}.
    @@ -203,7 +203,7 @@ console.log(p.a, p.b); // 1, 42

    Отзываемый Proxy

    -

    Метод {{jsxref("Proxy.revocable()")}} создает отзываемый объект Proxy. Такой прокси объект может быть отозван функцией revoke, которая отключает все ловушки-обработчики. После этого любые операции над прокси объектом вызовут ошибку {{jsxref("TypeError")}}.

    +

    Метод {{jsxref("Proxy.revocable()")}} создаёт отзываемый объект Proxy. Такой прокси объект может быть отозван функцией revoke, которая отключает все ловушки-обработчики. После этого любые операции над прокси объектом вызовут ошибку {{jsxref("TypeError")}}.

    var revocable = Proxy.revocable({}, {
       get: function(target, name) {
    @@ -233,7 +233,7 @@ typeof proxy;            // "object", для метода typeof нет лову
     
     

    Улучшенная функция apply

    -

    В ES5 обычно используется метод {{jsxref("Function.prototype.apply()")}} для вызова функции в определенном контексте (с определенным this) и с параметрами, заданными в виде массива (или массива-подобного объекта).

    +

    В ES5 обычно используется метод {{jsxref("Function.prototype.apply()")}} для вызова функции в определённом контексте (с определённым this) и с параметрами, заданными в виде массива (или массива-подобного объекта).

    Function.prototype.apply.call(Math.floor, undefined, [1.75]);
    diff --git a/files/ru/web/javascript/guide/numbers_and_dates/index.html b/files/ru/web/javascript/guide/numbers_and_dates/index.html index 09a2f8ee9e..038b00c440 100644 --- a/files/ru/web/javascript/guide/numbers_and_dates/index.html +++ b/files/ru/web/javascript/guide/numbers_and_dates/index.html @@ -24,7 +24,7 @@ translation_of: Web/JavaScript/Guide/Numbers_and_dates 0777 // обрабатывается как восьмеричное в нестрогой форме (511 в десятичной)
    -

    Обратите внимание, что десятичные литералы могут начинаться с нуля (0) за которым следует другая десятичная цифра, но если следующая за нулем цифра меньше 8, то число обрабатывается как восьмеричное.

    +

    Обратите внимание, что десятичные литералы могут начинаться с нуля (0) за которым следует другая десятичная цифра, но если следующая за нулём цифра меньше 8, то число обрабатывается как восьмеричное.

    Двоичные числа

    @@ -62,9 +62,9 @@ var negInfiniteNum = Number.NEGATIVE_INFINITY; var notANum = Number.NaN; -

    Как видно из примера выше, для получения перечисленных значений, нужно обращаться к свойствам предопределенного глобального объекта Number. Тогда как у экземпляра этого объекта, созданного вами при работе программы, этих свойств не будет. 

    +

    Как видно из примера выше, для получения перечисленных значений, нужно обращаться к свойствам предопределённого глобального объекта Number. Тогда как у экземпляра этого объекта, созданного вами при работе программы, этих свойств не будет. 

    -

    В следующей таблице приведен список свойств объекта Number.

    +

    В следующей таблице приведён список свойств объекта Number.

    @@ -139,7 +139,7 @@ var notANum = Number.NaN; - + @@ -280,7 +280,7 @@ var notANum = Number.NaN;

    Содержимым блока parameters в коде представленном выше, могут выступать любая из следующих конструкций:

      -
    • Пусто: создает текущую дату и время. Пример: today = new Date();.
    • +
    • Пусто: создаёт текущую дату и время. Пример: today = new Date();.
    • Текстовая строка, содержащая дату и время в следующем формате: "Месяц день, год часы:минуты:секунды". Например: var Xmas95 = new Date("December 25, 1995 13:30:00"). Если не указать секунды, минуты или часы, то их значение будет принято за 0.
    • Набор целочисленных значений для года, месяца и дня. Например: var Xmas95 = new Date(1995, 11, 25).
    • Набор целочисленных значений для года, месяца, дня, часов, минут и секунд. Например: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.
    • @@ -326,7 +326,7 @@ var notANum = Number.NaN;
      var Xmas95 = new Date("December 25, 1995");
       
      -

      Тогда Xmas95.getMonth() вернет 11, а Xmas95.getFullYear() вернет 1995.

      +

      Тогда Xmas95.getMonth() вернёт 11, а Xmas95.getFullYear() вернёт 1995.

      Методы getTime и setTime могут быть полезны при сравнении дат. Метод getTime возвращает количество миллисекунд, прошедших с 00:00:00 1 Января, 1970 года.

      @@ -340,7 +340,7 @@ var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay; var daysLeft = Math.round(daysLeft); // возвращает количество дней, оставшихся до конца года -

      Этот пример создает объект Date названный today, который содержит текущую дату и время. Затем, создается вспомогательный Date объект, названный endYear, которому устанавливаются значения, указывающие на конец года. После этого, при помощи рассчитанного количества миллисекунд в сутках, вычисляется количество дней между  today и endYear, При этом используются метод getTime и округление, для получения количества полных дней.

      +

      Этот пример создаёт объект Date названный today, который содержит текущую дату и время. Затем, создаётся вспомогательный Date объект, названный endYear, которому устанавливаются значения, указывающие на конец года. После этого, при помощи рассчитанного количества миллисекунд в сутках, вычисляется количество дней между  today и endYear, При этом используются метод getTime и округление, для получения количества полных дней.

      Метод parse полезен для присвоения значений существующим объектам Date из текстового формата. Например, следующий код использует методы parse и setTime чтобы установить значение переменной IPOdate:

      @@ -367,11 +367,11 @@ IPOdate.setTime(Date.parse("Aug 9, 1995")); } -

      Первым делом, функция JSClock создает новый объект Date, названный time; так как объект создается баз параметров, переменная time содержит текущую дату и время. Затем вызываются методы getHours, getMinutes и getSeconds, чтобы установить значения переменным hour, minute и second.

      +

      Первым делом, функция JSClock создаёт новый объект Date, названный time; так как объект создаётся баз параметров, переменная time содержит текущую дату и время. Затем вызываются методы getHours, getMinutes и getSeconds, чтобы установить значения переменным hour, minute и second.

      -

      Следующие четыре выражения строят текстовую строку на основе time. Первое из них создает переменную temp, присваивая ей значение при помощи условия; Если hour больше чем 12, то (hour - 12), иначе просто hour. В случае же, когда hour равно 0, берется фиксированное значение "12".

      +

      Следующие четыре выражения строят текстовую строку на основе time. Первое из них создаёт переменную temp, присваивая ей значение при помощи условия; Если hour больше чем 12, то (hour - 12), иначе просто hour. В случае же, когда hour равно 0, берётся фиксированное значение "12".

      -

      Следующее выражение приращивает минуты к переменной temp. Если количество минут меньше 10, то условное выражение добавляет строку с двоеточием и заполняющим нулем, иначе, просто строку с двоеточием. Секунды приращиваются к переменной temp тем же путем.

      +

      Следующее выражение приращивает минуты к переменной temp. Если количество минут меньше 10, то условное выражение добавляет строку с двоеточием и заполняющим нулём, иначе, просто строку с двоеточием. Секунды приращиваются к переменной temp тем же путем.

      В завершение всего, последнее условное выражение добавляет строку "P.M." к переменной temp если hour равно или больше 12, иначе, добавляется строка "A.M.".

      diff --git a/files/ru/web/javascript/guide/regular_expressions/assertions/index.html b/files/ru/web/javascript/guide/regular_expressions/assertions/index.html index 2d04ed19aa..4906966bb8 100644 --- a/files/ru/web/javascript/guide/regular_expressions/assertions/index.html +++ b/files/ru/web/javascript/guide/regular_expressions/assertions/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions ---

      {{jsSidebar("JavaScript Guide")}}{{draft}}

      -

      Проверка (assertion) задает возможность совпадения одним из указанных способов. Проверка может содержать условные выражения, опережающие (look-ahead) и ретроспективные (look-behind) проверки.

      +

      Проверка (assertion) задаёт возможность совпадения одним из указанных способов. Проверка может содержать условные выражения, опережающие (look-ahead) и ретроспективные (look-behind) проверки.

      Типы

      @@ -25,7 +25,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions
    @@ -37,13 +37,13 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions diff --git a/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html b/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html index 16df319f96..451d5d78bb 100644 --- a/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html +++ b/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html @@ -48,84 +48,84 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes - + - + - + - + - + - + - + - + - + - + diff --git a/files/ru/web/javascript/guide/regular_expressions/index.html b/files/ru/web/javascript/guide/regular_expressions/index.html index 1769079e27..d6a9f157de 100644 --- a/files/ru/web/javascript/guide/regular_expressions/index.html +++ b/files/ru/web/javascript/guide/regular_expressions/index.html @@ -26,7 +26,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions -

    Использование конструктора влечет за собой компиляцию регулярного выражения во время исполнения скрипта. Используйте данный способ, если знаете, что выражение будет изменяться или не знаете шаблон заранее. Например вы получаете его из стороннего источника, при пользовательском вводе.

    +

    Использование конструктора влечёт за собой компиляцию регулярного выражения во время исполнения скрипта. Используйте данный способ, если знаете, что выражение будет изменяться или не знаете шаблон заранее. Например вы получаете его из стороннего источника, при пользовательском вводе.

    @@ -36,7 +36,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions

    Использование простых шаблонов

    -

    Простые шаблоны используются для нахождения прямого соответствия в тексте. Например, шаблон /abc/ соответствует комбинации символов в строке  только когда символы 'abc' встречаются вместе и в том же порядке. Такое сопоставление произойдет в строке "Hi, do you know your abc's?" и "The latest airplane designs evolved from slabcraft." В обоих случаях сопоставление произойдет с подстрокой 'abc'. Сопоставление не произойдет в строке "Grab crab", потому что она не содержит подстроку 'abc'.

    +

    Простые шаблоны используются для нахождения прямого соответствия в тексте. Например, шаблон /abc/ соответствует комбинации символов в строке  только когда символы 'abc' встречаются вместе и в том же порядке. Такое сопоставление произойдёт в строке "Hi, do you know your abc's?" и "The latest airplane designs evolved from slabcraft." В обоих случаях сопоставление произойдёт с подстрокой 'abc'. Сопоставление не произойдёт в строке "Grab crab", потому что она не содержит подстроку 'abc'.

    Использование специальных символов

    @@ -171,13 +171,13 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions @@ -283,7 +283,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions @@ -299,7 +299,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions @@ -375,7 +375,7 @@ translation_of: Web/JavaScript/Guide/Regular_Expressions
    Свойства объекта Number
    {{jsxref("Number.isNaN()")}}Определяет, является ли число, переданное в качестве аргумента, {{jsxref("Global_Objects/NaN", "NaN")}} (не числом). Аналогичный, но более надежный метод чем глобальная функция {{jsxref("Global_Objects/isNaN", "isNaN()")}}.Определяет, является ли число, переданное в качестве аргумента, {{jsxref("Global_Objects/NaN", "NaN")}} (не числом). Аналогичный, но более надёжный метод чем глобальная функция {{jsxref("Global_Objects/isNaN", "isNaN()")}}.
    {{jsxref("Number.isSafeInteger()")}} x(?=y)

    Опережающая проверка: x подходит только когда за x следует y. Например, /Jack(?=Sprat)/ сработает для "Jack"  только когда за ним будет "Sprat".
    - /Jack(?=Sprat|Frost)/ подойдет для "Jack" только когда за ним будет "Sprat" или "Frost". Следует заметить, что ни "Sprat" ни "Frost" не будут выданы как часть проверки.

    + /Jack(?=Sprat|Frost)/ подойдёт для "Jack" только когда за ним будет "Sprat" или "Frost". Следует заметить, что ни "Sprat" ни "Frost" не будут выданы как часть проверки.

    (?<=y)x -

    Ретроспективная проверка: x подходит только когда x предшествует y. Например, /(?<=Jack)Sprat/ сработает для "Sprat" только если перед ним есть "Jack". /(?<=Jack|Tom)Sprat/ подойдет для "Sprat" если перед ним будут "Jack" или "Tom". Заметим, что ни "Jack" ни "Tom" не будут выданы.

    +

    Ретроспективная проверка: x подходит только когда x предшествует y. Например, /(?<=Jack)Sprat/ сработает для "Sprat" только если перед ним есть "Jack". /(?<=Jack|Tom)Sprat/ подойдёт для "Sprat" если перед ним будут "Jack" или "Tom". Заметим, что ни "Jack" ни "Tom" не будут выданы.

    (?<!y)x -

    Отрицательная ретроспективная проверка: x подходит только когда x не предшествует y. Например, /(?<!-)\d+/ сработает для числа в том случае, если перед ним не стоит знак минус. Выполнение кода /(?<!-)\d+/.exec('3') выдаст "3". Код /(?<!-)\d+/.exec('-3') ничего не найдет, т.к. перед числом есть знак минус.

    +

    Отрицательная ретроспективная проверка: x подходит только когда x не предшествует y. Например, /(?<!-)\d+/ сработает для числа в том случае, если перед ним не стоит знак минус. Выполнение кода /(?<!-)\d+/.exec('3') выдаст "3". Код /(?<!-)\d+/.exec('-3') ничего не найдёт, т.к. перед числом есть знак минус.

    \d -

    Совпадет с любой цифрой (арабский числа). Эквивалентно  [0-9]. Например, /\d/ или /[0-9]/ находит "2" в "B2 is the suite number"..

    +

    Совпадёт с любой цифрой (арабский числа). Эквивалентно  [0-9]. Например, /\d/ или /[0-9]/ находит "2" в "B2 is the suite number"..

    \D -

    Совпадет с любым символом, который не является цифрой (арабский числа). Эквивалентно [^0-9]. Например, /\D/ or /[^0-9]/ находит "B" в "B2 is the suite number".

    +

    Совпадёт с любым символом, который не является цифрой (арабский числа). Эквивалентно [^0-9]. Например, /\D/ or /[^0-9]/ находит "B" в "B2 is the suite number".

    \w -

    Совпадет с любой буквенно-числовым символом из базового латинского алфавита включая нижнее подчёркивание.  Эквивалентно [A-Za-z0-9_]. Например, /\w/ находит "a" в "apple", "5" в "$5.28", "3" в "3D" и "m" в "Émanuel".

    +

    Совпадёт с любой буквенно-числовым символом из базового латинского алфавита включая нижнее подчёркивание.  Эквивалентно [A-Za-z0-9_]. Например, /\w/ находит "a" в "apple", "5" в "$5.28", "3" в "3D" и "m" в "Émanuel".

    \W -

    Совпадет с любой буквенно-числовым, которое не является символом базового латинского алфавита, так же исключая нижнее подчёркивание.  Эквивалентно [^A-Za-z0-9_]. Например, /\W/ или /[^A-Za-z0-9_]/ находит "%" в "50%" и "É" in "Émanuel".

    +

    Совпадёт с любой буквенно-числовым, которое не является символом базового латинского алфавита, так же исключая нижнее подчёркивание.  Эквивалентно [^A-Za-z0-9_]. Например, /\W/ или /[^A-Za-z0-9_]/ находит "%" в "50%" и "É" in "Émanuel".

    \s -

    Совпадет с любым пробельным символом, включая пробел, символ табуляции, символ подачи страницы, символ подачи строки и другие Unicode пробелы. Эквивалентно [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\s\w*/ находит " bar" в "foo bar".

    +

    Совпадёт с любым пробельным символом, включая пробел, символ табуляции, символ подачи страницы, символ подачи строки и другие Unicode пробелы. Эквивалентно [ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\s\w*/ находит " bar" в "foo bar".

    \S -

    Совпадет с любым символом, не являющимся пробельным. Эквивалентно [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\S\w*/ находит "foo" в "foo bar".

    +

    Совпадёт с любым символом, не являющимся пробельным. Эквивалентно [^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Например, /\S\w*/ находит "foo" в "foo bar".

    \tСовпадет с символом горизонтальной табуляции.Совпадёт с символом горизонтальной табуляции.
    \rСовпадет с символом возврата каретки.Совпадёт с символом возврата каретки.
    \nСовпадет с символом подачи строки.Совпадёт с символом подачи строки.
    \vСовпадет с символом вертикальной табуляцииСовпадёт с символом вертикальной табуляции
    \fСовпадет с символом подачи страницы (формы).Совпадёт с символом подачи страницы (формы).
    [\b]Совпадет с символом возврат назад (англ. backspace). Если вы ищите символ границы слова (\b), смотри Границы.Совпадёт с символом возврат назад (англ. backspace). Если вы ищите символ границы слова (\b), смотри Границы.
    \0Совпадет с символом NUL character. Не используйте другую цифру.Совпадёт с символом NUL character. Не используйте другую цифру.
    \cX -

    Совпадет с контрольным символом using каретную нотацию, где "X" буква A–Z (соответствует кодам U+0001U+001F). For example, /\cM/ matches "\r" in "\r\n".

    +

    Совпадёт с контрольным символом using каретную нотацию, где "X" буква A–Z (соответствует кодам U+0001U+001F). For example, /\cM/ matches "\r" in "\r\n".

    \xhhСовпадет с символом, код которого hh (две шестнадцатеричных цифры).Совпадёт с символом, код которого hh (две шестнадцатеричных цифры).
    \uhhhhСовпадет с код-блоком UTF-16 со значением hhhh (четыре шестнадцатеричных цифры).Совпадёт с код-блоком UTF-16 со значением hhhh (четыре шестнадцатеричных цифры).
    \u{hhhh} or \u{hhhhh}(Только когда установлен флаг u.) Совпадет с Unicode символом со значением  U+hhhh или U+hhhhh (шестнадцатеричные цифры).(Только когда установлен флаг u.) Совпадёт с Unicode символом со значением  U+hhhh или U+hhhhh (шестнадцатеричные цифры).
    \

    m и n - положительные целые. Соответствует как минимум n и максимум m вхождениям предыдущего символа. При m=n=1 пропускается.

    -

    Например, /a{1,3}/ ничему не соответствует в строке "cndy", символу 'a' в "candy," двум а в "caandy," и трем первым а в "caaaaaaandy". Отметим, что при сопоставлении "caaaaaaandy", совпадает "aaa", хотя изначальная строка содержит больше а.

    +

    Например, /a{1,3}/ ничему не соответствует в строке "cndy", символу 'a' в "candy," двум а в "caandy," и трём первым а в "caaaaaaandy". Отметим, что при сопоставлении "caaaaaaandy", совпадает "aaa", хотя изначальная строка содержит больше а.

    [xyz] -

    Набор символов. Соответствует любому символу из перечисленных. Можно указать диапазон символов, используя тире. Специальные символы (как точка (.) и звездочка (*)) не имеют специального значения внутри такого набора. Их не надо экранировать. Экранирование работает также.

    +

    Набор символов. Соответствует любому символу из перечисленных. Можно указать диапазон символов, используя тире. Специальные символы (как точка (.) и звёздочка (*)) не имеют специального значения внутри такого набора. Их не надо экранировать. Экранирование работает также.

    Например, [abcd] эквивалентна [a-d]. Они соответствуют 'b' в "brisket" и 'c' в "city". /[a-z.]+/ и /[\w.]+/ обе соответствуют всему в "test.i.ng".

    \w -

    Соответствует любому цифробуквенному символу включая нижнее подчеркивание. Эквивалентен [A-Za-z0-9_].

    +

    Соответствует любому цифробуквенному символу включая нижнее подчёркивание. Эквивалентен [A-Za-z0-9_].

    Например, /\w/ совпадает с 'a' в "apple," '5' в "$5.28," и '3' в "3D."

    \n -

    Где n это положительное целое, обратная ссылка на последнюю найденную подстроку, соответствующую n , заключенную в круглые скобки в регулярном выражении (считая левые скобки).

    +

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

    Например, /apple(,)\sorange\1/ соответствует 'apple, orange,' в "apple, orange, cherry, peach."

    -

    Чтобы просто узнать есть ли в строке что либо соответствующее шаблону, воспользуйтесь методами test или search; а чтобы получить больше информации пользуйтесь методами exec или match (хотя эти метода работают медленнее). Если вы пользуетесь exec или match и если совпадения есть, эти методы вернут массив и обновленные свойства объекта ассоциированного регулярного выражения а также предопределенного объекта RegExp регулярного выражения. Если совпадений нет, метод exec вернет null (который сконвертируется в  false).

    +

    Чтобы просто узнать есть ли в строке что либо соответствующее шаблону, воспользуйтесь методами test или search; а чтобы получить больше информации пользуйтесь методами exec или match (хотя эти метода работают медленнее). Если вы пользуетесь exec или match и если совпадения есть, эти методы вернут массив и обновлённые свойства объекта ассоциированного регулярного выражения а также предопределённого объекта RegExp регулярного выражения. Если совпадений нет, метод exec вернёт null (который сконвертируется в  false).

    В след. примере, скрипт использует метод exec чтобы найти совпадения в строке.

    @@ -388,13 +388,13 @@ var myArray = myRe.exec("cdbbdbsbz");
    var myArray = /d(b+)d/g.exec("cdbbdbsbz");
     
    -

    Если вы хотите сконструировать регулярное выражение из строки, другой способ сделать это приведен ниже:

    +

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

    var myRe = new RegExp("d(b+)d", "g");
     var myArray = myRe.exec("cdbbdbsbz");
     
    -

    С помощью этих скриптов, поиск совпадения завершается и возвращает массив и обновленные свойства показанные  в след. таблице.

    +

    С помощью этих скриптов, поиск совпадения завершается и возвращает массив и обновлённые свойства показанные  в след. таблице.

    @@ -431,7 +431,7 @@ var myArray = myRe.exec("cdbbdbsbz"); - + @@ -471,7 +471,7 @@ console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);

    Использование скобочных выражений для нахождения подстрок

    -

    Использование скобок в шаблоне регулярного выражения повлечет "запоминание" совпавшей подстроки. Для примера, /a(b)c/ вызовет совпадение 'abc' и запомнит 'b'. Чтобы получить совпадения скобочного выражения используйте Array elements [1], ..., [n].

    +

    Использование скобок в шаблоне регулярного выражения повлечёт "запоминание" совпавшей подстроки. Для примера, /a(b)c/ вызовет совпадение 'abc' и запомнит 'b'. Чтобы получить совпадения скобочного выражения используйте Array elements [1], ..., [n].

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

    @@ -557,7 +557,7 @@ console.log(myArray);

    Изменение порядка в Исходной Строке

    -

    След. пример иллюстрирует формирование регулярного выражения и использование string.split() и string.replace(). Он очищает неправильно сформатированную исходную строку, которая содержит имена в неправильном порядке (имя идет первым) разделенные пробелами, табуляцией и одной точкой с запятой. В конце, изменяется порядок следования имен (фамилия станет первой) и сортируется список.

    +

    След. пример иллюстрирует формирование регулярного выражения и использование string.split() и string.replace(). Он очищает неправильно сформатированную исходную строку, которая содержит имена в неправильном порядке (имя идёт первым) разделённые пробелами, табуляцией и одной точкой с запятой. В конце, изменяется порядок следования имён (фамилия станет первой) и сортируется список.

    // The name string contains multiple spaces and tabs,
     // and may have multiple spaces between first and last names.
    @@ -621,11 +621,11 @@ console.log(output.join("\n"));
     
     

    Использование спецсимволов для проверки входных данных

    -

    В след. примере, ожидается что пользователь введет телефонный номер и требуется проверить правильность символов набранных пользователем. Когда пользователь нажмет кнопку "Check", скрипт проверит правильность введенного номера. Если номер правильный (совпадает с символами определенными в регулярном выражении), то скрипт покажет сообщение благодарности для пользователя и подтвердит номер. Если нет, то скрипт проинформирует пользователя, что телефонный номер неправильный.

    +

    В след. примере, ожидается что пользователь введёт телефонный номер и требуется проверить правильность символов набранных пользователем. Когда пользователь нажмёт кнопку "Check", скрипт проверит правильность введённого номера. Если номер правильный (совпадает с символами определёнными в регулярном выражении), то скрипт покажет сообщение благодарности для пользователя и подтвердит номер. Если нет, то скрипт проинформирует пользователя, что телефонный номер неправильный.

    Внутри незахватывающих скобок (?:, регуляное выражение ищет три цифры \d{3} ИЛИ |  открывающую скобку \(, затем три цифры \d{3}, затем закрывающую скобку \), (закрывающая незахватывающая скобка )), затем тире, слеш, или десятичная точка, и когда это выражение найдено, запоминает символ ([-\/\.]),  следующие за ним и запомненные три цифры \d{3}, следующее соответствие тире, слеша или десятичной точки \1, и следующие четыре цифры \d{4}.

    -

    Регулярное выражение ищет сначала 0 или одну открывающую скобку \(?, затем три цифры \d{3}, затем 0 или одну закрывающую скобку \)?, потом одно тире, слеш или точка и когда найдет это, запомнит символ([-\/\.]), след. три цифры \d{3}, followed by the remembered match of a dash, forward slash, or decimal point \1, followed by four digits \d{4}.

    +

    Регулярное выражение ищет сначала 0 или одну открывающую скобку \(?, затем три цифры \d{3}, затем 0 или одну закрывающую скобку \)?, потом одно тире, слеш или точка и когда найдёт это, запомнит символ([-\/\.]), след. три цифры \d{3}, followed by the remembered match of a dash, forward slash, or decimal point \1, followed by four digits \d{4}.

    Событие "Изменить" активируется, когда пользователь подтвердит ввод значения регулярного выражения, нажав клавишу "Enter". 

    diff --git a/files/ru/web/javascript/guide/text_formatting/index.html b/files/ru/web/javascript/guide/text_formatting/index.html index 3539b94652..8d7ce164b9 100644 --- a/files/ru/web/javascript/guide/text_formatting/index.html +++ b/files/ru/web/javascript/guide/text_formatting/index.html @@ -67,7 +67,7 @@ console.log(str);
    var s = new String("foo"); // Создание объекта
     console.log(s); // Отобразится: { '0': 'f', '1': 'o', '2': 'o'}
    -typeof s; // Вернет 'object'
    +typeof s; // Вернёт 'object'
     

    Вы можете вызвать любой метод объекта класса String на строковом литерале - JavaScript сам преобразует строковый литерал во временный объект String, вызовет требуемый метод и затем уничтожит этот временный объект. Со строковыми литералами вы также можете использовать и String.length свойство.

    @@ -76,15 +76,15 @@ typeof s; // Вернет 'object'
    var s1 = "2 + 2"; // Создание строкового литерала
     var s2 = new String("2 + 2"); // Создание String объекта
    -eval(s1); // Вернет 4
    -eval(s2); // Вернет строку "2 + 2"
    +eval(s1); // Вернёт 4 +eval(s2); // Вернёт строку "2 + 2"

    Объект String имеет свойство length, которое обозначает количество символов в строке. Например, в следующем коде x получит значение 13 потому, что "Hello, World!" содержит 13 символов, каждый из которых представлен одним кодом UTF-16. Вы можете обратиться к каждому коду с помощью квадратных скобок. Вы не можете изменять отдельные символы строки, т.к. строки это массива-подобные неизменяемые объекты:

    var mystring = "Hello, World!";
     var x = mystring.length;
    -mystring[0] = 'L'; // Ничего не произойдет, т.к. строки неизменяемые
    -mystring[0]; // Вернет: "H"
    +mystring[0] = 'L'; // Ничего не произойдёт, т.к. строки неизменяемые
    +mystring[0]; // Вернёт: "H"
     

    Объект String имеет множество методов, в том числе и те, которые возвращают преобразованную исходную строку (методы substring, toUpperCase и другие).

    @@ -120,7 +120,7 @@ mystring[0]; // Вернет: "H" - + @@ -209,7 +209,7 @@ console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);

    Интернационализация

    -

    Объект {{jsxref("Intl")}} представляет собой пространство имен для ECMAScript API по интернационализации, которое обеспечивает чувствительное к языку сравнение строк, форматирование чисел, времени и даты. Конструкторы для объектов {{jsxref("Collator")}}, {{jsxref("NumberFormat")}} и {{jsxref("DateTimeFormat")}} являются свойствами объекта Intl.

    +

    Объект {{jsxref("Intl")}} представляет собой пространство имён для ECMAScript API по интернационализации, которое обеспечивает чувствительное к языку сравнение строк, форматирование чисел, времени и даты. Конструкторы для объектов {{jsxref("Collator")}}, {{jsxref("NumberFormat")}} и {{jsxref("DateTimeFormat")}} являются свойствами объекта Intl.

    Форматирование времени и даты

    @@ -247,7 +247,7 @@ console.log(hanDecimalRMBInChina.format(1314.25)); // ¥ 一,三一四.二五

    Объект {{jsxref("Collator")}} полезен для сравнения и сортировки строк.

    -

    Например, в Германии есть два различных порядка сортировки строк в зависимости от документа: телефонная книга или словарь. Сортировка по типу телефонной книги подчеркивает звуки.

    +

    Например, в Германии есть два различных порядка сортировки строк в зависимости от документа: телефонная книга или словарь. Сортировка по типу телефонной книги подчёркивает звуки.

    var names = ["Hochberg", "Hönigswald", "Holzman"];
     
    diff --git a/files/ru/web/javascript/guide/using_promises/index.html b/files/ru/web/javascript/guide/using_promises/index.html
    index fea85730ac..19183e72e9 100644
    --- a/files/ru/web/javascript/guide/using_promises/index.html
    +++ b/files/ru/web/javascript/guide/using_promises/index.html
    @@ -13,7 +13,7 @@ original_slug: Web/JavaScript/Guide/Ispolzovanie_promisov
     

    {{jsSidebar("Руководство по JavaScript")}}{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Iterators_and_Generators")}}

    -

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

    +

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

    В сущности, промис - это возвращаемый объект, в который вы записываете два колбэка вместо того, чтобы передать их функции.

    @@ -65,7 +65,7 @@ promise.then(successCallback, failureCallback);

    Гарантии

    -

    В отличие от старомодных переданных колбэков промис дает некоторые гарантии:

    +

    В отличие от старомодных переданных колбэков промис даёт некоторые гарантии:

    • Колбэки никогда не будут вызваны до завершения обработки текущего события в событийном цикле JavaScript.
    • @@ -134,7 +134,7 @@ let promise2 = promise.then(successCallback, failureCallback);

      Цепочка вызовов после catch

      -

      Можно продолжить цепочку вызовов после ошибки, т. е. после catch, что полезно для выполнения новых действий даже после того, как действие вернет ошибку в цепочке вызовов. Ниже приведен пример:

      +

      Можно продолжить цепочку вызовов после ошибки, т. е. после catch, что полезно для выполнения новых действий даже после того, как действие вернёт ошибку в цепочке вызовов. Ниже приведён пример:

      new Promise((resolve, reject) => {
           console.log('Начало');
      @@ -221,7 +221,7 @@ wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);Композиция
       
      -

      {{jsxref("Promise.resolve()")}} и {{jsxref("Promise.reject()")}} короткий способ создать уже успешные или отклоненные промисы соответственно. Это иногда бывает полезно.

      +

      {{jsxref("Promise.resolve()")}} и {{jsxref("Promise.reject()")}} короткий способ создать уже успешные или отклонённые промисы соответственно. Это иногда бывает полезно.

      {{jsxref("Promise.all()")}} и {{jsxref("Promise.race()")}} - два метода запустить асинхронные операции параллельно.

      @@ -236,7 +236,7 @@ wait(10000).then(() => saySomething("10 seconds")).catch(failureCallback);const applyAsync = (acc,val) => acc.then(val); const composeAsync = (...funcs) => x => funcs.reduce(applyAsync, Promise.resolve(x));
      -

      composeAsync функция примет любое количество функций в качестве аргументов и вернет новую функцию которая примет в параметрах начальное значение, переданное по цепочке. Это удобно, потому что некоторые или все функции могут быть либо асинхронными либо синхронными, и они гарантированно выполнятся в правильной последовательности:

      +

      composeAsync функция примет любое количество функций в качестве аргументов и вернёт новую функцию которая примет в параметрах начальное значение, переданное по цепочке. Это удобно, потому что некоторые или все функции могут быть либо асинхронными либо синхронными, и они гарантированно выполнятся в правильной последовательности:

      const transformData = composeAsync(func1, asyncFunc1, asyncFunc2, func2);
       transformData(data);
      @@ -249,7 +249,7 @@ transformData(data);

      Порядок выполнения

      -

      Чтобы избежать сюрпризов, функции, переданные в then никогда не будут вызваны синхронно, даже с уже разрешенным промисом:

      +

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

      Promise.resolve().then(() => console.log(2));
       console.log(1); // 1, 2
      @@ -264,9 +264,9 @@ console.log(1); // 1, 2, 3, 4

      Вложенность

      -

      Простые цепочки promise лучше оставлять без вложений, так как вложенность может быть результатом небрежной структуры. Смотрите распространенные ошибки.

      +

      Простые цепочки promise лучше оставлять без вложений, так как вложенность может быть результатом небрежной структуры. Смотрите распространённые ошибки.

      -

      Вложенность - это управляющая структура, ограничивающая область действия операторов catch. В частности, вложенный catch только перехватывает сбои в своей области и ниже, а не ошибки выше в цепочке за пределами вложенной области. При правильном использовании это дает большую точность в извлечение ошибок:

      +

      Вложенность - это управляющая структура, ограничивающая область действия операторов catch. В частности, вложенный catch только перехватывает сбои в своей области и ниже, а не ошибки выше в цепочке за пределами вложенной области. При правильном использовании это даёт большую точность в извлечение ошибок:

      doSomethingCritical()
       .then(result => doSomethingOptional()
      @@ -291,7 +291,7 @@ doSomething().then(function(result) {
       }).then(() => doFourthThing());
       // Забыл закончить цепочку методом catch
      -

      Первая ошибка это неправильно сцепить вещи между собой. Такое происходит когда мы создаем промис но забываем вернуть его. Как следствие, цепочка сломана, но правильнее было бы сказать что теперь у нас есть две независимые цепочки, соревнующиеся за право разрешится первой. Это означает doFourthThing() не будет ждать doSomethingElse() или doThirdThing() пока тот закончится, и будет исполнятся параллельно с ними, это ,вероятно, не то что хотел разработчик. Отдельные цепочки также имеют отдельную обработку ошибок, что приводит к необработанным ошибкам.

      +

      Первая ошибка это неправильно сцепить вещи между собой. Такое происходит когда мы создаём промис но забываем вернуть его. Как следствие, цепочка сломана, но правильнее было бы сказать что теперь у нас есть две независимые цепочки, соревнующиеся за право разрешится первой. Это означает doFourthThing() не будет ждать doSomethingElse() или doThirdThing() пока тот закончится, и будет исполнятся параллельно с ними, это ,вероятно, не то что хотел разработчик. Отдельные цепочки также имеют отдельную обработку ошибок, что приводит к необработанным ошибкам.

      Вторая ошибка это излишняя вложенность, включая первую ошибку. Вложенность также ограничивает область видимости внутренних обработчиков ошибок, если это не то чего хотел разработчик, это может привести к необработанным ошибкам. Примером этого является пример как не нужно создавать обещания, который комбинирует вложенность с чрезмерным использованием конструктора обещаний для оборачивания кода который уже использует промисы.

      @@ -307,9 +307,9 @@ doSomething().then(function(result) { .then(() => doFourthThing()) .catch(error => console.log(error)); -

      Обратите внимание что () => x  это сокращенная форма () => { return x; }.

      +

      Обратите внимание что () => x  это сокращённая форма () => { return x; }.

      -

      Теперь у нас имеется единственная определенная цепочка с правильной обработкой ошибок.

      +

      Теперь у нас имеется единственная определённая цепочка с правильной обработкой ошибок.

      Использование async/await предотвращает большинство, если не все вышеуказанные ошибки—но взамен появляется другая частая ошибка—забыть ключевое слово await.

      @@ -318,5 +318,5 @@ doSomething().then(function(result) { diff --git a/files/ru/web/javascript/guide/working_with_objects/index.html b/files/ru/web/javascript/guide/working_with_objects/index.html index 88742ac122..ee94429f46 100644 --- a/files/ru/web/javascript/guide/working_with_objects/index.html +++ b/files/ru/web/javascript/guide/working_with_objects/index.html @@ -11,11 +11,11 @@ translation_of: Web/JavaScript/Guide/Working_with_Objects

      Объекты в JavaScript, как и во многих других языках программирования, похожи на объекты реальной жизни. Концепцию объектов JavaScript легче понять, проводя параллели с реально существующими в жизни объектами.

      -

      В JavaScript объект — это самостоятельная единица, имеющая свойства и определенный тип. Сравним, например, с чашкой. У чашки есть цвет, форма, вес, материал, из которого она сделана, и т.д. Точно так же, объекты JavaScript имеют свойства, которые определяют их характеристики.

      +

      В JavaScript объект — это самостоятельная единица, имеющая свойства и определённый тип. Сравним, например, с чашкой. У чашки есть цвет, форма, вес, материал, из которого она сделана, и т.д. Точно так же, объекты JavaScript имеют свойства, которые определяют их характеристики.

      Объекты и свойства

      -

      В JavaScript объект имеет свойства, ассоциированные с ним. Свойство объекта можно понимать как переменную, закрепленную за объектом. Свойства объекта в сущности являются теми же самыми переменными JavaScript, за тем исключением, что они закреплены за объектом. Свойства объекта определяют его характеристики. Получить доступ к свойству объекта можно с помощью точечной записи:

      +

      В JavaScript объект имеет свойства, ассоциированные с ним. Свойство объекта можно понимать как переменную, закреплённую за объектом. Свойства объекта в сущности являются теми же самыми переменными JavaScript, за тем исключением, что они закреплены за объектом. Свойства объекта определяют его характеристики. Получить доступ к свойству объекта можно с помощью точечной записи:

      objectName.propertyName
      @@ -30,7 +30,7 @@ myCar.model = "Mustang";
       myCar.year = 1969;
       
      -

      Неопределенные свойства объекта являются {{jsxref("undefined")}} (а не {{jsxref("null")}}).

      +

      Неопределённые свойства объекта являются {{jsxref("undefined")}} (а не {{jsxref("null")}}).

      myCar.color; // undefined
      @@ -58,7 +58,7 @@ myObj[""] = "Even an empty string"; console.log(myObj); -

      Обратите внимание, что все ключи с квадратными скобками преобразуются в тип String, поскольку объекты в JavaScript могут иметь в качестве ключа только тип String. Например, в приведенном выше коде, когда ключ obj добавляется в myObj, JavaScript вызывает метод obj.toString () и использует эту результирующую строку в качестве нового ключа.

      +

      Обратите внимание, что все ключи с квадратными скобками преобразуются в тип String, поскольку объекты в JavaScript могут иметь в качестве ключа только тип String. Например, в приведённом выше коде, когда ключ obj добавляется в myObj, JavaScript вызывает метод obj.toString () и использует эту результирующую строку в качестве нового ключа.

      Вы также можете получить доступ к свойствам, используя значение строки, которое хранится в переменной:

      @@ -71,7 +71,7 @@ myCar[propertyName] = "Mustang";
      -

      Вы можете пользоваться квадратными скобками в конструкции for...in чтобы выполнить итерацию всех свойств объекта, для которых она разрешена. Чтобы показать как это работает, следующая функция показывает все свойства объекта, когда вы передаете в нее сам объект и его имя как аргументы функции:

      +

      Вы можете пользоваться квадратными скобками в конструкции for...in чтобы выполнить итерацию всех свойств объекта, для которых она разрешена. Чтобы показать как это работает, следующая функция показывает все свойства объекта, когда вы передаёте в неё сам объект и его имя как аргументы функции:

      function showProps(obj, objName) {
         var result = "";
      @@ -137,12 +137,12 @@ myCar.year = 1969

      Если объект создан при помощи инициализатора объектов на высшем уровне скрипта, то JavaScript интерпретирует объект каждый раз, когда анализирует выражение, содержащее объект, записанный как литерал. Плюс, если пользоваться функцией инициализатором, то он будет создаваться каждый раз, когда функция вызывается.

      -

      Следующая инструкция создает объект и назначает его переменной x, когда выражение cond истинно.

      +

      Следующая инструкция создаёт объект и назначает его переменной x, когда выражение cond истинно.

      if (cond) var x = {hi: "there"};
       
      -

      Следующий пример создает объект myHonda с тремя свойствами. Заметьте, что свойство engine  это также объект со своими собственными свойствами.

      +

      Следующий пример создаёт объект myHonda с тремя свойствами. Заметьте, что свойство engine  это также объект со своими собственными свойствами.

      var myHonda = {
         color: "red",
      @@ -183,7 +183,7 @@ myCar.year = 1969
      var mycar = new Car("Eagle", "Talon TSi", 1993);
       
      -

      Эта инструкция создает объект типа Car со ссылкой mycar и присваивает определенные значения его свойствам. Значением mycar.make станет строка "Eagle", mycar.year  это целое число 1993, и так далее.

      +

      Эта инструкция создаёт объект типа Car со ссылкой mycar и присваивает определённые значения его свойствам. Значением mycar.make станет строка "Eagle", mycar.year  это целое число 1993, и так далее.

      Вы можете создать столько объектов car, сколько нужно, просто вызывая  new. Например:

      @@ -246,11 +246,11 @@ var Animal = { } }; -// Создаем объект Animal +// Создаём объект Animal var animal1 = Object.create(Animal); animal1.displayType(); // Выведет:Invertebrates -// Создаем объект Animal и присваиваем ему type = Fishes +// Создаём объект Animal и присваиваем ему type = Fishes var fish = Object.create(Animal); fish.type = 'Fishes'; fish.displayType(); // Выведет:Fishes @@ -263,13 +263,13 @@ fish.displayType(); // Выведет:Fishes

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

      -

      Это ограничение налагается когда вы создаете объект и его свойства с помощью функции конструктора (как мы это делали ранее с типом Car ) и когда вы определяете индивидуальные свойства явно (например, myCar.color = "red"). Если вы изначально определили свойство объекта через индекс, например myCar[5] = "25 mpg", то впоследствии сослаться на это свойство можно только так myCar[5].

      +

      Это ограничение налагается когда вы создаёте объект и его свойства с помощью функции конструктора (как мы это делали ранее с типом Car ) и когда вы определяете индивидуальные свойства явно (например, myCar.color = "red"). Если вы изначально определили свойство объекта через индекс, например myCar[5] = "25 mpg", то впоследствии сослаться на это свойство можно только так myCar[5].

      Исключение из правил объекты, отображаемые из HTML, например массив forms. Вы всегда можете сослаться на объекты в этих массивах или используя их индекс (который основывается на порядке появления в HTML документе), или по их именам (если таковые были определены). Например, если второй html-тег <FORM> в документе имеет значение атрибута NAME равное "myForm", вы можете сослаться на эту форму вот так: document.forms[1] или document.forms["myForm"] или document.myForm.

      Определение свойств для типа объекта

      -

      Вы можете добавить свойство к ранее определенному типу объекта воспользовавшись специальным свойством prototype. Через prototype создается свойство, единое для всех объектов данного типа, а не одного экземпляра этого типа объекта. Следующий код демонстрирует это, добавляя свойство color ко всем объектам типа car, а затем присваивая значение свойству color объекта car1.

      +

      Вы можете добавить свойство к ранее определённому типу объекта воспользовавшись специальным свойством prototype. Через prototype создаётся свойство, единое для всех объектов данного типа, а не одного экземпляра этого типа объекта. Следующий код демонстрирует это, добавляя свойство color ко всем объектам типа car, а затем присваивая значение свойству color объекта car1.

      Car.prototype.color = null;
       car1.color = "black";
      @@ -297,7 +297,7 @@ var myObj = {
       
      object.methodname(params);
       
      -

      Вы можете определять методы для типа объекта, включая определение метода в функцию конструктора объекта. Например, вы можете определить функцию, которая форматирует и отображает свойства до этого определенных объектов car. Например,

      +

      Вы можете определять методы для типа объекта, включая определение метода в функцию конструктора объекта. Например, вы можете определить функцию, которая форматирует и отображает свойства до этого определённых объектов car. Например,

      function displayCar() {
         var result = "A Beautiful " + this.year + " " + this.make
      @@ -359,9 +359,9 @@ car2.displayCar();
       
       

      Определение геттеров и сеттеров

      -

      Геттер (от англ. get - получить)  это метод, который получает значение определенного свойства. Сеттер (от англ. set присвоить)  это метод, который присваивает значение определенному свойству объекта. Вы можете определить геттеры и сеттеры для любых из встроенных или определенных вами объектов, которые поддерживают добавление новых свойств. Синтаксис определения геттеров и сеттеров использует литеральный синтаксис объектов.

      +

      Геттер (от англ. get - получить)  это метод, который получает значение определённого свойства. Сеттер (от англ. set присвоить)  это метод, который присваивает значение определённому свойству объекта. Вы можете определить геттеры и сеттеры для любых из встроенных или определённых вами объектов, которые поддерживают добавление новых свойств. Синтаксис определения геттеров и сеттеров использует литеральный синтаксис объектов.

      -

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

      +

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

      var o = {
         a: 7,
      @@ -386,7 +386,7 @@ console.log(o.a); // 25
    • o.c — сеттер, который присваивает значение o.a половине значения которое передано в o.c
    -

    Следует особо отметить, что имена функций, указанные в литеральной форме "[gs]et propertyName() { }" не будут в действительности являться именами геттера и сеттера. Чтобы задать в качестве геттера и сеттера функции с явно определенными именами, используйте метод propertyName() { }" не будут в действительности являться именами геттера и сеттера. Чтобы задать в качестве геттера и сеттера функции с явно определёнными именами, используйте метод Object.defineProperty (или его устаревший аналог Object.prototype.__defineGetter__).

    @@ -450,7 +450,7 @@ myobj.b = 12; delete myobj.a; -

    Вы также можете воспользоваться delete чтобы удалить глобальную переменную, если ключевое слово var не было использовано при ее объявлении:

    +

    Вы также можете воспользоваться delete чтобы удалить глобальную переменную, если ключевое слово var не было использовано при её объявлении:

    g = 17;
     delete g;
    @@ -460,25 +460,25 @@ delete g;
     
     

    Сравнение объектов

    -

    В JavaScript объекты имеют ссылочный тип. Два отдельных объекта никогда не будут равными, даже если они имеют равный набор свойств. Только сравнение двух ссылок на один и тот же объект вернет true.

    +

    В JavaScript объекты имеют ссылочный тип. Два отдельных объекта никогда не будут равными, даже если они имеют равный набор свойств. Только сравнение двух ссылок на один и тот же объект вернёт true.

    // Две переменных ссылаются на два объекта с одинаковыми свойствами
     var fruit = {name: 'apple'};
     var fruitbear = {name: 'apple'};
     
    -fruit == fruitbear; // вернет false
    -fruit === fruitbear; // вернет false
    +fruit == fruitbear; // вернёт false +fruit === fruitbear; // вернёт false
    // Две переменные ссылаются на один общий объект
     var fruit = {name: 'apple'};
     var fruitbear = fruit;  // присвоим переменной fruitbear ссылку на объект fruit
     
     // теперь fruitbear и fruit ссылаются на один и тот же объект
    -fruit == fruitbear; // вернет true
    -fruit === fruitbear; // вернет true
    +fruit == fruitbear; // вернёт true +fruit === fruitbear; // вернёт true
    fruit.name = 'grape';
    -console.log(fruitbear);    // вернет { name: "grape" } вместо { name: "apple" }
    +console.log(fruitbear); // вернёт { name: "grape" } вместо { name: "apple" }

    Подробнее смотрите Операторы сравнения.

    diff --git a/files/ru/web/javascript/index.html b/files/ru/web/javascript/index.html index d7c70db6d0..0e29c2efb4 100644 --- a/files/ru/web/javascript/index.html +++ b/files/ru/web/javascript/index.html @@ -20,7 +20,7 @@ translation_of: Web/JavaScript

    JavaScript® (часто просто JS) — это легковесный, интерпретируемый или JIT-компилируемый, объектно-ориентированный язык с {{Glossary("First-class_Function", "функциями первого класса")}}. Наиболее широкое применение находит как язык сценариев веб-страниц, но также используется и в других программных продуктах, например, node.js или Apache CouchDB. JavaScript это {{Glossary("Prototype-based_programming", "прототипно-ориентированный")}}, мультипарадигменный язык с динамической типизацией, который поддерживает объектно-ориентированный, императивный и декларативный (например, функциональное программирование) стили программирования. Подробнее о JavaScript.

    -

    Эта часть сайта посвящена самому языку JavaScript, и она не затрагивает тонкостей, связанных с веб-страницами или окружением, в котором исполняется JavaScript. Информация об {{Glossary("API")}}, относящихся к веб-страницам, находится в разделах, посвященных Веб-API и DOM.

    +

    Эта часть сайта посвящена самому языку JavaScript, и она не затрагивает тонкостей, связанных с веб-страницами или окружением, в котором исполняется JavaScript. Информация об {{Glossary("API")}}, относящихся к веб-страницам, находится в разделах, посвящённых Веб-API и DOM.

    Стандартом языка JavaScript является ECMAScript. По состоянию на 2012, все современные браузеры полностью поддерживают ECMAScript 5.1. Старые версии браузеров поддерживают по крайней мере - ECMAScript 3. 17 июня 2015 года состоялся выпуск шестой версии ECMAScript. Эта версия официально называется ECMAScript 2015, которую чаще всего называют ECMAScript 2015 или просто ES2015. С недавнего времени стандарты ECMAScript выпускаются ежегодно. Эта документация относится к последней версии черновика, которой является ECMAScript 2018.

    @@ -47,7 +47,7 @@ translation_of: Web/JavaScript
    Асинхронный JavaScript
    Обсуждение асинхронного JavaScript: почему это так важно, как эта возможность языка может использована для обработки потенциальных блокирующих операций, как, например получение данных с сервера.
    Клиентские (браузерные) веб-API
    -
    Когда вы пишите клиент веб-сайтов или приложений на JavaScript, вы не далеко уйдете без использования API – интерфейсов для взаимодействия с браузером и операционной системой, на которой запущен сайт, или даже для операций с данными, полученными от других веб-сайтов и сервисов. В этом цикле статей мы разбираемся, что такое API и как использовать некоторые самые распространенные API, которые вам встретятся при разработке.
    +
    Когда вы пишите клиент веб-сайтов или приложений на JavaScript, вы не далеко уйдёте без использования API – интерфейсов для взаимодействия с браузером и операционной системой, на которой запущен сайт, или даже для операций с данными, полученными от других веб-сайтов и сервисов. В этом цикле статей мы разбираемся, что такое API и как использовать некоторые самые распространённые API, которые вам встретятся при разработке.

    Руководство по JavaScript

    diff --git a/files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html b/files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html index bf82041c88..5ed538ca47 100644 --- a/files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html +++ b/files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html @@ -21,7 +21,7 @@ translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain

    Наследование свойств

    Объекты в JavaScript — динамические "контейнеры", наполненные свойствами (называемыми собственными свойствами). Каждый объект содержит ссылку на свой объект-прототип.
    - При попытке получить доступ к какому-либо свойству объекта, свойство вначале ищется в самом объекте, затем в прототипе объекта, после чего в прототипе прототипа, и так далее. Поиск ведется до тех пор, пока не найдено свойство с совпадающим именем или не достигнут конец цепочки прототипов.

    + При попытке получить доступ к какому-либо свойству объекта, свойство вначале ищется в самом объекте, затем в прототипе объекта, после чего в прототипе прототипа, и так далее. Поиск ведётся до тех пор, пока не найдено свойство с совпадающим именем или не достигнут конец цепочки прототипов.

    // В этом примере someObject.[[Prototype]] означает прототип someObject.
     // Это упрощённая нотация (описанная в стандарте ECMAScript).
    @@ -209,7 +209,7 @@ var square = new Square(2);

    Одной из частых ошибок является расширение Object.prototype или других базовых прототипов.

    -

    Такой подход называется monkey patching и нарушает принцип инкапсуляции. Несмотря на то, что ранее он использовался в таких широко распространенных фреймворках, как например, Prototype.js, в настоящее время не существует разумных причин для его использования, поскольку в данном случае встроенные типы "захламляются" дополнительной нестандартной функциональностью.

    +

    Такой подход называется monkey patching и нарушает принцип инкапсуляции. Несмотря на то, что ранее он использовался в таких широко распространённых фреймворках, как например, Prototype.js, в настоящее время не существует разумных причин для его использования, поскольку в данном случае встроенные типы "захламляются" дополнительной нестандартной функциональностью.

    Единственным оправданием расширения базовых прототипов могут являться лишь полифилы - эмуляторы новой функциональности (например, Array.forEach) для не поддерживающих её реализаций языка в старых веб-браузерах.

    diff --git a/files/ru/web/javascript/javascript_technologies_overview/index.html b/files/ru/web/javascript/javascript_technologies_overview/index.html index 8402d6cecb..70b2b62064 100644 --- a/files/ru/web/javascript/javascript_technologies_overview/index.html +++ b/files/ru/web/javascript/javascript_technologies_overview/index.html @@ -7,7 +7,7 @@ translation_of: Web/JavaScript/JavaScript_technologies_overview

    Введение

    -

    Если HTML определяет структуру и контент веб-страницы, а CSS задает формат и внешний вид, то JavaScript добавляет интерактивность и создает богатые веб-приложения. 

    +

    Если HTML определяет структуру и контент веб-страницы, а CSS задаёт формат и внешний вид, то JavaScript добавляет интерактивность и создаёт богатые веб-приложения. 

    Однако, под общим термином "JavaScript", в контексте веб-браузера, понимаются несколько очень разных вещей. Одна из них - это базовый язык программирования (ECMAScript), а другая - коллекция Web APIs, включая DOM (Объектно-ориентированная модель документа).

    @@ -33,7 +33,7 @@ translation_of: Web/JavaScript/JavaScript_technologies_overview

    Браузерная поддержка

    -

    На октябрь 2016, текущие версии основы веб-браузеров включали ECMAScript 5.1 и ECMAScript 2015, но более старые версии (все еще находящиеся в использовании) реализуют только ECMAScript 5.

    +

    На октябрь 2016, текущие версии основы веб-браузеров включали ECMAScript 5.1 и ECMAScript 2015, но более старые версии (все ещё находящиеся в использовании) реализуют только ECMAScript 5.

    Будущее

    @@ -41,7 +41,7 @@ translation_of: Web/JavaScript/JavaScript_technologies_overview

    API по интернационализации

    -

    Спецификация ECMAScript для API по интернационализации - дополнение к языковой спецификации ECMAScript, также стандартизированной Ecma TC39. API по интернационализации обеспечивает сопоставление (строковое сравнение), форматирование чисел, дат и времени для приложений на JavaScript, позволяя выбирать язык и проектировать функционал в зависимости от нужд. Начальный стандарт был одобрен в декабре 2012; статус реализации в браузерах ведется в документации Intl object. Спецификация по интернационализации сейчас также утверждается на ежегодной основе, и браузеры постоянно улучшают ее реализацию.

    +

    Спецификация ECMAScript для API по интернационализации - дополнение к языковой спецификации ECMAScript, также стандартизированной Ecma TC39. API по интернационализации обеспечивает сопоставление (строковое сравнение), форматирование чисел, дат и времени для приложений на JavaScript, позволяя выбирать язык и проектировать функционал в зависимости от нужд. Начальный стандарт был одобрен в декабре 2012; статус реализации в браузерах ведётся в документации Intl object. Спецификация по интернационализации сейчас также утверждается на ежегодной основе, и браузеры постоянно улучшают её реализацию.

    DOM APIs

    @@ -55,15 +55,15 @@ translation_of: Web/JavaScript/JavaScript_technologies_overview
    • Структуру документа, древовидную модель, и архитектуру событий DOM в ядре DOMNodeElementDocumentFragmentDocumentDOMImplementationEventEventTarget, …
    • -
    • Менее строгое определение архитектуры событий DOM, также как и определенные события DOM.
    • +
    • Менее строгое определение архитектуры событий DOM, также как и определённые события DOM.
    • Другие вещи, такие как DOM Traversal и DOM Range.
    -

    С точки зрения ECMAScript, объекты определенные в спецификации DOM называются объектами среды исполнения ("host objects").

    +

    С точки зрения ECMAScript, объекты определённые в спецификации DOM называются объектами среды исполнения ("host objects").

    HTML DOM

    -

    HTML, это язык разметки Web, который определен в терминах DOM/ is specified in terms of the DOM. Layered above the abstract concepts defined in DOM Core, HTML also defines the meaning of elements. The HTML DOM includes such things as the className property on HTML elements, or APIs such as {{ domxref("document.body") }}.

    +

    HTML, это язык разметки Web, который определён в терминах DOM/ is specified in terms of the DOM. Layered above the abstract concepts defined in DOM Core, HTML also defines the meaning of elements. The HTML DOM includes such things as the className property on HTML elements, or APIs such as {{ domxref("document.body") }}.

    The HTML specification also defines restrictions on documents; for example, it requires all children of a ul element, which represents an unordered list, to be li elements, as those represent list items. In general, it also forbids using elements and attributes that aren't defined in a standard.

    @@ -82,4 +82,4 @@ translation_of: Web/JavaScript/JavaScript_technologies_overview

    Каждый разработчик сталкивавшийся с DOM понимает как там все безнадёжно. Реализация той иной функциональности может отличаться, а следовательно и поведение. Главной причиной этого послужило то, что само описание спецификации DOM, было недостаточно ясным и подробным для разработчиков браузеров. Кроме того разные производители браузеров добавили несовместимые функциональности в своих браузеры или функциональности перекрывающие друг друга (например модель событий в IE). В данный момент консорциум W3C и частично WHATWG пытаются описать детально поведение тех или иных функций, чтобы улучшить совместимость между браузерами. Следуя этой тенденции, можно надеяться что браузеры улучшат свои реализации основываясь на этих спецификациях.

    -

    Наиболее общий, но возможно не самый надежный способ улучшить кроссбраузерную совместимость это воспользоваться библиотеками JavaScript. Эти библиотеки абстрагируют вас от особенностей реализации DOM в том или ином браузере, и гарантируют, что их API работает одинаково в разных браузерах. Наиболее распространенные из них это jQuery и prototype.

    +

    Наиболее общий, но возможно не самый надёжный способ улучшить кроссбраузерную совместимость это воспользоваться библиотеками JavaScript. Эти библиотеки абстрагируют вас от особенностей реализации DOM в том или ином браузере, и гарантируют, что их API работает одинаково в разных браузерах. Наиболее распространённые из них это jQuery и prototype.

    diff --git a/files/ru/web/javascript/language_resources/index.html b/files/ru/web/javascript/language_resources/index.html index e96654a789..8d223226ca 100644 --- a/files/ru/web/javascript/language_resources/index.html +++ b/files/ru/web/javascript/language_resources/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Language_Resources ---

    {{JsSidebar}}

    -

    ECMAScript это язык программирования лежащий в основе JavaScript. ECMAScript стандартизирован в спецификации ECMA-262, организацией по стандартам Ecma International . Далее в таблице перечислены утвержденные стандарты ECMAScript:

    +

    ECMAScript это язык программирования лежащий в основе JavaScript. ECMAScript стандартизирован в спецификации ECMA-262, организацией по стандартам Ecma International . Далее в таблице перечислены утверждённые стандарты ECMAScript:

    Table 4.3 Результаты выполнения регулярного выражения
    myRe lastIndexИндекс с которого начнется след. поиск совпадения. (Это свойство определяется только если регулярное выражение использует параметр g, описанный в {{ web.link("#Advanced_Searching_With_Flags", "Advanced Searching With Flags") }}.)Индекс с которого начнётся след. поиск совпадения. (Это свойство определяется только если регулярное выражение использует параметр g, описанный в {{ web.link("#Advanced_Searching_With_Flags", "Advanced Searching With Flags") }}.) 5
    {{jsxref("String.fromCharCode", "fromCharCode")}}, {{jsxref("String.fromCodePoint", "fromCodePoint")}}Создает строку из указанной последовательности Unicode значений. Это метод класса String, а не отдельного экземпляра этого класса.Создаёт строку из указанной последовательности Unicode значений. Это метод класса String, а не отдельного экземпляра этого класса.
    {{jsxref("String.split", "split")}}
    @@ -59,7 +59,7 @@ translation_of: Web/JavaScript/Language_Resources
    -

    Узнать больше о истории ECMAScript можно на странице википедии посвященной ECMAScript.

    +

    Узнать больше о истории ECMAScript можно на странице википедии посвящённой ECMAScript.

    Вы можете принять участие или просто отслеживать работу над следующей версией стандарта, которая разрабатывается под кодовым названием"Harmony", с помощью публично-доступного вики и es-discuss список рассылки привязанного к ecmascript.org.

    @@ -75,7 +75,7 @@ translation_of: Web/JavaScript/Language_Resources

    Смотри также

    diff --git a/files/ru/web/javascript/memory_management/index.html b/files/ru/web/javascript/memory_management/index.html index bcdf39cd3d..79aafad29e 100644 --- a/files/ru/web/javascript/memory_management/index.html +++ b/files/ru/web/javascript/memory_management/index.html @@ -7,7 +7,7 @@ translation_of: Web/JavaScript/Memory_Management

    Введение

    -

    Низкоуровневые языки программирования (например, C) имеют низкоуровневые примитивы для управления памятью, такие как malloc() и free(). В JavaScript же память выделяется динамически при создании сущностей (т.е., объектов, строк и т.п.) и "автоматически" освобождается, когда они больше не используются. Последний процесс называется сборкой мусора . Слово "автоматически" является источником путаницы и зачастую создает у программистов на JavaScript (и других высокоуровневых языках) ложное ощущение, что они могут не заботиться об управлении памятью.

    +

    Низкоуровневые языки программирования (например, C) имеют низкоуровневые примитивы для управления памятью, такие как malloc() и free(). В JavaScript же память выделяется динамически при создании сущностей (т.е., объектов, строк и т.п.) и "автоматически" освобождается, когда они больше не используются. Последний процесс называется сборкой мусора . Слово "автоматически" является источником путаницы и зачастую создаёт у программистов на JavaScript (и других высокоуровневых языках) ложное ощущение, что они могут не заботиться об управлении памятью.

    Жизненный цикл памяти

    diff --git a/files/ru/web/javascript/reference/classes/constructor/index.html b/files/ru/web/javascript/reference/classes/constructor/index.html index 7d7fe14e82..ea52fc5371 100644 --- a/files/ru/web/javascript/reference/classes/constructor/index.html +++ b/files/ru/web/javascript/reference/classes/constructor/index.html @@ -70,7 +70,7 @@ try {

    ValidationError классу не нужен явный (explicit) конструктор, потому что не требуется инициализация. Затем конструктор по умолчанию позаботится о инициализации родительского класса Error переданным ему аргументом.

    -

    Однако, если определен ваш собственный конструктор и ваш класс является производным от какого-либо родительского класса, то вы должны явно объявить конструктор родительского класса, используя super. К примеру:

    +

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

    class ValidationError extends Error {
     
    @@ -109,7 +109,7 @@ try {
     
    class Square extends Polygon {
       constructor(length) {
         // Здесь вызывается конструктор родительского класса,
    -    // в который передается length в качестве аргументов,
    +    // в который передаётся length в качестве аргументов,
         // соответствующим полям width и height класса Polygon
         super(length, length);
         // Заметка: В производном классе, super() должен вызываться перед тем как
    @@ -152,7 +152,7 @@ console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //
     let newInstance = new Square();
     console.log(newInstance.name); //Polygon
    -

    Здесь прототип Square класса изменен, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square.

    +

    Здесь прототип Square класса изменён, но в то же время constructor предыдущего базового класса Polygon вызывается при создании нового экземпляра Square.

    Constructors по умолчанию.

    @@ -190,7 +190,7 @@ console.log(newInstance.name); //Polygon

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

    - +

    {{Compat("javascript.classes.constructor")}}

    diff --git a/files/ru/web/javascript/reference/classes/extends/index.html b/files/ru/web/javascript/reference/classes/extends/index.html index df642e9e23..d774cc72b0 100644 --- a/files/ru/web/javascript/reference/classes/extends/index.html +++ b/files/ru/web/javascript/reference/classes/extends/index.html @@ -30,7 +30,7 @@ translation_of: Web/JavaScript/Reference/Classes/extends
    class Square extends Polygon {
       constructor(length) {
         // Здесь вызывается конструктор родительского класса,
    -    // в который передается свойство length в качестве
    +    // в который передаётся свойство length в качестве
         // аргументов, соответствующих полям width и height,
         // класса Polygon
         super(length, length);
    diff --git a/files/ru/web/javascript/reference/classes/index.html b/files/ru/web/javascript/reference/classes/index.html
    index 8711331ffc..8b64f585f0 100644
    --- a/files/ru/web/javascript/reference/classes/index.html
    +++ b/files/ru/web/javascript/reference/classes/index.html
    @@ -68,7 +68,7 @@ console.log(Rectangle.name);
     
     

    Тело класса и задание методов

    -

    Тело класса — это часть кода, заключенная в фигурные скобки {}. Здесь вы можете объявлять члены класса, такие как методы и конструктор.

    +

    Тело класса — это часть кода, заключённая в фигурные скобки {}. Здесь вы можете объявлять члены класса, такие как методы и конструктор.

    Строгий режим

    @@ -154,7 +154,7 @@ Animal.eat() // класс Animal let eat = Animal.eat; eat(); // undefined
    -

    Если мы напишем этот же код используя классы основанные на функциях, тогда произойдет автоупаковка основанная на значении this, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдет - значение this останется прежним.

    +

    Если мы напишем этот же код используя классы основанные на функциях, тогда произойдёт автоупаковка основанная на значении this, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдёт - значение this останется прежним.

    function Animal() { }
     
    @@ -199,7 +199,7 @@ Rectangle.prototype.prototypeWidth = 25;
     
     

    Публичные поля

    -

    Используя Javascript синтаксис определения полей, приведенный выше пример может быть изменен следующим образом:

    +

    Используя Javascript синтаксис определения полей, приведённый выше пример может быть изменён следующим образом:

    class Rectangle {
       height = 0;
    @@ -216,7 +216,7 @@ Rectangle.prototype.prototypeWidth = 25;
     
     

    Приватные поля

    -

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

    +

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

    class Rectangle {
       #height = 0;
    @@ -233,7 +233,7 @@ Rectangle.prototype.prototypeWidth = 25;
     

    Приватные поля могут быть объявлены только заранее в объявлении поля.

    -

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

    +

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

    Более подробно об этом написано в Приватные поля класса.

    @@ -247,13 +247,13 @@ Rectangle.prototype.prototypeWidth = 25; }
    speak() { - console.log(`${this.name} издает звук.`); + console.log(`${this.name} издаёт звук.`); } } class Dog extends Animal { constructor(name) { -  super(name); // вызывает конструктор super класса и передает параметр name +  super(name); // вызывает конструктор super класса и передаёт параметр name }   speak() { @@ -272,7 +272,7 @@ d.speak(); // Митци лает
    this.name = name; } Animal.prototype.speak = function () { - console.log(
    `${this.name} издает звук.`); + console.log(`${this.name} издаёт звук.`); } class Dog extends Animal { @@ -290,7 +290,7 @@ d.speak(); // Митци лает
    var Animal = {
       speak() {
    -    console.log(`${this.name} издает звук.`);
    +    console.log(`${this.name} издаёт звук.`);
       }
     };
     
    @@ -304,7 +304,7 @@ class Dog {
     Object.setPrototypeOf(Dog.prototype, Animal);
     
     let d = new Dog('Митци');
    -d.speak(); // Митци издает звук.
    +d.speak(); // Митци издаёт звук.

    Species

    @@ -332,7 +332,7 @@ console.log(mapped instanceof Array); // true
    } speak() { - console.log(`${this.name} издает звук.`); + console.log(`${this.name} издаёт звук.`); } } @@ -345,7 +345,7 @@ class Lion extends Cat { let l = new Lion('Фаззи'); l.speak(); -// Фаззи издает звук. +// Фаззи издаёт звук. // Фаззи рычит. @@ -396,7 +396,7 @@ class Bar extends calculatorMixin(randomizerMixin(Foo)) { }

    Повторное определение класа

    -

    Класс не может быть переопределен. Попытка этого приведет к SyntaxError .

    +

    Класс не может быть переопределён. Попытка этого приведёт к SyntaxError .

    Если мы запускаете код в веб браузере, к примеру в Firefox Web Console (Tools > Web Developer > Web Console) и вы используете ('Run') определение класса с одним и тем же именем дважды, вы получите SyntaxError: redeclaration of let ClassName;. (Обсуждение по ошибке можно посмотреть в {{Bug(1428672)}}.) Chrome Developer Tools возвращает сообщение типа Uncaught SyntaxError: Identifier 'ClassName' has already been declared at <anonymous>:1:1.

    diff --git a/files/ru/web/javascript/reference/classes/private_class_fields/index.html b/files/ru/web/javascript/reference/classes/private_class_fields/index.html index 78a5d91787..e81a71e738 100644 --- a/files/ru/web/javascript/reference/classes/private_class_fields/index.html +++ b/files/ru/web/javascript/reference/classes/private_class_fields/index.html @@ -31,7 +31,7 @@ class ClassWithPrivateStaticField {

    Приватные поля доступны в конструкторе класса изнутри самой декларации класса.

    -

    Ограничение статических переменных, вызываемых только статическими методами, все еще сохраняется.

    +

    Ограничение статических переменных, вызываемых только статическими методами, все ещё сохраняется.

    class ClassWithPrivateStaticField {
       static #PRIVATE_STATIC_FIELD
    @@ -139,7 +139,7 @@ console.log(Derived.publicStaticMethod2()); // TypeError
     
     

    Приватные методы экземпляров(instance)

    -

    Приватные методы экземпляров это методы, доступные у экземпляров класса, доступ к которым запрещен также, как у приватных полей класса.

    +

    Приватные методы экземпляров это методы, доступные у экземпляров класса, доступ к которым запрещён также, как у приватных полей класса.

    class ClassWithPrivateMethod {
       #privateMethod() {
    diff --git a/files/ru/web/javascript/reference/classes/public_class_fields/index.html b/files/ru/web/javascript/reference/classes/public_class_fields/index.html
    index ea67222e50..b32dc3d2fc 100644
    --- a/files/ru/web/javascript/reference/classes/public_class_fields/index.html
    +++ b/files/ru/web/javascript/reference/classes/public_class_fields/index.html
    @@ -172,7 +172,7 @@ console.log(instance.publicMethod());
     }

    Внутри методов экземпляра, this ссылается на сам экземпляр.
    - В классах наследниках, super дает доступ к прототипу базового класса, позволяя вызывать его методы.

    + В классах наследниках, super даёт доступ к прототипу базового класса, позволяя вызывать его методы.

    class BaseClass {
       msg = 'hello world';
    diff --git a/files/ru/web/javascript/reference/classes/static/index.html b/files/ru/web/javascript/reference/classes/static/index.html
    index 58ea5996c1..f97c9db2f3 100644
    --- a/files/ru/web/javascript/reference/classes/static/index.html
    +++ b/files/ru/web/javascript/reference/classes/static/index.html
    @@ -116,7 +116,7 @@ console.log(tp.triple());
     
     

    Поддержка в браузерах

    - +

    {{Compat("javascript.classes.static")}}

    diff --git a/files/ru/web/javascript/reference/errors/already_has_pragma/index.html b/files/ru/web/javascript/reference/errors/already_has_pragma/index.html index 5de1095a97..e976c9a07d 100644 --- a/files/ru/web/javascript/reference/errors/already_has_pragma/index.html +++ b/files/ru/web/javascript/reference/errors/already_has_pragma/index.html @@ -22,7 +22,7 @@ translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma

    Для данного источника JavaScript исходная карта была указана несколько раз.

    -

    Источники JavaScript часто объединяются и минимизируются, чтобы сделать их доставку с сервера более эффективной. С помощью сопоставлений исходного кода отладчик может сопоставить выполняемый код с исходными файлами. Существует два способа назначения исходной карты: с помощью комментария или путем установки заголовка для файла JavaScript.

    +

    Источники JavaScript часто объединяются и минимизируются, чтобы сделать их доставку с сервера более эффективной. С помощью сопоставлений исходного кода отладчик может сопоставить выполняемый код с исходными файлами. Существует два способа назначения исходной карты: с помощью комментария или путём установки заголовка для файла JavaScript.

     

    diff --git a/files/ru/web/javascript/reference/errors/bad_radix/index.html b/files/ru/web/javascript/reference/errors/bad_radix/index.html index b3e84de1e7..c4cc82a20b 100644 --- a/files/ru/web/javascript/reference/errors/bad_radix/index.html +++ b/files/ru/web/javascript/reference/errors/bad_radix/index.html @@ -25,7 +25,7 @@ RangeError: toString() radix argument must be between 2 and 36 (Chrome)

    Почему значение этого параметра не может быть больше, чем 36? Для оснований, превышающих 10, в качестве цифр используются алфавитные символы; следовательно, основание не может быть больше 36, поскольку в латинском алфавите (используемом английским и многими другими языками) только 26 символов.

    -

    Наиболее распространенные основания систем счисления:

    +

    Наиболее распространённые основания систем счисления:

    • 2 для двоичных чисел,
    • diff --git a/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html index 549b5ae654..c5c63a7200 100644 --- a/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html +++ b/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html @@ -17,7 +17,7 @@ SyntaxError: Invalid regular expression flags (Chrome)

      Что пошло не так?

      -

      В коде есть недопустимые флаги регулярных выражений. Литерал в регулярном выражении, который содержит шаблон заключенный между двумя слешами, флаги определяются после второго флага. Они также могут быть объявлены в конструкторе функции {{jsxref("RegExp")}} object (второй параметр). Флаги регулярного выражения могут быть использованы отдельно или вместе в любой очередности, но в ECMAScript их только пять.

      +

      В коде есть недопустимые флаги регулярных выражений. Литерал в регулярном выражении, который содержит шаблон заключённый между двумя слешами, флаги определяются после второго флага. Они также могут быть объявлены в конструкторе функции {{jsxref("RegExp")}} object (второй параметр). Флаги регулярного выражения могут быть использованы отдельно или вместе в любой очерёдности, но в ECMAScript их только пять.

      Чтоб включить флаг в регулярное выражение, используйте синтаксис:

      diff --git a/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html b/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html index dd69cb3167..17a6e16436 100644 --- a/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html +++ b/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html @@ -22,7 +22,7 @@ SyntaxError: yield not in function (Firefox)

      Что пошло не так?

      -

      Вызов оператора return или yield был осуществлен вне функции. Может, где-то пропущена фигурная скобка? Операторы return и yield не могут существовать вне функции, поскольку они завершают (или останавливают и возобновляют) её исполнение и указывают значение, возвращаемое в место, откуда она была вызвана.

      +

      Вызов оператора return или yield был осуществлён вне функции. Может, где-то пропущена фигурная скобка? Операторы return и yield не могут существовать вне функции, поскольку они завершают (или останавливают и возобновляют) её исполнение и указывают значение, возвращаемое в место, откуда она была вызвана.

      Примеры

      diff --git a/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html b/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html index 0d309530e6..9c1182eb7c 100644 --- a/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html +++ b/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html @@ -12,7 +12,7 @@ translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type
      TypeError: 'this' не является  Set объектом (EdgE)
       TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox)
       TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox)
      -TypeError: Метод Set.prototype.add called вызывается несовместимый приемник undefined (Chrome)
      +TypeError: Метод Set.prototype.add called вызывается несовместимый приёмник undefined (Chrome)
       TypeError: Bind должен вызываться для функции(Chrome)
       
      diff --git a/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html b/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html index e5c0553e8a..294f115dac 100644 --- a/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html +++ b/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html @@ -21,7 +21,7 @@ ReferenceError: 'x' is not defined (Chrome)

      Что случилось?

      -

      Попытка доступа к лексической переменной до ее инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов let или const до того, как им было присвоено значение.

      +

      Попытка доступа к лексической переменной до её инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов let или const до того, как им было присвоено значение.

      Примеры

      diff --git a/files/ru/web/javascript/reference/errors/cant_access_property/index.html b/files/ru/web/javascript/reference/errors/cant_access_property/index.html index df4ab49b2a..01d353480c 100644 --- a/files/ru/web/javascript/reference/errors/cant_access_property/index.html +++ b/files/ru/web/javascript/reference/errors/cant_access_property/index.html @@ -1,6 +1,6 @@ --- title: >- - TypeError: can't access property "x" of "y"(Тип ошибки: не удается получить + TypeError: can't access property "x" of "y"(Тип ошибки: не удаётся получить доступ к свойству "x" из "y") slug: Web/JavaScript/Reference/Errors/Cant_access_property translation_of: Web/JavaScript/Reference/Errors/Cant_access_property @@ -9,16 +9,16 @@ translation_of: Web/JavaScript/Reference/Errors/Cant_access_property

      Message

      -
      TypeError: не удается получить свойство {x} неопределенной или нулевой ссылки (Edge)
      -TypeError: не удается получить доступ к свойству {x} of {y} (Firefox)
      -TypeError: {y} не определен, не может получить доступ к свойству {x} (Firefox)
      +
      TypeError: не удаётся получить свойство {x} неопределённой или нулевой ссылки (Edge)
      +TypeError: не удаётся получить доступ к свойству {x} of {y} (Firefox)
      +TypeError: {y} не определён, не может получить доступ к свойству {x} (Firefox)
       TypeError: {y} имеет значение null, не может получить доступ к свойству {x} (Firefox)
       
       Образцы:
      -TypeError: x не определен, не может получить доступ к свойству "prop"
      +TypeError: x не определён, не может получить доступ к свойству "prop"
       TypeError: x имеет значение null, не может получить доступ к свойству "prop"
      -TypeError: не удается получить доступ к свойству "prop" неопределенного
      -TypeError: не удается получить доступ к свойству "prop" значения null
      +TypeError: не удаётся получить доступ к свойству "prop" неопределённого
      +TypeError: не удаётся получить доступ к свойству "prop" значения null
       
       
      @@ -36,7 +36,7 @@ TypeError: не удается получить доступ к свойству
      // undefined and null cases on which the substring method won't work
       var foo = undefined;
      -foo.substring(1); // TypeError: x не определен, не может получить доступ к свойству substring
      +foo.substring(1); // TypeError: x не определён, не может получить доступ к свойству substring
       
       var foo = null;
       foo.substring(1); // TypeError: x имеет значение null, не может получить доступ к свойству substring
      @@ -44,10 +44,10 @@ foo.substring(1); // TypeError: x имеет значение null, не мож
       
       

      Исправление проблемы

      -

      Чтобы исправить указатель null на неопределенные или нулевые значения, можно использовать оператор typeof, например.

      +

      Чтобы исправить указатель null на неопределённые или нулевые значения, можно использовать оператор typeof, например.

      if (typeof foo !== 'undefined') {
      -  // Теперь мы знаем, что foo определен.
      +  // Теперь мы знаем, что foo определён.
       }

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

      diff --git a/files/ru/web/javascript/reference/errors/cant_delete/index.html b/files/ru/web/javascript/reference/errors/cant_delete/index.html index 88dd78272d..ecdfb8cc30 100644 --- a/files/ru/web/javascript/reference/errors/cant_delete/index.html +++ b/files/ru/web/javascript/reference/errors/cant_delete/index.html @@ -9,9 +9,9 @@ translation_of: Web/JavaScript/Reference/Errors/Cant_delete

      Сообщение

      -
      TypeError: вызов delete на 'x' не разрешен в строгом режиме (Edge)
      +
      TypeError: вызов delete на 'x' не разрешён в строгом режиме (Edge)
       TypeError: свойство "x" не настраивается и не может быть удалено. (браузер Firefox)
      -TypeError: не удается удалить свойство "x" из #<Object> (Chrome)
      +TypeError: не удаётся удалить свойство "x" из #<Object> (Chrome)
       

      Тип ошибки

      diff --git a/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html b/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html index f164596b55..caf464a65f 100644 --- a/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html +++ b/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html @@ -1,6 +1,6 @@ --- title: >- - TypeError: can't redefine non-configurable property "x"(Тип ошибки: не удается + TypeError: can't redefine non-configurable property "x"(Тип ошибки: не удаётся переопределить настраиваемое свойство "x") slug: Web/JavaScript/Reference/Errors/Cant_redefine_property translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property
      TypeError: невозможно изменить свойство, недоступное для записи {x} (Edge)
       TypeError: невозможно переопределить не настраиваемое свойство "x" (Firefox)
      -TypeError: не удается переопределить свойство: "x" (Chrome)
      +TypeError: не удаётся переопределить свойство: "x" (Chrome)
       

      Тип ошибки 

      @@ -26,13 +26,13 @@ TypeError: не удается переопределить свойство: "x

      Не настраиваемые свойства, созданные Object.defineProperty

      -

      The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства, если они не указаны как настраиваемые.

      +

      The {{jsxref("Object.defineProperty()")}} создаёт не настраиваемые свойства, если они не указаны как настраиваемые.

      var obj = Object.create({});
       Object.defineProperty(obj, "foo", {value: "bar"});
       
       Object.defineProperty(obj, "foo", {value: "baz"});
      -// TypeError: не удается переопределить не настраиваемое свойство "foo"
      +// TypeError: не удаётся переопределить не настраиваемое свойство "foo"
       

      Вам нужно будет установить свойство "foo" в конфигурируемое, если вы собираетесь переопределить его позже в коде.

      diff --git a/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html index cfbf6eb56c..7eecd4634b 100644 --- a/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html +++ b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html @@ -66,5 +66,5 @@ JSON.stringify(circularReference, getCircularReplacer());
      • {{jsxref("JSON.stringify")}}
      • -
      • cycle.js – вводит две функции, JSON.decycle и JSON.retrocycle, что дает возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.
      • +
      • cycle.js – вводит две функции, JSON.decycle и JSON.retrocycle, что даёт возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.
      diff --git a/files/ru/web/javascript/reference/errors/dead_object/index.html b/files/ru/web/javascript/reference/errors/dead_object/index.html index de666b01d8..7ce56344d0 100644 --- a/files/ru/web/javascript/reference/errors/dead_object/index.html +++ b/files/ru/web/javascript/reference/errors/dead_object/index.html @@ -1,7 +1,7 @@ --- title: >- - TypeError: can't access dead object (Тип ошибки:не удается получить доступ к - мертвому объекту) + TypeError: can't access dead object (Тип ошибки:не удаётся получить доступ к + мёртвому объекту) slug: Web/JavaScript/Reference/Errors/Dead_object translation_of: Web/JavaScript/Reference/Errors/Dead_object --- @@ -18,9 +18,9 @@ translation_of: Web/JavaScript/Reference/Errors/Dead_object

      Что не так?

      -

      Для улучшения использования памяти и предотвращения утечек памяти Firefox запрещает надстройкам сохранять строгие ссылки на объекты DOM после уничтожения родительского документа. Мертвый объект содержит сильную ссылку (keep alive) на элемент DOM, который сохраняется даже после того, как он был уничтожен в DOM. Чтобы избежать этих проблем, ссылки на узлы DOM во внешнем документе должны храниться в объекте, который относится к этому документу, и очищаться при выгрузке документа или храниться как слабые ссылки.

      +

      Для улучшения использования памяти и предотвращения утечек памяти Firefox запрещает надстройкам сохранять строгие ссылки на объекты DOM после уничтожения родительского документа. Мёртвый объект содержит сильную ссылку (keep alive) на элемент DOM, который сохраняется даже после того, как он был уничтожен в DOM. Чтобы избежать этих проблем, ссылки на узлы DOM во внешнем документе должны храниться в объекте, который относится к этому документу, и очищаться при выгрузке документа или храниться как слабые ссылки.

      -

      Проверка, если объект мертв

      +

      Проверка, если объект мёртв

      Components.utils предлагает isDeadWrapper()метод, который может использовать привилегированный код. 
       

      @@ -41,8 +41,8 @@ catch (e) {

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

      diff --git a/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html b/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html index ed6a768e94..06f348e5b2 100644 --- a/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html +++ b/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html @@ -10,7 +10,7 @@ translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode

      Сообщение

      -
      SyntaxError: вызов delete on expression запрещен в строгом режиме в (Edge)
      +
      SyntaxError: вызов delete on expression запрещён в строгом режиме в (Edge)
       SyntaxError: применение оператора 'delete' к неполному имени не рекомендуется в (Firefox)
       SyntaxError: удаление неполного идентификатора в строгом режиме запрещено в (Chrome)
       
      @@ -33,7 +33,7 @@ SyntaxError: удаление неполного идентификатора в

      Примеры

      -

      Попытка удалить простую переменную не работает в JavaScript и выдает ошибку в строгом режиме:

      +

      Попытка удалить простую переменную не работает в JavaScript и выдаёт ошибку в строгом режиме:

      'use strict';
       
      @@ -46,7 +46,7 @@ delete x;
       // SyntaxError: применение оператора 'delete' к неполному имени является устаревшим
       
      -

      Чтобы освободить содержимое переменной, задайте для нее значение {{jsxref("null")}}:

      +

      Чтобы освободить содержимое переменной, задайте для неё значение {{jsxref("null")}}:

      'use strict';
       
      diff --git a/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html b/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html
      index 7e89e085df..1e5ea400a1 100644
      --- a/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html
      +++ b/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html
      @@ -19,7 +19,7 @@ translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures
       
       

      Что пошло не так?

      -

      Нестандартный синтаксис закрытия выражений (сокращенный синтаксис функций) устарел и больше не должен использоваться. Этот синтаксис будет полностью удален в Этот синтаксис будет полностью удален в {{bug(1083458)}} а скрипты с его помощью {{jsxref("SyntaxError")}} затем.

      +

      Нестандартный синтаксис закрытия выражений (сокращённый синтаксис функций) устарел и больше не должен использоваться. Этот синтаксис будет полностью удалён в Этот синтаксис будет полностью удалён в {{bug(1083458)}} а скрипты с его помощью {{jsxref("SyntaxError")}} затем.

      Примеры

      @@ -49,7 +49,7 @@ var obj = {
      var x = () => 1;
      -

      Стандартный синтаксис с использованием сокращенного синтаксиса метода

      +

      Стандартный синтаксис с использованием сокращённого синтаксиса метода

      Замыкания выражений также можно найти с помощью getter'а и setter'а, например:

      diff --git a/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html b/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html index 9bfa3ffb6c..84c437a28d 100644 --- a/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html +++ b/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics ---
      {{jsSidebar("Errors")}}
      -
      Поддержка строковых обобщенных методов прекращена с версии Firefox 68. Более старые версии предупреждают об использовании данных методов следующим образом:
      +
      Поддержка строковых обобщённых методов прекращена с версии Firefox 68. Более старые версии предупреждают об использовании данных методов следующим образом:

      Сообщение

      @@ -45,7 +45,7 @@ Warning: String.trimRight is deprecated; use String.prototype.trimRight

      Что пошло не так?

      -

      Нестандартные обобщенные методы {{jsxref("String")}} являются устаревшими, поддержка в Firefox прекращена, начиная с версии 68. Строковые обобщенные методы предоставляют возможность применять методы экземпляров String к любым объектам.

      +

      Нестандартные обобщённые методы {{jsxref("String")}} являются устаревшими, поддержка в Firefox прекращена, начиная с версии 68. Строковые обобщённые методы предоставляют возможность применять методы экземпляров String к любым объектам.

      Примеры

      @@ -62,7 +62,7 @@ String(num).replace(/5/, '2');

      Прослойка

      -

      Ниже приведен код прослойки, с помощью которой можно добавить поддержку обобщенных методов String в другие браузеры:

      +

      Ниже приведён код прослойки, с помощью которой можно добавить поддержку обобщённых методов String в другие браузеры:

      /*globals define*/
       // Предполагаем, что все требуемые методы экземпляров String уже присутствуют
      diff --git a/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html
      index c90ca639e7..e843b0c45f 100644
      --- a/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html
      +++ b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html
      @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat
       
       

      Неправильный синтаксис

      -

      В {{jsxref("Date.prototype.toLocaleFormat")}} метод устарел и будет удален (поддержка кроссбраузерных браузеров, доступна только в Firefox).

      +

      В {{jsxref("Date.prototype.toLocaleFormat")}} метод устарел и будет удалён (поддержка кроссбраузерных браузеров, доступна только в Firefox).

      var today = new Date();
       var date = today.toLocaleFormat('%A, %e. %B %Y');
      @@ -34,7 +34,7 @@ console.log(date);
       
       

      Альтернативный стандартный синтаксис с использованием ECMAScript IntlAPI

      -

      Стандарт ECMA-402 (ECMAScript Intl API) определяет стандартные объекты и методы, которые позволяют форматировать дату и время с учетом языка (доступно в Chrome 24+, Firefox 29+, IE11+, Safari10+).

      +

      Стандарт ECMA-402 (ECMAScript Intl API) определяет стандартные объекты и методы, которые позволяют форматировать дату и время с учётом языка (доступно в Chrome 24+, Firefox 29+, IE11+, Safari10+).

      You can now either use the {{jsxref("Date.prototype.toLocaleDateString")}} method if you just want to format one date.

      diff --git a/files/ru/web/javascript/reference/errors/equal_as_assign/index.html b/files/ru/web/javascript/reference/errors/equal_as_assign/index.html index 4219e825ba..1bea6c1135 100644 --- a/files/ru/web/javascript/reference/errors/equal_as_assign/index.html +++ b/files/ru/web/javascript/reference/errors/equal_as_assign/index.html @@ -18,7 +18,7 @@ translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign

      Что пошло не так?

      -

      Было присвоение ( = ), когда вы обычно ожидали тест на присвоение (==). Чтобы помочь отладке, JavaScript (с включенными строгими предупреждениями) предупреждает об этом шаблоне.

      +

      Было присвоение ( = ), когда вы обычно ожидали тест на присвоение (==). Чтобы помочь отладке, JavaScript (с включёнными строгими предупреждениями) предупреждает об этом шаблоне.

      Примеры

      diff --git a/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html b/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html index d9a8f5ae2c..d44d147e44 100644 --- a/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html +++ b/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html @@ -14,7 +14,7 @@ translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated

      Что пошло не так?

      -

      JavaScript 1.6's {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} оператор устарел и будет удален в ближайшем будущем.

      +

      JavaScript 1.6's {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} оператор устарел и будет удалён в ближайшем будущем.

      Примеры

      @@ -121,7 +121,7 @@ func(undefined); // prints nothing

      Неправильный синтаксис

      -

      Существует устаревшая идиома для итерации по парам ключ-значение указанного объекта с помощью {{jsxref("Statements/for_each...in", "for each...in")}} и осужденный {{jsxref("Iterator")}} объект.

      +

      Существует устаревшая идиома для итерации по парам ключ-значение указанного объекта с помощью {{jsxref("Statements/for_each...in", "for each...in")}} и осуждённый {{jsxref("Iterator")}} объект.

      var object = { a: 10, b: 20 };
       
      diff --git a/files/ru/web/javascript/reference/errors/getter_only/index.html b/files/ru/web/javascript/reference/errors/getter_only/index.html
      index 9dc64f048f..c7fd7169f9 100644
      --- a/files/ru/web/javascript/reference/errors/getter_only/index.html
      +++ b/files/ru/web/javascript/reference/errors/getter_only/index.html
      @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Errors/Getter_only
       
       
      TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
       TypeError: установка свойства только для геттера "x" (Firefox)
      -TypeError: не удается установить свойство "prop" из #<Object>, который имеет только геттер (Chrome)
      +TypeError: не удаётся установить свойство "prop" из #<Object>, который имеет только геттер (Chrome)
       
       
      @@ -25,7 +25,7 @@ TypeError: не удается установить свойство "prop" из

      Примеры

      -

      В приведенном ниже примере показано, как установить getter для свойства. Он не задает сеттер, так TypeError выдается при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в {{jsxref("Object.defineProperty()")}} странице.

      +

      В приведённом ниже примере показано, как установить getter для свойства. Он не задаёт сеттер, так TypeError выдаётся при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в {{jsxref("Object.defineProperty()")}} странице.

      "use strict";
       
      @@ -45,7 +45,7 @@ arc.temperature; // 'get!'
       arc.temperature = 30;
       // TypeError: setting getter-only property "temperature"
      -

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

      +

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

      "use strict";
       
      diff --git a/files/ru/web/javascript/reference/errors/identifier_after_number/index.html b/files/ru/web/javascript/reference/errors/identifier_after_number/index.html
      index 71cdda791f..af7eae5389 100644
      --- a/files/ru/web/javascript/reference/errors/identifier_after_number/index.html
      +++ b/files/ru/web/javascript/reference/errors/identifier_after_number/index.html
      @@ -22,9 +22,9 @@ SyntaxError: непредвиденное число (Chrome)
       
       

       

      -

      Имена переменных, называемых {{Glossary("Identifier", "identifiers")}} соответствуют определенным правилам, которых должен придерживаться ваш код!

      +

      Имена переменных, называемых {{Glossary("Identifier", "identifiers")}} соответствуют определённым правилам, которых должен придерживаться ваш код!

      -

      Идентификатор JavaScript должен начинаться с буквы, символа подчеркивания ( _ ) или знака доллара ($). Они не могут начать с цифры! Только последующие символы могут быть цифрами (0-9).

      +

      Идентификатор JavaScript должен начинаться с буквы, символа подчёркивания ( _ ) или знака доллара ($). Они не могут начать с цифры! Только последующие символы могут быть цифрами (0-9).

       

      diff --git a/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html b/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html index a61a8d5f41..9563af464e 100644 --- a/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html +++ b/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html @@ -1,6 +1,6 @@ --- title: >- - TypeError: cannot use 'in' operator to search for 'x' in 'y'(не удается + TypeError: cannot use 'in' operator to search for 'x' in 'y'(не удаётся использовать 'in' оператор поиска для 'x' в 'y') slug: Web/JavaScript/Reference/Errors/in_operator_no_object translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object @@ -43,7 +43,7 @@ TypeError: невозможно использовать оператор 'in'
      var foo = null;
       "bar" in foo;
      -// TypeError: не удается использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
      +// TypeError: не удаётся использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
       // TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox)
       
      diff --git a/files/ru/web/javascript/reference/errors/index.html b/files/ru/web/javascript/reference/errors/index.html index 21d076dbdc..41b34e5478 100644 --- a/files/ru/web/javascript/reference/errors/index.html +++ b/files/ru/web/javascript/reference/errors/index.html @@ -8,9 +8,9 @@ translation_of: Web/JavaScript/Reference/Errors ---

      {{jsSidebar("Errors")}}

      -

      Ниже, Вы найдете список ошибок, которые возвращает JavaScript. Эти ошибки могут быть полезны при отладке, но неполадки не всегда сразу понятны. Страницы ниже  предлагают дополнительную информацию об этих ошибках. Каждая ошибка это Объект на основании {{jsxref("Error")}} object, и имеет имя (name) и сообщение (message).

      +

      Ниже, Вы найдёте список ошибок, которые возвращает JavaScript. Эти ошибки могут быть полезны при отладке, но неполадки не всегда сразу понятны. Страницы ниже  предлагают дополнительную информацию об этих ошибках. Каждая ошибка это Объект на основании {{jsxref("Error")}} object, и имеет имя (name) и сообщение (message).

      -

      Ошибки отображенные в Web консоли могут содержать ссылку на соответствующую страницу ниже, чтобы помочь вам быстро понять проблему в коде.

      +

      Ошибки отображённые в Web консоли могут содержать ссылку на соответствующую страницу ниже, чтобы помочь вам быстро понять проблему в коде.

      Список ошибок

      diff --git a/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html b/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html index d658f57b73..710aa435f8 100644 --- a/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html +++ b/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html @@ -19,7 +19,7 @@ TypeError: повторное объявление const 'x' (IE)

      Что пошло не так?

      -

      Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменен путем повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.

      +

      Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменён путём повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.

      Примеры

      @@ -67,7 +67,7 @@ function setupBigScreenEnvironment() {

      const и неизменность

      -

      Объявление const создает ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все еще может быть изменен. Это означает, что нельзя изменить значение, хранящееся в переменной:

      +

      Объявление const создаёт ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все ещё может быть изменён. Это означает, что нельзя изменить значение, хранящееся в переменной:

      const obj = {foo: 'bar'};
       obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
      diff --git a/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html b/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html
      index f9e91b0a53..9f0b68e84c 100644
      --- a/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html
      +++ b/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html
      @@ -22,11 +22,11 @@ SyntaxError: объявление переменной цикла for-in мож
       
       

      Что пошло не так?

      -

      Глава цикла for...in содержит выражение инициализатора. То есть переменная объявляется и присваивается значение |for (var i = 0 in obj)|. В нестрогом режиме это объявление head игнорируется и ведет себя как |for (var i in obj)|. Однако в строгом режиме создается синтаксическая ошибка.

      +

      Глава цикла for...in содержит выражение инициализатора. То есть переменная объявляется и присваивается значение |for (var i = 0 in obj)|. В нестрогом режиме это объявление head игнорируется и ведёт себя как |for (var i in obj)|. Однако в строгом режиме создаётся синтаксическая ошибка.

      Примеры

      -

      Данный пример дает SyntaxError:

      +

      Данный пример даёт SyntaxError:

      "use strict";
       
      diff --git a/files/ru/web/javascript/reference/errors/is_not_iterable/index.html b/files/ru/web/javascript/reference/errors/is_not_iterable/index.html
      index c084aac4e3..5e2823d3c1 100644
      --- a/files/ru/web/javascript/reference/errors/is_not_iterable/index.html
      +++ b/files/ru/web/javascript/reference/errors/is_not_iterable/index.html
      @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Errors/is_not_iterable
       

      Сообщение

      TypeError: "x" не является итерационным (Firefox, Chrome)
      -TypeError: 'x' не является функцией или ее возвращаемое значение не является итерационным (Chrome)
      +TypeError: 'x' не является функцией или её возвращаемое значение не является итерационным (Chrome)
       

      Тип ошибки

      @@ -17,7 +17,7 @@ TypeError: 'x' не является функцией или ее возвращ

      Что пошло не так?

      -

      Значение, которое дается как правая сторона for...of или как аргумент функции, такой как {{jsxref("Promise.all")}} или {{jsxref("TypedArray.from")}}, не является итерационным объектом.  Повторяемое может быть, встроенный итератор типа, такие как {{jsxref("Array")}}, {{jsxref("String")}} или {{jsxref("Map")}}, генератор результатом, или объект, реализующий итератор протокол.

      +

      Значение, которое даётся как правая сторона for...of или как аргумент функции, такой как {{jsxref("Promise.all")}} или {{jsxref("TypedArray.from")}}, не является итерационным объектом.  Повторяемое может быть, встроенный итератор типа, такие как {{jsxref("Array")}}, {{jsxref("String")}} или {{jsxref("Map")}}, генератор результатом, или объект, реализующий итератор протокол.

      Примеры

      @@ -77,7 +77,7 @@ for (let x of generate) // TypeError: генерация не является console.log(x);
      -

      Если они не вызываются, то объект {{jsxref("Function")}}, соответствующий генератору, можно вызвать, но нельзя выполнить итерацию. Вызов генератора создает итерационный объект, который будет выполнять итерацию по значениям, полученным во время выполнения генератора.

      +

      Если они не вызываются, то объект {{jsxref("Function")}}, соответствующий генератору, можно вызвать, но нельзя выполнить итерацию. Вызов генератора создаёт итерационный объект, который будет выполнять итерацию по значениям, полученным во время выполнения генератора.

      function* generate(a, b) {
           yield a;
      diff --git a/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html b/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html
      index 5e65f8c633..f848e5486d 100644
      --- a/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html
      +++ b/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html
      @@ -39,7 +39,7 @@ var f = Function('x,', 'return x;');
       // SyntaxError (лишняя запятая)
       
       var f = Function(37, "alert('OK')");
      -// SyntaxError (числа не могут использоваться в качестве имен аргументов)
      +// SyntaxError (числа не могут использоваться в качестве имён аргументов)
       

      Правильный код

      diff --git a/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html b/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html index 32035a2365..12acf53f79 100644 --- a/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html +++ b/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html @@ -24,7 +24,7 @@ translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list

      Примеры

      -

      Незавершенный инициализатор массива

      +

      Незавершённый инициализатор массива

      var list = [1, 2,
       
      diff --git a/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html b/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html
      index 856d2fe526..00012ea3c4 100644
      --- a/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html
      +++ b/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html
      @@ -55,7 +55,7 @@ obj['propertyKey'] = 'value';
       
       

      Вычисляемые свойства

      -

      Если вы создаете ключ свойства из выражения, то вам необходимо использовать квадратные скобки. В противном случае имя свойства не будет вычислено:

      +

      Если вы создаёте ключ свойства из выражения, то вам необходимо использовать квадратные скобки. В противном случае имя свойства не будет вычислено:

      var obj = { 'b'+'ar': 'foo' };
       // SyntaxError: missing : after property id
      diff --git a/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html b/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html
      index 0d971440c7..0f3c17df1f 100644
      --- a/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html
      +++ b/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html
      @@ -46,12 +46,12 @@ translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_bod
         }
       };
      -

      Еще больше путаницы может внести использование {{Glossary("IIFE")}}, замыканий и прочих конструкций, где используется большое количество различных скобок:

      +

      Ещё больше путаницы может внести использование {{Glossary("IIFE")}}, замыканий и прочих конструкций, где используется большое количество различных скобок:

      (function() { if (true) { return false; } );
       
      -

      Зачастую облегчить поиск ошибок можно, проверив отступы еще раз или расставив их по-другому.

      +

      Зачастую облегчить поиск ошибок можно, проверив отступы ещё раз или расставив их по-другому.

      (function() {
         if (true) {
      diff --git a/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html
      index 1b84367f61..fd7d0ca039 100644
      --- a/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html
      +++ b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html
      @@ -20,7 +20,7 @@ translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argume
       
       

      Примеры

      -

      Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции log просто "PI: ". В этом случае, он должен быть заключен в закрывающие скобки.

      +

      Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции log просто "PI: ". В этом случае, он должен быть заключён в закрывающие скобки.

      console.log('PI: ' Math.PI);
       // SyntaxError: missing ) after argument list
      diff --git a/files/ru/web/javascript/reference/errors/no_variable_name/index.html b/files/ru/web/javascript/reference/errors/no_variable_name/index.html
      index 9ac5f9cb6e..0791d91708 100644
      --- a/files/ru/web/javascript/reference/errors/no_variable_name/index.html
      +++ b/files/ru/web/javascript/reference/errors/no_variable_name/index.html
      @@ -35,7 +35,7 @@ SyntaxError: Unexpected token = (Chrome)

      Зарезервированные ключевые слова не могут использоваться как имена переменных

      -

      Есть несколько имен, которые являются зарезервированными ключевыми словами. Их нельзя использовать. Увы :(

      +

      Есть несколько имён, которые являются зарезервированными ключевыми словами. Их нельзя использовать. Увы :(

      var debugger = "whoop";
       // SyntaxError: missing variable name
      diff --git a/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html b/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html
      index b298844d17..9f932a969a 100644
      --- a/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html
      +++ b/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html
      @@ -1,6 +1,6 @@
       ---
       title: >-
      -  TypeError: can't delete non-configurable array element(Тип ошибки:не удается
      +  TypeError: can't delete non-configurable array element(Тип ошибки:не удаётся
         удалить настраиваемый элемент массива)
       slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element
       translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element
      @@ -9,8 +9,8 @@ translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element
       
       

      Сообщения

      -
      TypeError: не удается удалить не настраиваемый элемент массива (Firefox)
      -TypeError: не удается удалить свойство '2' из [массива объектов] (Chrome)
      +
      TypeError: не удаётся удалить не настраиваемый элемент массива (Firefox)
      +TypeError: не удаётся удалить свойство '2' из [массива объектов] (Chrome)
       

      Тип ошибки

      @@ -33,14 +33,14 @@ TypeError: не удается удалить свойство '2' из [мас

      Не настраиваемые свойства, созданные Object.defineProperty

      -

      The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства по умолчанию, если они не указаны как настраиваемые.

      +

      The {{jsxref("Object.defineProperty()")}} создаёт не настраиваемые свойства по умолчанию, если они не указаны как настраиваемые.

      var arr = [];
       Object.defineProperty(arr, 0, {value: 0});
       Object.defineProperty(arr, 1, {value: "1"});
       
       arr.length = 1;
      -// TypeError: не удается удалить не настраиваемый элемент массива
      +// TypeError: не удаётся удалить не настраиваемый элемент массива
       

      Вам нужно будет установить элементы как конфигурируемые, если вы собираетесь сократить массив.

      diff --git a/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html b/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html index 0b72d6c50f..1d1decf231 100644 --- a/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html +++ b/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html @@ -18,7 +18,7 @@ RangeError: Invalid code point {0} (Chrome)

      Что пошло не так?

      -

      Метод {{jsxref("String.fromCodePoint()")}} выдает ошибку, если ему было передано значение {{jsxref("NaN")}}, отрицательное целое число (-1), нецелое число (5.4) или значение, которое превышает 0x10FFFF (1114111).

      +

      Метод {{jsxref("String.fromCodePoint()")}} выдаёт ошибку, если ему было передано значение {{jsxref("NaN")}}, отрицательное целое число (-1), нецелое число (5.4) или значение, которое превышает 0x10FFFF (1114111).

      Кодовая точка (code point) – это значение в кодовом пространстве Unicode, то есть диапазон целых чисел от 0 до 0x10FFFF.

      diff --git a/files/ru/web/javascript/reference/errors/not_a_constructor/index.html b/files/ru/web/javascript/reference/errors/not_a_constructor/index.html index e9c3aafb29..68f9144938 100644 --- a/files/ru/web/javascript/reference/errors/not_a_constructor/index.html +++ b/files/ru/web/javascript/reference/errors/not_a_constructor/index.html @@ -71,7 +71,7 @@ var obj = new f;

      В Обещаниях (Promises)

      -

      В случае, когда возвращается незамедлительно разрешенное или незамедлительно отклоненное Обещание, Вам не нужно создавать новое Обещание new Promise(...) и работать с ним.

      +

      В случае, когда возвращается незамедлительно разрешённое или незамедлительно отклонённое Обещание, Вам не нужно создавать новое Обещание new Promise(...) и работать с ним.

      Это неправильно (конструктор Обещания вызывается неправильно) и будет вызывать исключение TypeError: this is not a constructor:

      diff --git a/files/ru/web/javascript/reference/errors/not_defined/index.html b/files/ru/web/javascript/reference/errors/not_defined/index.html index 818c3c00d4..2169f9ffa3 100644 --- a/files/ru/web/javascript/reference/errors/not_defined/index.html +++ b/files/ru/web/javascript/reference/errors/not_defined/index.html @@ -36,7 +36,7 @@ foo.substring(1); // "ar"

      Неправильная зона доступности

      -

      Переменная должна быть доступна в текущем контексте исполнения. Переменные, определенные внутри функции не могут быть доступны из любой точки за пределами функции, так как переменная определена только в области видимости самой функции.

      +

      Переменная должна быть доступна в текущем контексте исполнения. Переменные, определённые внутри функции не могут быть доступны из любой точки за пределами функции, так как переменная определена только в области видимости самой функции.

      function numbers () {
         var num1 = 2,
      @@ -46,7 +46,7 @@ foo.substring(1); // "ar"
      console.log(num1); // ReferenceError num1 is not defined.
      -

      Тем не менее, функция может получить доступ ко всем переменным и функциям, определенным в области видимости, в которой она определена.  Другими словами, функция, определенная в глобальной области может получить доступ ко всем переменным, определенным в глобальном масштабе.

      +

      Тем не менее, функция может получить доступ ко всем переменным и функциям, определённым в области видимости, в которой она определена.  Другими словами, функция, определённая в глобальной области может получить доступ ко всем переменным, определённым в глобальном масштабе.

      var num1 = 2,
           num2 = 3;
      diff --git a/files/ru/web/javascript/reference/errors/read-only/index.html b/files/ru/web/javascript/reference/errors/read-only/index.html
      index 4675e8008f..2616d68809 100644
      --- a/files/ru/web/javascript/reference/errors/read-only/index.html
      +++ b/files/ru/web/javascript/reference/errors/read-only/index.html
      @@ -10,8 +10,8 @@ translation_of: Web/JavaScript/Reference/Errors/Read-only
       
      TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
       TypeError: "x" доступен только для чтения (Firefox)
       TypeError: 0 доступен только для чтения (Firefox)
      -TypeError: не удается назначить только для чтения свойство "x" из #<объект> (Chrome)
      -TypeError: не удается назначить только для чтения свойство '0' [массив объектов] (Chrome)
      +TypeError: не удаётся назначить только для чтения свойство "x" из #<объект> (Chrome)
      +TypeError: не удаётся назначить только для чтения свойство '0' [массив объектов] (Chrome)
       

      Тип ошибки

      diff --git a/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html index 781ea495ec..dbf5ae9fba 100644 --- a/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html +++ b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html @@ -21,7 +21,7 @@ SyntaxError: Identifier "x" has already been declared (Chrome)

      Что пошло не так?

      -

      Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено еще раз в теле функции с помощью оператора присваивания let. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи let.

      +

      Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено ещё раз в теле функции с помощью оператора присваивания let. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи let.

      Примеры

      @@ -34,7 +34,7 @@ SyntaxError: Identifier "x" has already been declared (Chrome) // SyntaxError: redeclaration of formal parameter "arg"
      -

      Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную еще раз. Иначе говоря, ключевое слово let можно опустить. Если же вы хотите создать новую переменную, необходимо ее переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.

      +

      Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную ещё раз. Иначе говоря, ключевое слово let можно опустить. Если же вы хотите создать новую переменную, необходимо её переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.

      function f(arg) {
         arg = 'foo';
      diff --git a/files/ru/web/javascript/reference/errors/reserved_identifier/index.html b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html
      index 28c0df1add..91cedeb38d 100644
      --- a/files/ru/web/javascript/reference/errors/reserved_identifier/index.html
      +++ b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html
      @@ -60,7 +60,7 @@ var list = ["potatoes", "rice", "fries"];

      Обновление старых браузеров

      -

      Например, если вы используете старый браузер, в котором еще не реализована функция let или class, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.

      +

      Например, если вы используете старый браузер, в котором ещё не реализована функция let или class, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.

      "use strict";
       class DocArchiver {}
      diff --git a/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html
      index 48917edbc1..9f76e774c7 100644
      --- a/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html
      +++ b/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html
      @@ -23,7 +23,7 @@ SyntaxError: Illegal 'use strict' directive in function with non-simple paramete
       

      Перевод:

      Edge:
      -Не удается применить строгий режим к функциям со списком, содержащим сложные параметры
      +Не удаётся применить строгий режим к функциям со списком, содержащим сложные параметры
       
       Firefox:
       Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию
      @@ -74,7 +74,7 @@ function sum(a = 1, b = 2) {
       
       

      Функция выражения

      -

      Выражение функции может использовать еще один обходной путь:

      +

      Выражение функции может использовать ещё один обходной путь:

      var sum = function sum([a, b]) {
         // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования
      diff --git a/files/ru/web/javascript/reference/errors/unexpected_token/index.html b/files/ru/web/javascript/reference/errors/unexpected_token/index.html
      index 52b6bca2de..62f6dd9db2 100644
      --- a/files/ru/web/javascript/reference/errors/unexpected_token/index.html
      +++ b/files/ru/web/javascript/reference/errors/unexpected_token/index.html
      @@ -25,7 +25,7 @@ SyntaxError: expected '=>' after argument list, got "x"
       
       

      Что пошло не так?

      -

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

      +

      Вместо определённой конструкции языка было использовано что-то другое. Возможно, просто опечатка.

      Примеры

      @@ -39,7 +39,7 @@ SyntaxError: expected '=>' after argument list, got "x" // SyntaxError: expected expression, got ';'
      -

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

      +

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

      for (let i = 0; i < 5; ++i) {
         console.log(i);
      diff --git a/files/ru/web/javascript/reference/errors/unexpected_type/index.html b/files/ru/web/javascript/reference/errors/unexpected_type/index.html
      index c8ccbe028f..43015841f0 100644
      --- a/files/ru/web/javascript/reference/errors/unexpected_type/index.html
      +++ b/files/ru/web/javascript/reference/errors/unexpected_type/index.html
      @@ -25,7 +25,7 @@ TypeError: "x" is not a symbol
       
       

      Встречен неожиданный тип. Это часто случается со значениями {{jsxref("null")}} или {{jsxref("undefined")}}.

      -

      Так же, некоторые методы, такие как {{jsxref("Object.create()")}} или {{jsxref("Symbol.keyFor()")}}, требуют определенный тип, который должен быть предоставлен.

      +

      Так же, некоторые методы, такие как {{jsxref("Object.create()")}} или {{jsxref("Symbol.keyFor()")}}, требуют определённый тип, который должен быть предоставлен.

      Примеры

      @@ -39,7 +39,7 @@ var foo = null; foo.substring(1); // TypeError: foo is null -// Некоторые методы могут требовать определенный тип +// Некоторые методы могут требовать определённый тип var foo = {} Symbol.keyFor(foo); // TypeError: foo is not a symbol diff --git a/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html index 0c950c014e..c4f442f49e 100644 --- a/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html +++ b/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html @@ -18,7 +18,7 @@ SyntaxError: непредвиденный токен ( [Chrome]

      Что пошло не так?

      -

      В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, {{Glossary("IIFE")}}, или если код функции вообще правильно размещен в этом контексте.

      +

      В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, {{Glossary("IIFE")}}, или если код функции вообще правильно размещён в этом контексте.

      Примеры

      @@ -38,7 +38,7 @@ SyntaxError: непредвиденный токен ( [Chrome] return 'Hello world'; };
      -

      Или, ваша функция возможно, предназначена для IIFE (немедленно вызываемое выражение функции), которое является функцией, которая запускается, как только она определена. В этом случае вам понадобится еще несколько брекетов:

      +

      Или, ваша функция возможно, предназначена для IIFE (немедленно вызываемое выражение функции), которое является функцией, которая запускается, как только она определена. В этом случае вам понадобится ещё несколько брекетов:

      (function () {
       
      diff --git a/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html b/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html
      index ea9aca3e65..dd817a5407 100644
      --- a/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html
      +++ b/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html
      @@ -1,5 +1,5 @@
       ---
      -title: 'SyntaxError: unterminated string literal(незавершенный строковый литерал)'
      +title: 'SyntaxError: unterminated string literal(незавершённый строковый литерал)'
       slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal
       translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal
       ---
      @@ -34,7 +34,7 @@ SyntaxError: незадействованный строковый литера
       
      var longString = 'Это очень длинная строка, которая нуждается
                         перенос через несколько строк, потому что
                         в противном случае мой код нечитаем.";
      -// SyntaxError: незавершенный строковый литерал
      +// SyntaxError: незавершённый строковый литерал

      Вместо этого используйте оператор+, обратную косую черту или литералы шаблона. Вариант оператора + выглядит следующим образом:

      @@ -50,7 +50,7 @@ SyntaxError: незадействованный строковый литера в противном случае мой код нечитаем.";
      -

      Еще одна возможность-использовать шаблонные литералы, поддерживаемые в средах ECMAScript 2015:

      +

      Ещё одна возможность-использовать шаблонные литералы, поддерживаемые в средах ECMAScript 2015:

      var longString = `Это очень длинная строка, которая нуждается
                         в переносе через несколько строк, потому что
      diff --git a/files/ru/web/javascript/reference/errors/var_hides_argument/index.html b/files/ru/web/javascript/reference/errors/var_hides_argument/index.html
      index 91953a36c8..5b7c3d1f8e 100644
      --- a/files/ru/web/javascript/reference/errors/var_hides_argument/index.html
      +++ b/files/ru/web/javascript/reference/errors/var_hides_argument/index.html
      @@ -24,7 +24,7 @@ original_slug: Web/JavaScript/Reference/Errors/Переменные_скрыва
       
       

       

      -

      То же имя переменной происходит в качестве параметра функции, и затем повторно объявляется с помощью назначения var в теле функции. Это может быть конфликт имен, поэтому JavaScript предупреждает об этом.

      +

      То же имя переменной происходит в качестве параметра функции, и затем повторно объявляется с помощью назначения var в теле функции. Это может быть конфликт имён, поэтому JavaScript предупреждает об этом.

      Эта ошибка возникает как предупреждение только в коде строгого режима. В нестрогом коде повторное объявление игнорируется.

      diff --git a/files/ru/web/javascript/reference/functions/arguments/callee/index.html b/files/ru/web/javascript/reference/functions/arguments/callee/index.html index eaf41af79d..5326296bdd 100644 --- a/files/ru/web/javascript/reference/functions/arguments/callee/index.html +++ b/files/ru/web/javascript/reference/functions/arguments/callee/index.html @@ -29,7 +29,7 @@ translation_of: Web/JavaScript/Reference/Functions/arguments/callee

       

      -

      Действительно незаменимым оно остается всего в одной ситуации. Когда мы создаем анонимную функцию напрямую через конструктор Function.

      +

      Действительно незаменимым оно остаётся всего в одной ситуации. Когда мы создаём анонимную функцию напрямую через конструктор Function.

      var b = new Function("", "alert(typeof arguments.callee)");
      diff --git a/files/ru/web/javascript/reference/functions/arguments/index.html b/files/ru/web/javascript/reference/functions/arguments/index.html index b23710eba0..db4f25e9b6 100644 --- a/files/ru/web/javascript/reference/functions/arguments/index.html +++ b/files/ru/web/javascript/reference/functions/arguments/index.html @@ -105,7 +105,7 @@ console.log(typeof arguments[0]);
      return args.join(separator); }
      -

      Вы можете передать любое количество аргументов в эту функцию. Она создает строку, используя каждый аргумент:

      +

      Вы можете передать любое количество аргументов в эту функцию. Она создаёт строку, используя каждый аргумент:

      // возвращает "red, orange, blue"
       myConcat(", ", "red", "orange", "blue");
      @@ -118,7 +118,7 @@ myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");

       Функция, создающая HTML списки

      -

      В данном примере приведена функция, которая создает строку с HTML-разметкой для списка. Единственный ее аргумент - строка, определяющая вид списка: если его значение равно "u", формируется неупорядоченный (маркированный) список, а если "o", то упорядоченный (нумерованный):

      +

      В данном примере приведена функция, которая создаёт строку с HTML-разметкой для списка. Единственный её аргумент - строка, определяющая вид списка: если его значение равно "u", формируется неупорядоченный (маркированный) список, а если "o", то упорядоченный (нумерованный):

      function list(type) {
         var result = "<" + type + "l><li>";
      @@ -148,7 +148,7 @@ myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
      } foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }
      -

      Тем не менее, в нестрогих функциях соответствие между их аргументами и объектом arguments существует только в том случае, если функция не содержит никаких оставшихся параметров, параметров по умолчанию или деструктурированных параметров. Например, в функции, приведенной ниже, используется параметр по умолчанию, и в данном случае возвращаемый результат будет равен 10, а не 100:

      +

      Тем не менее, в нестрогих функциях соответствие между их аргументами и объектом arguments существует только в том случае, если функция не содержит никаких оставшихся параметров, параметров по умолчанию или деструктурированных параметров. Например, в функции, приведённой ниже, используется параметр по умолчанию, и в данном случае возвращаемый результат будет равен 10, а не 100:

      function bar(a=1) {
         arguments[0] = 100;
      @@ -164,7 +164,7 @@ myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
      } zoo(10); // 100
      -

      На самом деле, если оставшиеся параметры, параметры по умолчанию или деструктурированные параметры не используются, формальные аргументы будут ссылаться на последние значения объекта arguments, при считывании значений формальных аргументов будут считаны последние данные из arguments, а при изменении значений формальных аргументов будет обновлен и объект arguments. Пример приведен в коде ниже:

      +

      На самом деле, если оставшиеся параметры, параметры по умолчанию или деструктурированные параметры не используются, формальные аргументы будут ссылаться на последние значения объекта arguments, при считывании значений формальных аргументов будут считаны последние данные из arguments, а при изменении значений формальных аргументов будет обновлён и объект arguments. Пример приведён в коде ниже:

      function func(a, b) {
           arguments[0] = 90;
      diff --git a/files/ru/web/javascript/reference/functions/arrow_functions/index.html b/files/ru/web/javascript/reference/functions/arrow_functions/index.html
      index bd2cc34fe1..6df06beb79 100644
      --- a/files/ru/web/javascript/reference/functions/arrow_functions/index.html
      +++ b/files/ru/web/javascript/reference/functions/arrow_functions/index.html
      @@ -66,7 +66,7 @@ f();  // 6
       
       elements.map(function(element) {
         return element.length;
      -}); // Это выражение вернет массив [8, 6, 7, 9]
      +}); // Это выражение вернёт массив [8, 6, 7, 9]
       
       // Функцию выше можно записать как стрелочную функцию:
       elements.map((element) => {
      @@ -123,7 +123,7 @@ var p = new Person();
       
       

      Кроме этого, может быть создана привязанная функция, в которую передаётся требуемое значение this для функции (функция growUp() в примере выше).

      -

      Стрелочные функции не содержат собственный контекст this, а используют значение this окружающего контекста. Поэтому нижеприведенный код работает как предполагалось:

      +

      Стрелочные функции не содержат собственный контекст this, а используют значение this окружающего контекста. Поэтому нижеприведённый код работает как предполагалось:

      function Person(){
         this.age = 0;
      diff --git a/files/ru/web/javascript/reference/functions/default_parameters/index.html b/files/ru/web/javascript/reference/functions/default_parameters/index.html
      index 9043c38446..b257a5fe65 100644
      --- a/files/ru/web/javascript/reference/functions/default_parameters/index.html
      +++ b/files/ru/web/javascript/reference/functions/default_parameters/index.html
      @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Reference/Functions/Default_parameters
       
       

      Описание

      -

      В JavaScript параметры функции, которым при ее вызове не передаются значения, принимают по умолчанию значение {{jsxref("undefined")}}. Однако в некоторых случаях может быть полезно задать иное значение по умолчанию. Именно для таких случаев предназначены параметры по умолчанию.

      +

      В JavaScript параметры функции, которым при её вызове не передаются значения, принимают по умолчанию значение {{jsxref("undefined")}}. Однако в некоторых случаях может быть полезно задать иное значение по умолчанию. Именно для таких случаев предназначены параметры по умолчанию.

      В прошлом для проверки параметров и задания их значений по умолчанию использовался код в теле функции, в котором проверялось, не равны ли значения параметров undefined.

      @@ -47,7 +47,7 @@ multiply(5, 2); // 10 multiply(5); // 5
      -

      С появлением в ES2015 параметров по умолчанию стало возможным обходиться без проверки параметров в теле функции. Так, в приведенном выше примере достаточно в заголовке функции указать 1 в качестве значения по умолчанию для параметра b:

      +

      С появлением в ES2015 параметров по умолчанию стало возможным обходиться без проверки параметров в теле функции. Так, в приведённом выше примере достаточно в заголовке функции указать 1 в качестве значения по умолчанию для параметра b:

      function multiply(a, b = 1) {
         return a*b;
      @@ -78,7 +78,7 @@ test(null);      // 'object' (num получил значение null)
       
       

      Параметры по умолчанию вычисляются в момент вызова функции

      -

      В Javascript параметры по умолчанию вычисляются в момент вызова функции. В отличие от языка Python, при каждом вызове функции создается новое лексическое окружение функции.

      +

      В Javascript параметры по умолчанию вычисляются в момент вызова функции. В отличие от языка Python, при каждом вызове функции создаётся новое лексическое окружение функции.

      function append(value, array = []) {
         array.push(value);
      @@ -117,7 +117,7 @@ callSomething(); // 2
       greet('David', 'Hi');  // ["David", "Hi", "Hi David"]
       greet('David', 'Hi', 'Happy Birthday!');  // ["David", "Hi", "Happy Birthday!"]
      -

      Следующий пример пример еще раз иллюстрирует эту возможность, а также позволяет еще раз сравнить два способа достижения одного и того же результата: с использованием инициализации параметров по умолчанию и без ее использования:

      +

      Следующий пример пример ещё раз иллюстрирует эту возможность, а также позволяет ещё раз сравнить два способа достижения одного и того же результата: с использованием инициализации параметров по умолчанию и без её использования:

      function go() {
         return ":P"
      @@ -158,7 +158,7 @@ withoutDefaults.call({value:"=^_^="});
       
       

      Инициализация с помощью функций, определяемых в теле функции

      -

      Начиная с версии Gecko 33 {{geckoRelease(33)}} функции, определяемые в теле самой функции, не могут быть использованы для инициализации параметров по умолчанию; попытка это сделать приведет к ошибке {{jsxref("ReferenceError")}}. Параметры по умолчанию всегда вычисляются до обработки описаний функций, определяемых в теле функции.

      +

      Начиная с версии Gecko 33 {{geckoRelease(33)}} функции, определяемые в теле самой функции, не могут быть использованы для инициализации параметров по умолчанию; попытка это сделать приведёт к ошибке {{jsxref("ReferenceError")}}. Параметры по умолчанию всегда вычисляются до обработки описаний функций, определяемых в теле функции.

      // Вызовет ошибку ReferenceError!
       function f(a = go()) {
      diff --git a/files/ru/web/javascript/reference/functions/get/index.html b/files/ru/web/javascript/reference/functions/get/index.html
      index 9e2c329c8e..0e6803733f 100644
      --- a/files/ru/web/javascript/reference/functions/get/index.html
      +++ b/files/ru/web/javascript/reference/functions/get/index.html
      @@ -49,7 +49,7 @@ translation_of: Web/JavaScript/Reference/Functions/get
       
       

      Определение геттера на новом объекте в момент инициализации этого объекта

      -

      Ниже создается псевдо-свойство latest для объекта obj, который выведет последний элемент массива в консоль лог.

      +

      Ниже создаётся псевдо-свойство latest для объекта obj, который выведет последний элемент массива в консоль лог.

      const obj = {
         log: ['example','test'],
      @@ -98,10 +98,10 @@ console.log(obj.foo); // "bar"

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

      -

      Дополнительная техника оптимизации заключается в том, чтобы лениться или откладывать вычисление значения свойства и кэшировать его для дальнейшего доступа. Так поступают умные или запоминающие геттеры. Значение вычисляется в первый раз при вызове геттера и затем сохраняется в кэше так, что последующие обращения будут возвращать кэшированные значения без его пересчета. Это полезно в следующих ситуациях:

      +

      Дополнительная техника оптимизации заключается в том, чтобы лениться или откладывать вычисление значения свойства и кэшировать его для дальнейшего доступа. Так поступают умные или запоминающие геттеры. Значение вычисляется в первый раз при вызове геттера и затем сохраняется в кэше так, что последующие обращения будут возвращать кэшированные значения без его пересчёта. Это полезно в следующих ситуациях:

        -
      • Если вычисление значения свойства дорого (занимает много оперативной памяти или процессорного времени, порождает рабочий поток, получает удаленный файл, и т. д.).
      • +
      • Если вычисление значения свойства дорого (занимает много оперативной памяти или процессорного времени, порождает рабочий поток, получает удалённый файл, и т. д.).
      • Если сейчас это значение не нужно. Оно будет использоваться позже, или в некоторых случаях оно не используется вообще.
      • Если оно используется, к нему будут обращаться несколько раз, и нет необходимости его пересчитывать, так как значение не будет изменено, или не должно пересчитываться.
      @@ -119,7 +119,7 @@ console.log(obj.foo); // "bar"

      get и defineProperty

      -

      Использование ключевого слова get и {{jsxref("Object.defineProperty()")}} дает похожие результаты, но при использовании в {{jsxref("classes")}} между ними есть тонкая разница.

      +

      Использование ключевого слова get и {{jsxref("Object.defineProperty()")}} даёт похожие результаты, но при использовании в {{jsxref("classes")}} между ними есть тонкая разница.

      При использовании get свойство будет определено в прототипе объекта, в то время, как при использовании {{jsxref ("Object.defineProperty ()")}} свойство будет определено в экземпляре, к которому применяется.

      diff --git a/files/ru/web/javascript/reference/functions/method_definitions/index.html b/files/ru/web/javascript/reference/functions/method_definitions/index.html index 2a7f130d76..bc7b16eac1 100644 --- a/files/ru/web/javascript/reference/functions/method_definitions/index.html +++ b/files/ru/web/javascript/reference/functions/method_definitions/index.html @@ -38,7 +38,7 @@ original_slug: Web/JavaScript/Reference/Functions/Определение_мет

      Сокращение методов-генераторов

      -

      Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звездочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * g(){} будет работать, а g *(){} не будет.

      +

      Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звёздочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * g(){} будет работать, а g *(){} не будет.

      // Используя свойство с именем (pre-ES6)
       var obj2 = {
      diff --git a/files/ru/web/javascript/reference/functions/set/index.html b/files/ru/web/javascript/reference/functions/set/index.html
      index 97b89211c1..438bd10539 100644
      --- a/files/ru/web/javascript/reference/functions/set/index.html
      +++ b/files/ru/web/javascript/reference/functions/set/index.html
      @@ -41,13 +41,13 @@ translation_of: Web/JavaScript/Reference/Functions/set
       
    -

    Сеттер может быть удален оператором delete.

    +

    Сеттер может быть удалён оператором delete.

    Примеры

    Определение сеттера при инициализации новых объектов

    -

    Это позволит определить псевдо-параметр current объекта o, который задает значение, обновляющее значение log:

    +

    Это позволит определить псевдо-параметр current объекта o, который задаёт значение, обновляющее значение log:

    var o = {
       set current (str) {
    @@ -57,7 +57,7 @@ translation_of: Web/JavaScript/Reference/Functions/set
     }
     
    -

    обратите внимание, что current не определен и любые попытки доступа к нему вернут undefined.

    +

    обратите внимание, что current не определён и любые попытки доступа к нему вернут undefined.

    Удаление сеттера оператором delete

    diff --git a/files/ru/web/javascript/reference/global_objects/array/concat/index.html b/files/ru/web/javascript/reference/global_objects/array/concat/index.html index b3c2fa6eea..5d2bff7df7 100644 --- a/files/ru/web/javascript/reference/global_objects/array/concat/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/concat/index.html @@ -119,7 +119,7 @@ console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]

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

    - +

    {{Compat("javascript.builtins.Array.concat")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/every/index.html b/files/ru/web/javascript/reference/global_objects/array/every/index.html index 830be8882f..dc64e46dc1 100644 --- a/files/ru/web/javascript/reference/global_objects/array/every/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/every/index.html @@ -50,7 +50,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/every

    Описание

    -

    Метод every() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback вернет ложное значение (значение, становящееся равным false при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод every() немедленно вернёт false. В противном случае, если callback вернёт true для всех элементов массива, метод every() вернёт true. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

    +

    Метод every() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдёт такой, для которого callback вернёт ложное значение (значение, становящееся равным false при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод every() немедленно вернёт false. В противном случае, если callback вернёт true для всех элементов массива, метод every() вернёт true. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

    Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.

    diff --git a/files/ru/web/javascript/reference/global_objects/array/fill/index.html b/files/ru/web/javascript/reference/global_objects/array/fill/index.html index 1e3fb187da..3bb59fb99d 100644 --- a/files/ru/web/javascript/reference/global_objects/array/fill/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/fill/index.html @@ -146,7 +146,7 @@ arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]

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

    - +

    {{Compat("javascript.builtins.Array.fill")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/filter/index.html b/files/ru/web/javascript/reference/global_objects/array/filter/index.html index da6a9296ae..2eb7f46f9f 100644 --- a/files/ru/web/javascript/reference/global_objects/array/filter/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/filter/index.html @@ -287,7 +287,7 @@ console.log(deleteWords)

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

    - +

    {{Compat("javascript.builtins.Array.filter")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/find/index.html b/files/ru/web/javascript/reference/global_objects/array/find/index.html index ceef78d17d..46c0b0e693 100644 --- a/files/ru/web/javascript/reference/global_objects/array/find/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/find/index.html @@ -60,7 +60,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/find

    Метод find не изменяет массив, для которого он был вызван.

    -

    Диапазон элементов, обрабатываемых методом find, устанавливается до первого вызова функции callback. Элементы, добавленные в массив после начала выполнения метода find, не будут посещены функцией callback. Если существующие, непосещение элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени когда метод find посетит их; удалённые элементы все еще будут посещены. 

    +

    Диапазон элементов, обрабатываемых методом find, устанавливается до первого вызова функции callback. Элементы, добавленные в массив после начала выполнения метода find, не будут посещены функцией callback. Если существующие, непосещение элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени когда метод find посетит их; удалённые элементы все ещё будут посещены. 

    Примеры

    diff --git a/files/ru/web/javascript/reference/global_objects/array/flat/index.html b/files/ru/web/javascript/reference/global_objects/array/flat/index.html index 236fa402fa..9fbccf3f75 100644 --- a/files/ru/web/javascript/reference/global_objects/array/flat/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/flat/index.html @@ -31,7 +31,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat

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

    -

    Новый массив с объединенными в него подмассивами.

    +

    Новый массив с объединёнными в него подмассивами.

    Примеры

    @@ -76,7 +76,7 @@ arr1.reduce((acc, val) => acc.concat(val), []);// [1, 2, 3, 4] const flatSingle = arr => [].concat(...arr);
    -
    // Для развертывания многомерных массивов используем рекурсию, reduce и concat
    +
    // Для развёртывания многомерных массивов используем рекурсию, reduce и concat
     const arr = [1, 2, [3, 4, [5, 6]]];
     
     function flatDeep(arr, d = 1) {
    diff --git a/files/ru/web/javascript/reference/global_objects/array/foreach/index.html b/files/ru/web/javascript/reference/global_objects/array/foreach/index.html
    index 9a349176f9..35bf8b9a41 100644
    --- a/files/ru/web/javascript/reference/global_objects/array/foreach/index.html
    +++ b/files/ru/web/javascript/reference/global_objects/array/foreach/index.html
    @@ -30,7 +30,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach
     
     
    callback
    -
    Функция, которая будет вызвана для каждого элемента массива. Она принимает от одного до трех аргументов:
    +
    Функция, которая будет вызвана для каждого элемента массива. Она принимает от одного до трёх аргументов:
    currentValue
    @@ -253,7 +253,7 @@ words.forEach((word) => {

    Выравнивание (уплощение) массива

    -

    Следующий пример приведен только для целей обучения. Если вы хотите выравнять массив с помощью встроенных методов, вы можете использовать {{jsxref("Array.prototype.flat()")}}

    +

    Следующий пример приведён только для целей обучения. Если вы хотите выравнять массив с помощью встроенных методов, вы можете использовать {{jsxref("Array.prototype.flat()")}}

    function flatten(arr) {
       const result = []
    @@ -370,7 +370,7 @@ if (!Array.prototype.forEach) {
     

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

    - +

    {{Compat("javascript.builtins.Array.forEach")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/keys/index.html b/files/ru/web/javascript/reference/global_objects/array/keys/index.html index 94cc84dd43..21899980d1 100644 --- a/files/ru/web/javascript/reference/global_objects/array/keys/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/keys/index.html @@ -76,7 +76,7 @@ console.log(denseKeys); // [0, 1, 2]

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

    - +

    {{Compat("javascript.builtins.Array.keys")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html b/files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html index 2b69fd256f..8857ca7b47 100644 --- a/files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html @@ -145,7 +145,7 @@ if (!Array.prototype.lastIndexOf) {

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

    - +

    {{Compat("javascript.builtins.Array.lastIndexOf")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/map/index.html b/files/ru/web/javascript/reference/global_objects/array/map/index.html index 89a4c3362c..b9adf151c8 100644 --- a/files/ru/web/javascript/reference/global_objects/array/map/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/map/index.html @@ -270,7 +270,7 @@ if (!Array.prototype.map) {

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

    - +

    {{Compat("javascript.builtins.Array.map")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/reduce/index.html b/files/ru/web/javascript/reference/global_objects/array/reduce/index.html index b135b336ee..72c06b90b5 100644 --- a/files/ru/web/javascript/reference/global_objects/array/reduce/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/reduce/index.html @@ -302,7 +302,7 @@ if (!Array.prototype.reduce) {

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

    - +

    {{Compat("javascript.builtins.Array.reduce")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/reverse/index.html b/files/ru/web/javascript/reference/global_objects/array/reverse/index.html index 811d7adea9..d5845f1bbd 100644 --- a/files/ru/web/javascript/reference/global_objects/array/reverse/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/reverse/index.html @@ -28,7 +28,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse

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

    -

    Перевернутый массив

    +

    Перевёрнутый массив

    Описание

    @@ -82,7 +82,7 @@ console.log(myArray) // ['три', 'два', 'один']

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

    - +

    {{Compat("javascript.builtins.Array.reverse")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/slice/index.html b/files/ru/web/javascript/reference/global_objects/array/slice/index.html index d3b197f00b..4654f52d0a 100644 --- a/files/ru/web/javascript/reference/global_objects/array/slice/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/slice/index.html @@ -28,8 +28,8 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice
    begin {{optional_inline}}
    Индекс (счёт начинается с нуля), по которому начинать извлечение.
    Если индекс отрицательный, begin указывает смещение от конца последовательности. Вызов slice(-2) извлечёт два последних элемента последовательности.
    -
    Если begin не определен, slice() начинает работать с индекса 0.
    -
    Если begin больше длины последовательности вернется пустой массив.
    +
    Если begin не определён, slice() начинает работать с индекса 0.
    +
    Если begin больше длины последовательности вернётся пустой массив.
    end {{optional_inline}}
    Индекс (счёт начинается с нуля), по которому заканчивать извлечение. Метод slice() извлекает элементы с индексом меньше end.
    Вызов slice(1, 4) извлечёт элементы со второго по четвёртый (элементы по индексам 1, 2 и 3).
    @@ -39,7 +39,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice

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

    -

    Новый массив, содержащий извлеченные элементы.

    +

    Новый массив, содержащий извлечённые элементы.

    Описание

    @@ -228,7 +228,7 @@ var list1 = list(1, 2, 3); // [1, 2, 3]

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

    - +

    {{Compat("javascript.builtins.Array.slice")}}

    diff --git a/files/ru/web/javascript/reference/global_objects/array/some/index.html b/files/ru/web/javascript/reference/global_objects/array/some/index.html index 9bc3fbd7f3..a9d6aea2e0 100644 --- a/files/ru/web/javascript/reference/global_objects/array/some/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/some/index.html @@ -52,7 +52,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/some

    Описание

    -

    Метод some() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого callback вернет истинное значение (значение, становящееся равным true при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод some() немедленно вернёт true. В противном случае, если callback вернёт false для всех элементов массива, метод some() вернёт false. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

    +

    Метод some() вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдёт такой, для которого callback вернёт истинное значение (значение, становящееся равным true при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод some() немедленно вернёт true. В противном случае, если callback вернёт false для всех элементов массива, метод some() вернёт false. Функция callback вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.

    Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.

    diff --git a/files/ru/web/javascript/reference/global_objects/array/sort/index.html b/files/ru/web/javascript/reference/global_objects/array/sort/index.html index 16b73503c5..f33119cd53 100644 --- a/files/ru/web/javascript/reference/global_objects/array/sort/index.html +++ b/files/ru/web/javascript/reference/global_objects/array/sort/index.html @@ -27,7 +27,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort

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

    -

    Отсортированный массив. Важно, что копия массива не создается - массив сортируется на месте.

    +

    Отсортированный массив. Важно, что копия массива не создаётся - массив сортируется на месте.

    Описание

    diff --git a/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html b/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html index 3dfc1687ab..19d63d3859 100644 --- a/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html +++ b/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer ---
    {{JSRef}}
    -

    Объект ArrayBuffer используется для работы с бинарными данными. Он представляет собой ссылку на поток "сырых" двоичных данных, однако работать с ними напрямую возможности не дает. Вместо этого, вы можете создать типизированный массив или объект {{jsxref("DataView")}}, который можно использовать для чтения и записи данных в ArrayBuffer

    +

    Объект ArrayBuffer используется для работы с бинарными данными. Он представляет собой ссылку на поток "сырых" двоичных данных, однако работать с ними напрямую возможности не даёт. Вместо этого, вы можете создать типизированный массив или объект {{jsxref("DataView")}}, который можно использовать для чтения и записи данных в ArrayBuffer

    Синтаксис

    @@ -24,11 +24,11 @@ translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer

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

    -

    Новый объект ArrayBuffer определенного размера. Изначально содержимое равно 0.

    +

    Новый объект ArrayBuffer определённого размера. Изначально содержимое равно 0.

    Описание

    -

    Конструктор ArrayBuffer создает новый ArrayBuffer установленного в байтах размера.

    +

    Конструктор ArrayBuffer создаёт новый ArrayBuffer установленного в байтах размера.

    Создание буфера

    @@ -50,16 +50,16 @@ translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer
    {{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}
    -
    Возвращает true если arg – одно из представлений ArrayBuffer, например типизированный массив или {{jsxref("DataView")}}. Вернет false в остальных случаях.
    +
    Возвращает true если arg – одно из представлений ArrayBuffer, например типизированный массив или {{jsxref("DataView")}}. Вернёт false в остальных случаях.
    {{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(oldBuffer [, newByteLength])")}} {{experimental_inline}}
    -
    Вернет новый ArrayBuffer, контент которого будет взят из данных oldBuffer, а затем усечен или дополнен нулевыми значениями до newByteLength.
    +
    Вернёт новый ArrayBuffer, контент которого будет взят из данных oldBuffer, а затем усечён или дополнен нулевыми значениями до newByteLength.

    Пример

    -

    В этом примере мы создаем 8-байтный буфер с {{jsxref("Global_Objects/Int32Array", "Int32Array")}} представлением:

    +

    В этом примере мы создаём 8-байтный буфер с {{jsxref("Global_Objects/Int32Array", "Int32Array")}} представлением:

    var buffer = new ArrayBuffer(8);
     var view   = new Int32Array(buffer);
    @@ -76,7 +76,7 @@ var view = new Int32Array(buffer);
    {{SpecName('Typed Array')}} {{Spec2('Typed Array')}} - Заменен спецификацией ECMAScript 6. + Заменён спецификацией ECMAScript 6. {{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}} diff --git a/files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html b/files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html index 84b8592a5e..6182148417 100644 --- a/files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html +++ b/files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice ---
    {{JSRef}}
    -

    Метод slice() вернет новый ArrayBuffer, содержимое которого, будет копией содержимого, содержащегося в исходом ArrayBuffer, начиная с begin (включительно), и до end(не включая).

    +

    Метод slice() вернёт новый ArrayBuffer, содержимое которого, будет копией содержимого, содержащегося в исходом ArrayBuffer, начиная с begin (включительно), и до end(не включая).

    Syntax

    diff --git a/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html b/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html index b1475ad6e3..41f858c951 100644 --- a/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html +++ b/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction ---
    {{JSRef}}
    -

    Конструктор AsyncFunction создает новый объект {{jsxref("Statements/async_function", "async function")}}. В JavaScript любая асинхронная функция фактически является объектом AsyncFunction.

    +

    Конструктор AsyncFunction создаёт новый объект {{jsxref("Statements/async_function", "async function")}}. В JavaScript любая асинхронная функция фактически является объектом AsyncFunction.

    Обратите внимание, что AsyncFunction не является глобальным объектом. Её можно получить, выполнив следующий код.

    @@ -20,14 +20,14 @@ translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction
    arg1, arg2, ... argN
    -
    Имена, используемые функцией как формальные имена аргументов. Каждое имя должно быть строкой, которая соответствует действительному идентификатору JavaScript или списку таких строк, разделенных запятой; например, "x", "theValue", или "a,b". 
    +
    Имена, используемые функцией как формальные имена аргументов. Каждое имя должно быть строкой, которая соответствует действительному идентификатору JavaScript или списку таких строк, разделённых запятой; например, "x", "theValue", или "a,b". 
    functionBody
    Строка, содержащая в себе определение функции в исходном коде JavaScript .

    Описание

    -

    Объекты {{jsxref("Statements/async_function", "async function")}}, созданные с помощью AsyncFunction constructor  будут распарсены в момент, когда функция создается. Это менее эффективно, чем объявлять асинхронную функцию с помощью {{jsxref("Statements/async_function", "async function expression")}} и вызывать ее внутри вашего кода, поскольку такие функции анализируются с остальной частью кода.

    +

    Объекты {{jsxref("Statements/async_function", "async function")}}, созданные с помощью AsyncFunction constructor  будут распарсены в момент, когда функция создаётся. Это менее эффективно, чем объявлять асинхронную функцию с помощью {{jsxref("Statements/async_function", "async function expression")}} и вызывать её внутри вашего кода, поскольку такие функции анализируются с остальной частью кода.

    Все аргументы, переданные функции, рассматриваются как имена идентификаторов параметров в создаваемой функции в том порядке, в котором они передаются.

    diff --git a/files/ru/web/javascript/reference/global_objects/atomics/add/index.html b/files/ru/web/javascript/reference/global_objects/atomics/add/index.html index 546fdbd27f..003ce1619a 100644 --- a/files/ru/web/javascript/reference/global_objects/atomics/add/index.html +++ b/files/ru/web/javascript/reference/global_objects/atomics/add/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add ---
    {{JSRef}}
    -

    Статический метод Atomics.add() добавляет значение к текущему по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная операция гарантирует, что никакой другой записи не произойдет, пока измененное значение не будет записано обратно.

    +

    Статический метод Atomics.add() добавляет значение к текущему по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная операция гарантирует, что никакой другой записи не произойдёт, пока изменённое значение не будет записано обратно.

    Синтаксис

    @@ -16,7 +16,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add
    typedArray
    -
    Разделенный массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.
    +
    Разделённый массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.
    index
    Позиция в typedArray для добавления value.
    value
    diff --git a/files/ru/web/javascript/reference/global_objects/atomics/index.html b/files/ru/web/javascript/reference/global_objects/atomics/index.html index d51c14af2e..7411110086 100644 --- a/files/ru/web/javascript/reference/global_objects/atomics/index.html +++ b/files/ru/web/javascript/reference/global_objects/atomics/index.html @@ -22,7 +22,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics

    Атомарные операции

    -

    Когда память разделена, несколько потоков могут читать и записывать одни и те же данные в память. Атомарные операции гарантируют, что ожидаемые значения будут записаны и прочитаны, а операции завершены, прежде чем следующая операция начнет свою работу, и они не будут прерваны.

    +

    Когда память разделена, несколько потоков могут читать и записывать одни и те же данные в память. Атомарные операции гарантируют, что ожидаемые значения будут записаны и прочитаны, а операции завершены, прежде чем следующая операция начнёт свою работу, и они не будут прерваны.

    {{jsxref("Atomics.add()")}}
    @@ -50,12 +50,12 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics

    Wait и notify

    -

    wait() и wake() методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определенное состояние не станет true, и обычно используется как блокирующие конструкции.

    +

    wait() и wake() методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определённое состояние не станет true, и обычно используется как блокирующие конструкции.

    {{jsxref("Atomics.wait()")}}
    -

    Проверяет, содержится в указанной позиции массива все еще представленное значение и спит в ожидании или тайм-аут. Возвращает "ok", "not-equal" или "timed-out". Если ожидание не разрешено в вызывающем агенте, тогда выбросит ошибку исключения (большинство браузеров не разрешают wait() в главном потоке браузера).

    +

    Проверяет, содержится в указанной позиции массива все ещё представленное значение и спит в ожидании или тайм-аут. Возвращает "ok", "not-equal" или "timed-out". Если ожидание не разрешено в вызывающем агенте, тогда выбросит ошибку исключения (большинство браузеров не разрешают wait() в главном потоке браузера).

    {{jsxref("Atomics.wake()")}}
    Пробуждает некоторых агентов, которые спят в очереди ожидания в указанной позиции массива. Возвращает количество агентов, которые были разбужены.
    @@ -145,7 +145,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics

    Похожие заметки

    -

    До SpiderMonkey 48 {{geckoRelease(48)}}, финальные имена API и семантика не были еще реализованы. Изменения между Firefox v. 46 и v. 48:

    +

    До SpiderMonkey 48 {{geckoRelease(48)}}, финальные имена API и семантика не были ещё реализованы. Изменения между Firefox v. 46 и v. 48:

    • Методы Atomics.futexWakeOrRequeue() и Atomics.fence() полностью удалены ({{bug(1259544)}} и {{bug(1225028)}}).
    • diff --git a/files/ru/web/javascript/reference/global_objects/atomics/sub/index.html b/files/ru/web/javascript/reference/global_objects/atomics/sub/index.html index d3a9bbd3b4..05a2727be0 100644 --- a/files/ru/web/javascript/reference/global_objects/atomics/sub/index.html +++ b/files/ru/web/javascript/reference/global_objects/atomics/sub/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub ---
      {{JSRef}}
      -

      Статический метод Atomics.sub() вычитает представленное значение из текущего по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная операция гарантирует, что никакой другой записи не произойдет, пока измененное значение не будет записано обратно.

      +

      Статический метод Atomics.sub() вычитает представленное значение из текущего по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная операция гарантирует, что никакой другой записи не произойдёт, пока изменённое значение не будет записано обратно.

      Синтаксис

      @@ -16,7 +16,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub
      typedArray
      -
      Разделенный массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.
      +
      Разделённый массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.
      index
      Позиция в typedArray для добавления value.
      value
      diff --git a/files/ru/web/javascript/reference/global_objects/bigint/index.html b/files/ru/web/javascript/reference/global_objects/bigint/index.html index c8e43137bf..108df340f7 100644 --- a/files/ru/web/javascript/reference/global_objects/bigint/index.html +++ b/files/ru/web/javascript/reference/global_objects/bigint/index.html @@ -10,14 +10,14 @@ translation_of: Web/JavaScript/Reference/Global_Objects/BigInt ---

      {{JSRef}}

      -

      BigInt это встроенный объект, который предоставляет способ представлять целые числа больше 253 - 1, наибольшего числа, которое JavaScript может надежно представить с {{JSxRef("Number")}} примитивом. Это максимальное значение можно получить, обратившись к {{JSxRef("Number.MAX_SAFE_INTEGER")}}.

      +

      BigInt это встроенный объект, который предоставляет способ представлять целые числа больше 253 - 1, наибольшего числа, которое JavaScript может надёжно представить с {{JSxRef("Number")}} примитивом. Это максимальное значение можно получить, обратившись к {{JSxRef("Number.MAX_SAFE_INTEGER")}}.

      Описание

      -

      BigInt создается путем добавления n в конец целочисленного литерала — 10n — или вызовом функции BigInt().

      +

      BigInt создаётся путём добавления n в конец целочисленного литерала — 10n — или вызовом функции BigInt().

      const theBiggestInt = 9007199254740991n;
       
      @@ -44,7 +44,7 @@ const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111"
       
       

      Тип

      -

      При проверке с использованием оператора typeof, BigInt выдает тип "bigint":

      +

      При проверке с использованием оператора typeof, BigInt выдаёт тип "bigint":

      typeof 1n === 'bigint'; // true
       typeof BigInt('1') === 'bigint'; // true
      @@ -57,7 +57,7 @@ typeof BigInt('1') === 'bigint'; // true
       
       

      Операторы

      -

      Следующие операторы могут использоваться с BigInt (или объектом-оберткой BigInt): +, *, -, **, %.

      +

      Следующие операторы могут использоваться с BigInt (или объектом-обёрткой BigInt): +, *, -, **, %.

      Побитовые операции также поддерживаются, кроме >>> (сдвиг вправо с заполнением нулями).

      @@ -91,7 +91,7 @@ bigN * -1n

      Оператор / также работает, как и ожидалось, с целыми числами. Однако, поскольку это BigInt, эта операция будет округляться в меньшую сторону, то есть она не будет возвращать какие-либо дробные цифры.

      -

      Результат операции с дробным результатом будет округлен в меньшую сторону при использовании  BigInt.

      +

      Результат операции с дробным результатом будет округлён в меньшую сторону при использовании  BigInt.

      const expected = 4n / 2n;
      @@ -138,7 +138,7 @@ mixed.sort();
       // ↪ [-12n, 0, 0n, 10, 4n, 4, 6]
       
      -

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

      +

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

      0n === Object(0n); // false
       Object(0n) === Object(0n); // false
      @@ -236,7 +236,7 @@ Boolean(12n)
       
       

      Примеры

      -

      Расчет простых чисел

      +

      Расчёт простых чисел

      // Возвращает true, если BigInt — простое число
       function isPrime(p) {
      diff --git a/files/ru/web/javascript/reference/global_objects/date/index.html b/files/ru/web/javascript/reference/global_objects/date/index.html
      index a6ce5896e1..4eb5876bd2 100644
      --- a/files/ru/web/javascript/reference/global_objects/date/index.html
      +++ b/files/ru/web/javascript/reference/global_objects/date/index.html
      @@ -181,7 +181,7 @@ yourFunctionReturn = printElapsedTime(yourFunction);
       
       
      var seconds = Math.floor(Date.now() / 1000);
      -

      В этом случае важно возвращать только целое число (так что простое деление не подойдет), а также возвращать только фактически прошедшие секунды (поэтому этот код использует {{jsxref ("Math.floor ()")}} а не {{jsxref ("Math.round ()")}}).

      +

      В этом случае важно возвращать только целое число (так что простое деление не подойдёт), а также возвращать только фактически прошедшие секунды (поэтому этот код использует {{jsxref ("Math.floor ()")}} а не {{jsxref ("Math.round ()")}}).

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

      diff --git a/files/ru/web/javascript/reference/global_objects/date/setminutes/index.html b/files/ru/web/javascript/reference/global_objects/date/setminutes/index.html index 3cf8647e14..e9718854f2 100644 --- a/files/ru/web/javascript/reference/global_objects/date/setminutes/index.html +++ b/files/ru/web/javascript/reference/global_objects/date/setminutes/index.html @@ -36,7 +36,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMinutes

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

      -

      Количество миллисекунд между 1 января 1970 00:00:00 UTC и обновленной датой.

      +

      Количество миллисекунд между 1 января 1970 00:00:00 UTC и обновлённой датой.

      Описание

      diff --git a/files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html b/files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html index f603359b99..a4991d3e79 100644 --- a/files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html +++ b/files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html @@ -21,7 +21,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString

      Нет.

      Описание

      -

      Значение, возвращаемое методом toUTCString(), является человеко-читаемой строкой в часовом поясе UTC. Формат возвращаемого значения зависит от платформы. Наиболее распространенным значением является форматированная по RFC-1123 временная метка, которая является немного обновлённой версией временной метки RFC-822.

      +

      Значение, возвращаемое методом toUTCString(), является человеко-читаемой строкой в часовом поясе UTC. Формат возвращаемого значения зависит от платформы. Наиболее распространённым значением является форматированная по RFC-1123 временная метка, которая является немного обновлённой версией временной метки RFC-822.

      Примеры

      diff --git a/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html b/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html index 8e7562ad05..98b6336f42 100644 --- a/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html +++ b/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html @@ -36,7 +36,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent

      Исключения

      -

      При неправильном использовании выдает исключение {{jsxref("URIError")}} ("неверный формат последовательности URI").

      +

      При неправильном использовании выдаёт исключение {{jsxref("URIError")}} ("неверный формат последовательности URI").

      Описание

      diff --git a/files/ru/web/javascript/reference/global_objects/encodeuri/index.html b/files/ru/web/javascript/reference/global_objects/encodeuri/index.html index 9b6c6d7382..65e8cfda73 100644 --- a/files/ru/web/javascript/reference/global_objects/encodeuri/index.html +++ b/files/ru/web/javascript/reference/global_objects/encodeuri/index.html @@ -82,7 +82,7 @@ console.log(encodeURIComponent('\uD800')); // один низкий суррогат бросит "URIError: malformed URI sequence" console.log(encodeURIComponent('\uDFFF'));
      -

      Также заметим, что следуя наиболее свежей RFC3986 для URL, которая делает квадратные скобки защищенными (для IPv6) и таким образом не кодирует, когда формирование чего-либо, не являющегося частью URL (такое как домен), следующий сниппет поможет:

      +

      Также заметим, что следуя наиболее свежей RFC3986 для URL, которая делает квадратные скобки защищёнными (для IPv6) и таким образом не кодирует, когда формирование чего-либо, не являющегося частью URL (такое как домен), следующий сниппет поможет:

      function fixedEncodeURI (str) {
           return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
      diff --git a/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html b/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html
      index a0c6b028db..7493e53632 100644
      --- a/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html
      +++ b/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html
      @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent
       ---
       
      {{jsSidebar("Objects")}}
      -

      encodeURIComponent() - метод, кодирующий компонент универсального идентификатора ресурса (URI) заменой каждой определенной последовательности символов одной, двумя, тремя или четырьмя последовательностями символов, представленных в кодировке UTF-8  (будет только 4 управляющих последовательности для символов, состоящих из 2 "суррогатных" символов).

      +

      encodeURIComponent() - метод, кодирующий компонент универсального идентификатора ресурса (URI) заменой каждой определённой последовательности символов одной, двумя, тремя или четырьмя последовательностями символов, представленных в кодировке UTF-8  (будет только 4 управляющих последовательности для символов, состоящих из 2 "суррогатных" символов).

      Синтаксис

      diff --git a/files/ru/web/javascript/reference/global_objects/error/index.html b/files/ru/web/javascript/reference/global_objects/error/index.html index 90a108b2a4..6ac3ffc666 100644 --- a/files/ru/web/javascript/reference/global_objects/error/index.html +++ b/files/ru/web/javascript/reference/global_objects/error/index.html @@ -37,7 +37,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Error

      Использование как функции

      -

      Когда Error используется как функции-- без {{jsxref("Operators/new", "new")}}, она возвращает Error объект. Следовательно простой вызов Error произведет тот же результат, что и конструктор Error объявленный через new.

      +

      Когда Error используется как функции-- без {{jsxref("Operators/new", "new")}}, она возвращает Error объект. Следовательно простой вызов Error произведёт тот же результат, что и конструктор Error объявленный через new.

      // this:
       const x = Error('I was created using a function call!');
      diff --git a/files/ru/web/javascript/reference/global_objects/escape/index.html b/files/ru/web/javascript/reference/global_objects/escape/index.html
      index edc41f8259..05ae768fd4 100644
      --- a/files/ru/web/javascript/reference/global_objects/escape/index.html
      +++ b/files/ru/web/javascript/reference/global_objects/escape/index.html
      @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/escape
       ---
       
      {{jsSidebar("Objects")}} {{deprecated_header}}
      -

      Устаревший метод escape() возвращает новую строку, в которой определенные символы заменены шестнадцатеричной управляющей последовательностью.  Используйте методы {{jsxref("encodeURI")}} или {{jsxref("encodeURIComponent")}} вместо него.

      +

      Устаревший метод escape() возвращает новую строку, в которой определённые символы заменены шестнадцатеричной управляющей последовательностью.  Используйте методы {{jsxref("encodeURI")}} или {{jsxref("encodeURIComponent")}} вместо него.

      Синтаксис

      diff --git a/files/ru/web/javascript/reference/global_objects/eval/index.html b/files/ru/web/javascript/reference/global_objects/eval/index.html index 0c32530435..49bec21796 100644 --- a/files/ru/web/javascript/reference/global_objects/eval/index.html +++ b/files/ru/web/javascript/reference/global_objects/eval/index.html @@ -44,7 +44,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/eval

      eval() можно использовать для вычисления значения арифметического выражения, записанного в строковом виде, на более поздней стадии исполнения. Предположим, существует переменная x. Можно отложить вычисление выражения, в котором содержится х, если присвоить переменной это выражение в виде строки (допустим, "3 * x + 2"), а затем вызвать eval() в более поздней точке кода.

      -

      Если аргумент, переданный eval(), не является строкой, eval() возвращает его неизменным. В следующем примере определен конструктор String, и eval() не вычисляет значение выражения, записанного в строковом виде, а возвращает объект типа String.

      +

      Если аргумент, переданный eval(), не является строкой, eval() возвращает его неизменным. В следующем примере определён конструктор String, и eval() не вычисляет значение выражения, записанного в строковом виде, а возвращает объект типа String.

      eval(new String("2 + 2")); // возвращает объект типа String, содержащий "2 + 2"
       eval("2 + 2");             // возвращает 4
      @@ -62,7 +62,7 @@ eval(expression.toString());
         var x = 2, y = 4;
         console.log(eval("x + y"));  // Прямой вызов, использует локальную области видимости, результат - 6
         var geval = eval;
      -  console.log(geval("x + y")); // Непрямой вызов, использует глобальную область видимости, бросит ReferenceError, т.к. `x` - не определен
      +  console.log(geval("x + y")); // Непрямой вызов, использует глобальную область видимости, бросит ReferenceError, т.к. `x` - не определён
       }
       
      @@ -93,7 +93,7 @@ var result = obj[ propname ]; // obj[ "a" ] то же, что и obj.a

      Используйте функции вместо исполнения фрагментов кода

      -

      У JavaScript функции первого класса, что значит, что вы можете передавать функции как аргументы, хранить их в переменных или свойствах объектов и так далее. Многие DOM API созданы с учетом этого, так что вы можете (и вам следует) писать:

      +

      У JavaScript функции первого класса, что значит, что вы можете передавать функции как аргументы, хранить их в переменных или свойствах объектов и так далее. Многие DOM API созданы с учётом этого, так что вы можете (и вам следует) писать:

      // вместо setTimeout(" ... ", 1000) :
       setTimeout(function() { ... }, 1000);
      @@ -111,7 +111,7 @@ elt.addEventListener("click", function() { ... } , false); 

      Передавайте данные вместо кода

      -

      К примеру, расширение, созданное изменять содержимое веб-страниц, должно иметь правила, определенные в XPath, а не JS коде.

      +

      К примеру, расширение, созданное изменять содержимое веб-страниц, должно иметь правила, определённые в XPath, а не JS коде.

      Выполняйте код с ограниченными правами

      @@ -132,7 +132,7 @@ eval(z); // вернёт 42

      Использование eval для исполнения строки, содержащей операторы JavaScript

      -

      Следующий пример использует eval() для получения значения выражения str. Эта строка состоит из JavaScript выражений, печатающих в консоль, и, если x равен пяти, призывающих z значение 42, или 0 в противном случае. Когда второе выражение будет исполнено, eval() будет считать выражения выполненными, а также это установит значение выражению переменной z и вернет его.

      +

      Следующий пример использует eval() для получения значения выражения str. Эта строка состоит из JavaScript выражений, печатающих в консоль, и, если x равен пяти, призывающих z значение 42, или 0 в противном случае. Когда второе выражение будет исполнено, eval() будет считать выражения выполненными, а также это установит значение выражению переменной z и вернёт его.

      var x = 5;
       var str = "if (x == 5) {console.log('z is 42'); z = 42;} else z = 0; ";
      @@ -141,7 +141,7 @@ console.log("z is ", eval(str));

      Последнее выражение выполняется

      -

      eval() вернет значение последнего выполняемого выражения

      +

      eval() вернёт значение последнего выполняемого выражения

      var str = "if ( a ) { 1+1; } else { 1+2; }";
       var a = true;
      @@ -202,7 +202,7 @@ var fct2 = eval(fctStr2)  // вернёт функцию
       

      Gecko-специфичные замечания

        -
      • Исторически eval() имел второй необязательный аргумент, указывающий на то, в контексте какого объекта будет выполняться выражение. Этот аргумент не был стандартизован и был удален из SpiderMonkey в Gecko 1.9.1 (Firefox 3.5). См. {{bug(442333)}}.
      • +
      • Исторически eval() имел второй необязательный аргумент, указывающий на то, в контексте какого объекта будет выполняться выражение. Этот аргумент не был стандартизован и был удалён из SpiderMonkey в Gecko 1.9.1 (Firefox 3.5). См. {{bug(442333)}}.

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

      diff --git a/files/ru/web/javascript/reference/global_objects/float32array/index.html b/files/ru/web/javascript/reference/global_objects/float32array/index.html index dcd127face..f8fbb0c603 100644 --- a/files/ru/web/javascript/reference/global_objects/float32array/index.html +++ b/files/ru/web/javascript/reference/global_objects/float32array/index.html @@ -185,7 +185,7 @@ var z = new Float32Array(buffer, 0, 4);

      Заметки по совместимости

      -

      Начиная с ECMAScript 2015 (ES6), Float32Array конструктор обязательно должен вызываться с ключевым словом {{jsxref("Operators/new", "new")}}. Вызов Float32Array конструктора как функцию приведет к исключению {{jsxref("TypeError")}}.

      +

      Начиная с ECMAScript 2015 (ES6), Float32Array конструктор обязательно должен вызываться с ключевым словом {{jsxref("Operators/new", "new")}}. Вызов Float32Array конструктора как функцию приведёт к исключению {{jsxref("TypeError")}}.

      var dv = Float32Array([1, 2, 3]);
       // TypeError: calling a builtin Float32Array constructor
      diff --git a/files/ru/web/javascript/reference/global_objects/function/bind/index.html b/files/ru/web/javascript/reference/global_objects/function/bind/index.html
      index d153dc9e5c..78061cd192 100644
      --- a/files/ru/web/javascript/reference/global_objects/function/bind/index.html
      +++ b/files/ru/web/javascript/reference/global_objects/function/bind/index.html
      @@ -32,18 +32,18 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind
       
       

      Описание

      -

      Метод bind() создаёт новую "привязанную функцию" (ПФ).  ПФ - это "необычный функциональный объект" ( термин из ECMAScript 6 ), который является оберткой над исходным функциональным объектом. Вызов ПФ   приводит к исполнению кода обернутой функции.

      +

      Метод bind() создаёт новую "привязанную функцию" (ПФ).  ПФ - это "необычный функциональный объект" ( термин из ECMAScript 6 ), который является обёрткой над исходным функциональным объектом. Вызов ПФ   приводит к исполнению кода обёрнутой функции.

      ПФ имеет следующие внутренние ( скрытые ) свойства:

      • [[BoundTargetFunction]] - оборачиваемый  (целевой ) функциональный объект
      • -
      • [[BoundThis]] - значение, которое всегда передается в качестве значения   this при вызове обернутой функции.
      • +
      • [[BoundThis]] - значение, которое всегда передаётся в качестве значения   this при вызове обёрнутой функции.
      • [[BoundArguments]] - список значений, элементы которого используются в качестве первого аргумента при вызове оборачиваемой функции.
      • [[Call]] - внутренний метод. Выполняет код (функциональное выражение), связанный с функциональным объектом. 
      -

      Когда ПФ вызывается, исполняется ее внутренний метод [[Call]] со следующими аргументами Call(target, boundThis, args).

      +

      Когда ПФ вызывается, исполняется её внутренний метод [[Call]] со следующими аргументами Call(target, boundThis, args).

      • target   -    [[BoundTargetFunction]];
      • @@ -163,7 +163,7 @@ emptyObj.x + ',' + emptyObj.y;

        Пример: создание сокращений

        -

        Метод bind() также полезен в случаях, если вы хотите создать сокращение для функции, требующей определенное значение this.

        +

        Метод bind() также полезен в случаях, если вы хотите создать сокращение для функции, требующей определённое значение this.

        Возьмём, например, метод {{jsxref("Array.prototype.slice")}}, который вы можете использовать для преобразования массивоподобного объекта в настоящий массив. Вы можете создать подобное сокращение:

        diff --git a/files/ru/web/javascript/reference/global_objects/function/index.html b/files/ru/web/javascript/reference/global_objects/function/index.html index 4b6b4f5825..a097213c69 100644 --- a/files/ru/web/javascript/reference/global_objects/function/index.html +++ b/files/ru/web/javascript/reference/global_objects/function/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Function

        {{JSRef}}

        -

        Function constructor создает новый объект Function. Вызов constructor создает функцию динамически, но страдает от проблем безопасности и аналогичных (но гораздо менее значительных) проблем производительности {{jsxref("eval")}}. Однако, в отличие от eval, конструктор функций создает функции, которые выполняются только в глобальной области..

        +

        Function constructor создаёт новый объект Function. Вызов constructor создаёт функцию динамически, но страдает от проблем безопасности и аналогичных (но гораздо менее значительных) проблем производительности {{jsxref("eval")}}. Однако, в отличие от eval, конструктор функций создаёт функции, которые выполняются только в глобальной области..

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

        diff --git a/files/ru/web/javascript/reference/global_objects/function/name/index.html b/files/ru/web/javascript/reference/global_objects/function/name/index.html index 82a59765f2..b421c428a8 100644 --- a/files/ru/web/javascript/reference/global_objects/function/name/index.html +++ b/files/ru/web/javascript/reference/global_objects/function/name/index.html @@ -44,7 +44,7 @@ alert(doSomething.name); // выведет "doSomething"

        Предполагаемые имена функций

        -

        Переменные и методы могут предположить название анонимной функции из ее синтаксической позиции  (new in ECMAScript 2015).

        +

        Переменные и методы могут предположить название анонимной функции из её синтаксической позиции  (new in ECMAScript 2015).

        var f = function() {};
         var object = {
        @@ -79,7 +79,7 @@ alert(object.someMethod.name); //someMethod
         
         

        Для изменения name можно использовать {{jsxref("Object.defineProperty()")}}.

        -

        Сокращенные имена методов

        +

        Сокращённые имена методов

        var o = {
           foo(){}
        @@ -129,7 +129,7 @@ console.log(fooInstance.constructor.name); // logs "Foo"
         }
         
        -

        Со static name() методом Foo.name больше не содержит название класса, но отсылает к функции name(). Приведенное выше определение класса в ES2015 будет вести себя в Chrome и Firefx как в  ES5:

        +

        Со static name() методом Foo.name больше не содержит название класса, но отсылает к функции name(). Приведённое выше определение класса в ES2015 будет вести себя в Chrome и Firefx как в  ES5:

        function Foo() {}
         Object.defineProperty(Foo, 'name', { writable: true });
        @@ -189,7 +189,7 @@ if (b.constructor.name === 'Foo') {
           console.log('Oops!');
         }
        -

        В несжатой версии код выполняется ожидаемо "'foo' is an instance of 'Foo'". В то время, как в сжатой версии он ведет себя иначе. Если вы полагаетесь на Function.name, как в примере, то убедитесь, что pipeline не меняет код или не ожидайте от функции определенного имени.

        +

        В несжатой версии код выполняется ожидаемо "'foo' is an instance of 'Foo'". В то время, как в сжатой версии он ведёт себя иначе. Если вы полагаетесь на Function.name, как в примере, то убедитесь, что pipeline не меняет код или не ожидайте от функции определённого имени.

        diff --git a/files/ru/web/javascript/reference/global_objects/generator/index.html b/files/ru/web/javascript/reference/global_objects/generator/index.html index 8e530ff328..41498f0dfa 100644 --- a/files/ru/web/javascript/reference/global_objects/generator/index.html +++ b/files/ru/web/javascript/reference/global_objects/generator/index.html @@ -40,7 +40,7 @@ console.log(generator().next().value); // 1
        {{jsxref("Generator.prototype.return()")}}
        Возвращает заданное значение и заканчивает генератор.
        {{jsxref("Generator.prototype.throw()")}}
        -
        Выдает ошибку генератора.
        +
        Выдаёт ошибку генератора.

        Пример

        diff --git a/files/ru/web/javascript/reference/global_objects/generator/throw/index.html b/files/ru/web/javascript/reference/global_objects/generator/throw/index.html index cfdf5d3bbc..77b096e858 100644 --- a/files/ru/web/javascript/reference/global_objects/generator/throw/index.html +++ b/files/ru/web/javascript/reference/global_objects/generator/throw/index.html @@ -26,11 +26,11 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw
      • done (boolean)
          -
        • Имеет значение true если iterator прошел конец итерируемой последовательности. В этом случае value опционально определяется выражением return value внутри итератора .
        • +
        • Имеет значение true если iterator прошёл конец итерируемой последовательности. В этом случае value опционально определяется выражением return value внутри итератора .
        • Имеет значение false если iterator имеет возможность вернуть следующее значение последовательности. Это равносильно когда свойство done не указано.
      • -
      • value - любое JavaScript значение,  возвращенное итератором. Может быть проигнорировано, когда done === true.
      • +
      • value - любое JavaScript значение,  возвращённое итератором. Может быть проигнорировано, когда done === true.
      • Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html b/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html index 4cce9504e9..56264cb71d 100644 --- a/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html +++ b/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction ---
        {{JSRef}}
        -

        GeneratorFunction constructor создает новый {{jsxref("Statements/function*", "generator function")}} объект. В JavaScript каждая функция-генератор - это фактически GeneratorFunction объект.

        +

        GeneratorFunction constructor создаёт новый {{jsxref("Statements/function*", "generator function")}} объект. В JavaScript каждая функция-генератор - это фактически GeneratorFunction объект.

        Обратите внимание, что GeneratorFunction - это не глобальный объект. Он может быть получен при выполнении следующего кода.

        @@ -20,7 +20,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction
        arg1, arg2, ... argN
        -
        Имена, используемые функцией как имена формальных аргументов. Каждый должен быть строкой, которая соответствует правильному JavaScript идентификатору или списком таких строк, разделенных запятыми; например "x", "theValue", или "a,b".
        +
        Имена, используемые функцией как имена формальных аргументов. Каждый должен быть строкой, которая соответствует правильному JavaScript идентификатору или списком таких строк, разделённых запятыми; например "x", "theValue", или "a,b".
        functionBody
        A string containing the JavaScript statements comprising the function definition.
        diff --git a/files/ru/web/javascript/reference/global_objects/globalthis/index.html b/files/ru/web/javascript/reference/global_objects/globalthis/index.html index ce4cb48419..0f12223b46 100644 --- a/files/ru/web/javascript/reference/global_objects/globalthis/index.html +++ b/files/ru/web/javascript/reference/global_objects/globalthis/index.html @@ -83,6 +83,6 @@ if (typeof globals.setTimeout !== 'function') {

        Прогресс реализации

        -

        В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция еще не достигла стабильности в разных браузерах. Данные генерируются путем запуска соответствующих тестов функциональности в Test262, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.

        +

        В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция ещё не достигла стабильности в разных браузерах. Данные генерируются путём запуска соответствующих тестов функциональности в Test262, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.

        {{EmbedTest262ReportResultsTable("globalThis")}}

        diff --git a/files/ru/web/javascript/reference/global_objects/intl/index.html b/files/ru/web/javascript/reference/global_objects/intl/index.html index 4316488c58..cb0df3d472 100644 --- a/files/ru/web/javascript/reference/global_objects/intl/index.html +++ b/files/ru/web/javascript/reference/global_objects/intl/index.html @@ -47,7 +47,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Intl
      • "zh-Hans-CN": упрощённый китайский, используемый в Китае.
      • -

        Подметки, определяющие языки, письменности, страны (регионы) и (используется не часто) варианты в языковых метках BCP 47 могут быть найдены в Реестре языковых подметок IANA.

        +

        Подмётки, определяющие языки, письменности, страны (регионы) и (используется не часто) варианты в языковых метках BCP 47 могут быть найдены в Реестре языковых подмёток IANA.

        BCP 47 также позволяет использовать расширения, и одно из них имеет значение для функций интернационализации JavaScript: это расширение "u" (Unicode). Оно может использоваться для запрашивания настраиваемого языка-зависимого поведения объектов {{jsxref("Global_Objects/Collator", "Collator")}}, {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} или {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}. Примеры:

        diff --git a/files/ru/web/javascript/reference/global_objects/isfinite/index.html b/files/ru/web/javascript/reference/global_objects/isfinite/index.html index eb1c6ee465..dcce428701 100644 --- a/files/ru/web/javascript/reference/global_objects/isfinite/index.html +++ b/files/ru/web/javascript/reference/global_objects/isfinite/index.html @@ -46,7 +46,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/isFinite

        isFinite это функция верхнего уровня и она не связана ни с одним объектом.

        -

        Вы можете использовать эту функцию там, где требуется определить, является ли аргумент конечным числом. Функция isFinite исследует число в своем параметре. Если аргумент является NaN, положительной или отрицательной бесконечностью, метод вернет false; иначе возвращается true.

        +

        Вы можете использовать эту функцию там, где требуется определить, является ли аргумент конечным числом. Функция isFinite исследует число в своём параметре. Если аргумент является NaN, положительной или отрицательной бесконечностью, метод вернёт false; иначе возвращается true.

        Примеры

        @@ -59,7 +59,7 @@ isFinite(2e64); // true isFinite("0"); // true, но было бы false если использовать - // более надежный вариант Number.isFinite("0") + // более надёжный вариант Number.isFinite("0")

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

        diff --git a/files/ru/web/javascript/reference/global_objects/map/delete/index.html b/files/ru/web/javascript/reference/global_objects/map/delete/index.html index f9e6cb1cf4..dfa69f8edb 100644 --- a/files/ru/web/javascript/reference/global_objects/map/delete/index.html +++ b/files/ru/web/javascript/reference/global_objects/map/delete/index.html @@ -31,7 +31,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete

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

        -

        true если элемент существовал в {{jsxref("Map")}} и он был удален или false если элемента с таким ключом не было.

        +

        true если элемент существовал в {{jsxref("Map")}} и он был удалён или false если элемента с таким ключом не было.

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/map/entries/index.html b/files/ru/web/javascript/reference/global_objects/map/entries/index.html index ccdd07a182..eb1a79956b 100644 --- a/files/ru/web/javascript/reference/global_objects/map/entries/index.html +++ b/files/ru/web/javascript/reference/global_objects/map/entries/index.html @@ -7,7 +7,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries

        Метод entries() возвращает новый Итератор, содержащий пары [key, value] для каждого элемента объекта {{jsxref("Map")}} в том порядке, в котором они были заведены.

        -

        Исходный код всех примеров для  {{jsxref("Map")}} сохранен на GitHub https://github.com/mdn/interactive-examples/tree/master/live-examples/js-examples/map.

        +

        Исходный код всех примеров для  {{jsxref("Map")}} сохранён на GitHub https://github.com/mdn/interactive-examples/tree/master/live-examples/js-examples/map.

        Вы можете внести свой вклад, для этого: 

        diff --git a/files/ru/web/javascript/reference/global_objects/map/foreach/index.html b/files/ru/web/javascript/reference/global_objects/map/foreach/index.html index 20111c1cdc..27b5c25aa0 100644 --- a/files/ru/web/javascript/reference/global_objects/map/foreach/index.html +++ b/files/ru/web/javascript/reference/global_objects/map/foreach/index.html @@ -40,7 +40,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach

        Если аргумент thisArg указан для forEach, то при вызове callback он будет передан в качестве значения this.  В противном случае для this будет передано undefined. Значение this, в конечном итоге наблюдаемое в функции callback, определяется в соответствии c обычными правилами определения this в функции.

        -

        Каждое значение посещается один раз, за исключением случая, когда оно было удалено и добавлено снова до завершения forEach. callback не вызывается для значений, удаленных до их посещения. Новые значения будут посещены, если они добавлены до завершения forEach.

        +

        Каждое значение посещается один раз, за исключением случая, когда оно было удалено и добавлено снова до завершения forEach. callback не вызывается для значений, удалённых до их посещения. Новые значения будут посещены, если они добавлены до завершения forEach.

        forEach исполняет функцию callback один раз для каждого элемента в объекте Map; не возвращает значение.

        diff --git a/files/ru/web/javascript/reference/global_objects/map/get/index.html b/files/ru/web/javascript/reference/global_objects/map/get/index.html index ae4ca29646..be837c802e 100644 --- a/files/ru/web/javascript/reference/global_objects/map/get/index.html +++ b/files/ru/web/javascript/reference/global_objects/map/get/index.html @@ -29,8 +29,8 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map/get
        var myMap = new Map();
         myMap.set('bar', 'foo');
         
        -myMap.get('bar');  // Вернет "foo".
        -myMap.get('baz');  // Вернет undefined.
        +myMap.get('bar');  // Вернёт "foo".
        +myMap.get('baz');  // Вернёт undefined.
         

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

        diff --git a/files/ru/web/javascript/reference/global_objects/map/index.html b/files/ru/web/javascript/reference/global_objects/map/index.html index 4548a2f79a..fe13de74df 100644 --- a/files/ru/web/javascript/reference/global_objects/map/index.html +++ b/files/ru/web/javascript/reference/global_objects/map/index.html @@ -32,7 +32,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map

        Сравнение Объектов и Map

        -

        Объекты похожи на Map в том, что оба позволяют устанавливать значения по ключам, получать эти значения, удалять ключи и проверять их наличие. В связи с этим (и потому, что не было встроенных альтернатив), {{jsxref("Object", "Объекты")}} исторически использовались как Map. Однако, у них есть ряд отличий, который дает преимущества Map в ряде случаев:

        +

        Объекты похожи на Map в том, что оба позволяют устанавливать значения по ключам, получать эти значения, удалять ключи и проверять их наличие. В связи с этим (и потому, что не было встроенных альтернатив), {{jsxref("Object", "Объекты")}} исторически использовались как Map. Однако, у них есть ряд отличий, который даёт преимущества Map в ряде случаев:

        • Ключами {{jsxref("Object", "Объекта")}} выступают {{jsxref("String", "Строки")}} и {{jsxref("Symbol", "Символы")}}, в то время как любое значение может быть ключом Map, включая {{jsxref("Function", "функции")}}, {{jsxref("Object", "объекты")}} и {{Glossary("Primitive", "примитивы")}}.
        • @@ -74,7 +74,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Map
          Map.prototype.clear()
          Удаляет все пары ключ / значение из объекта Map.
          Map.prototype.delete(key)
          -
          Возвращает true, если элемент в объекте Map существовал и был удален, или false, если элемент не существует. Map.prototype.has(key) вернет false позже.
          +
          Возвращает true, если элемент в объекте Map существовал и был удалён, или false, если элемент не существует. Map.prototype.has(key) вернёт false позже.
          Map.prototype.entries()
          Возвращает новый объект Iterator который содержит массив [key, value] для каждого элемента в объекте Map в порядке вставки.
          Map.prototype.forEach(callbackFn[, thisArg])
          diff --git a/files/ru/web/javascript/reference/global_objects/math/sqrt/index.html b/files/ru/web/javascript/reference/global_objects/math/sqrt/index.html index 28d145db02..9fd81b98cd 100644 --- a/files/ru/web/javascript/reference/global_objects/math/sqrt/index.html +++ b/files/ru/web/javascript/reference/global_objects/math/sqrt/index.html @@ -29,7 +29,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt

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

          -

          Квадратный корень заданного числа. Если число отрицательное, то вернется {{jsxref("NaN")}}.

          +

          Квадратный корень заданного числа. Если число отрицательное, то вернётся {{jsxref("NaN")}}.

          Описание

          diff --git a/files/ru/web/javascript/reference/global_objects/nan/index.html b/files/ru/web/javascript/reference/global_objects/nan/index.html index 7c91aebb62..ca61ca7c3e 100644 --- a/files/ru/web/javascript/reference/global_objects/nan/index.html +++ b/files/ru/web/javascript/reference/global_objects/nan/index.html @@ -45,7 +45,7 @@ valueIsNaN(1); // false valueIsNaN(NaN); // true valueIsNaN(Number.NaN); // true -

          Тем не менее, обратите внимание на разницу между функцией isNaN() и методом Number.isNaN(): первая вернет true, если значение в настоящий момент является NaN, или если оно станет NaN после того, как преобразуется в число, в то время как последний вернет true, только если текущим значением является NaN:

          +

          Тем не менее, обратите внимание на разницу между функцией isNaN() и методом Number.isNaN(): первая вернёт true, если значение в настоящий момент является NaN, или если оно станет NaN после того, как преобразуется в число, в то время как последний вернёт true, только если текущим значением является NaN:

          isNaN('hello world');        // true
           Number.isNaN('hello world'); // false
          diff --git a/files/ru/web/javascript/reference/global_objects/null/index.html b/files/ru/web/javascript/reference/global_objects/null/index.html index 085018dc12..22f65596e9 100644 --- a/files/ru/web/javascript/reference/global_objects/null/index.html +++ b/files/ru/web/javascript/reference/global_objects/null/index.html @@ -40,14 +40,14 @@ translation_of: Web/JavaScript/Reference/Global_Objects/null

          Отличия между null и undefined

          -

          null является определенным значением отсутствия объекта, тогда как {{jsxref("Global_Objects/undefined", "undefined")}} обозначает неопределенность. Например: 

          +

          null является определённым значением отсутствия объекта, тогда как {{jsxref("Global_Objects/undefined", "undefined")}} обозначает неопределённость. Например: 

          var element;
          -// значение переменной element до ее инициализации не определенно: undefined
          +// значение переменной element до её инициализации не определённо: undefined
           
           element = document.getElementById('not-exists');
           // здесь при попытке получения несуществующего элемента, метод getElementById возвращает null
          -// переменная element теперь инициализирована значением null, ее значение определено
          +// переменная element теперь инициализирована значением null, её значение определено
           

          При проверке на null или {{jsxref("Global_Objects/undefined", "undefined")}}, помните о различии между операторами равенства (==) и идентичности (===): с первым, выполняется преобразование типов. 

          diff --git a/files/ru/web/javascript/reference/global_objects/object/create/index.html b/files/ru/web/javascript/reference/global_objects/object/create/index.html index bb1da1642e..9af356adc0 100644 --- a/files/ru/web/javascript/reference/global_objects/object/create/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/create/index.html @@ -34,7 +34,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/create

          Выбрасываемые исключения

          -

          Выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}, если параметр proto не является {{jsxref("Global_Objects/null", "null")}} или объектом (исключение составляют объекты-обертки примитивных типов).

          +

          Выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}, если параметр proto не является {{jsxref("Global_Objects/null", "null")}} или объектом (исключение составляют объекты-обёртки примитивных типов).

          Примеры

          @@ -170,7 +170,7 @@ o2 = Object.create({}, {   var hasOwn = Object.prototype.hasOwnProperty; return function (O) { -  // 1. Если Type(O) не является Object or Null выдается исключение TypeError. +  // 1. Если Type(O) не является Object or Null выдаётся исключение TypeError. if (typeof O != 'object') { throw TypeError('Object prototype may only be an Object or null'); } @@ -183,7 +183,7 @@ o2 = Object.create({}, { var obj = new Temp(); Temp.prototype = null; // Давайте не будем держать случайные ссылки на О... -  // 4.  Если аргумент Properties присутствует и не определен, добавляем +  // 4.  Если аргумент Properties присутствует и не определён, добавляем   // собственные свойства к obj, как будто вызывая стандартную встроенную   // функцию Object.defineProperties с аргументами obj и   // Properties. diff --git a/files/ru/web/javascript/reference/global_objects/object/entries/index.html b/files/ru/web/javascript/reference/global_objects/object/entries/index.html index 87a9de90b8..7487e1241a 100644 --- a/files/ru/web/javascript/reference/global_objects/object/entries/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/entries/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries ---
          {{JSRef}}
          -

          Object.entries() метод возвращает массив собственных перечисляемых свойств указанного объекта в формате [key, value], в том же порядке, что и в цикле {{jsxref("Statements/for...in", "for...in")}} (разница в том, что for-in перечисляет свойства из цепочки прототипов). Порядок элементов в массиве который возвращается Object.entries() не зависит от того как объект объявлен. Если существует необходимость в определенном порядке, то  массив должен быть отсортирован до вызова метода, например Object.entries(obj).sort((a, b) => a[0] - b[0]);.

          +

          Object.entries() метод возвращает массив собственных перечисляемых свойств указанного объекта в формате [key, value], в том же порядке, что и в цикле {{jsxref("Statements/for...in", "for...in")}} (разница в том, что for-in перечисляет свойства из цепочки прототипов). Порядок элементов в массиве который возвращается Object.entries() не зависит от того как объект объявлен. Если существует необходимость в определённом порядке, то  массив должен быть отсортирован до вызова метода, например Object.entries(obj).sort((a, b) => a[0] - b[0]);.

          {{EmbedInteractiveExample("pages/js/object-entries.html")}}

          diff --git a/files/ru/web/javascript/reference/global_objects/object/fromentries/index.html b/files/ru/web/javascript/reference/global_objects/object/fromentries/index.html index 7bf1d17719..0a52348cb4 100644 --- a/files/ru/web/javascript/reference/global_objects/object/fromentries/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/fromentries/index.html @@ -33,7 +33,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries

          Описание

          -

          Метод Object.fromEntries() принимает список пар ключ-значение и возвращает новый объект, свойства которого задаются этими записями. Ожидается, что аргумент iterable будет объектом, который реализует метод @@iterator, который возвращает объект итератора, который создает двухэлементный массивоподобный объект, первый элемент которого является значением, которое будет использоваться в качестве ключа свойства, а второй элемент — значением связанного с этим ключом свойства.

          +

          Метод Object.fromEntries() принимает список пар ключ-значение и возвращает новый объект, свойства которого задаются этими записями. Ожидается, что аргумент iterable будет объектом, который реализует метод @@iterator, который возвращает объект итератора, который создаёт двухэлементный массивоподобный объект, первый элемент которого является значением, которое будет использоваться в качестве ключа свойства, а второй элемент — значением связанного с этим ключом свойства.

          Object.fromEntries() выполняет процедуру, обратную {{jsxref("Object.entries()")}}.

          diff --git a/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html b/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html index 1700aa0e2c..62830748df 100644 --- a/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html @@ -40,7 +40,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDes
          set
          Функция, которая служит установщиком для свойства, или {{jsxref("undefined")}} если установщика нет (только дескрипторы доступа).
          configurable
          -
          true тогда и только тогда, когда тип этого свойства дескриптора может быть изменен, и если свойство может быть удалено из соответствующего объекта.
          +
          true тогда и только тогда, когда тип этого свойства дескриптора может быть изменён, и если свойство может быть удалено из соответствующего объекта.
          enumerable
          true тогда и только тогда, когда это свойство отображается при перечислении свойств соответствующего объекта.

           

          diff --git a/files/ru/web/javascript/reference/global_objects/object/values/index.html b/files/ru/web/javascript/reference/global_objects/object/values/index.html index 38bfcb624a..112c18c60f 100644 --- a/files/ru/web/javascript/reference/global_objects/object/values/index.html +++ b/files/ru/web/javascript/reference/global_objects/object/values/index.html @@ -52,7 +52,7 @@ var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; my_obj.foo = "bar"; console.log(Object.values(my_obj)); // ['bar'] -// Аргумент, не являющийся объектом, будет приведен к объекту +// Аргумент, не являющийся объектом, будет приведён к объекту console.log(Object.values("foo")); // ['f', 'o', 'o'] diff --git a/files/ru/web/javascript/reference/global_objects/parsefloat/index.html b/files/ru/web/javascript/reference/global_objects/parsefloat/index.html index 03cb0bc158..e108d37e8d 100644 --- a/files/ru/web/javascript/reference/global_objects/parsefloat/index.html +++ b/files/ru/web/javascript/reference/global_objects/parsefloat/index.html @@ -44,11 +44,11 @@ translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat

          parseFloat - это высокоуровневая функция, не привязанная ни к одному объекту.

          -

          parseFloat разбирает текстовую строку, ищет и возвращает из нее десятичное число. Если функция встретит знак, отличный от (+ или -), цифр(0-9), разделительной точки, или показателя степени, она вернет значение, предшествующее этому знаку, игнорируя все последующие символы . Допускаются позади и впереди идущие пробелы.

          +

          parseFloat разбирает текстовую строку, ищет и возвращает из неё десятичное число. Если функция встретит знак, отличный от (+ или -), цифр(0-9), разделительной точки, или показателя степени, она вернёт значение, предшествующее этому знаку, игнорируя все последующие символы . Допускаются позади и впереди идущие пробелы.

          -

          Если первый символ нельзя привести к числовому виду, parseFloat вернет NaN.

          +

          Если первый символ нельзя привести к числовому виду, parseFloat вернёт NaN.

          -

          С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернет ли parseFloat значение {{jsxref("NaN")}} в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если NaN участвует в арифметических операциях, результатом также будет NaN.

          +

          С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернёт ли parseFloat значение {{jsxref("NaN")}} в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если NaN участвует в арифметических операциях, результатом также будет NaN.

          parseFloat также может вернуть значение Infinity ("бесконечность"). Вы можете использовать функцию {{jsxref("Global_Objects/isFinite", "isFinite")}}, чтобы определить, является ли результат конечным числом  (not Infinity, -Infinity, или NaN).

          @@ -76,7 +76,7 @@ parseFloat(foo);​​​​​

          parseFloat возвращает NaN

          -

          Пример ниже вернет NaN

          +

          Пример ниже вернёт NaN

          parseFloat("FF2");
           
          diff --git a/files/ru/web/javascript/reference/global_objects/parseint/index.html b/files/ru/web/javascript/reference/global_objects/parseint/index.html index 093ad5971c..fd1942b04d 100644 --- a/files/ru/web/javascript/reference/global_objects/parseint/index.html +++ b/files/ru/web/javascript/reference/global_objects/parseint/index.html @@ -54,13 +54,13 @@ translation_of: Web/JavaScript/Reference/Global_Objects/parseInt
          • Если значение входного параметра string начинается с "0x" или "0X", за основание системы счисления принимается 16, и интерпретации подвергается оставшаяся часть строки.
          • -
          • Если значение входного параметра string начинается с "0", за основание системы счисления принимается либо 8, либо 10, в зависимости от конкретной реализации. В спецификации ECMAScript 5 прописано использование 10 (десятичная система), но это поддерживается еще не всеми браузерами, поэтому необходимо всегда указывать основание системы счисления при использовании функции parseInt.
          • +
          • Если значение входного параметра string начинается с "0", за основание системы счисления принимается либо 8, либо 10, в зависимости от конкретной реализации. В спецификации ECMAScript 5 прописано использование 10 (десятичная система), но это поддерживается ещё не всеми браузерами, поэтому необходимо всегда указывать основание системы счисления при использовании функции parseInt.
          • Если значение входного параметра string начинается с любого другого символа, система счисления считается десятичной (основание 10).

          Если первый символ строки не может быть преобразован в число, parseInt возвращает значение NaN.

          -

          С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернет ли parseInt значение NaN в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если NaN участвует в арифметических операциях, результатом также будет NaN.

          +

          С точки зрения математики, значение NaN не является числом в какой-либо системе счисления. Чтобы определить, вернёт ли parseInt значение NaN в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если NaN участвует в арифметических операциях, результатом также будет NaN.

          Для преобразования числа в строку в указанной системе счисления, используйте intValue.toString(radix).

          diff --git a/files/ru/web/javascript/reference/global_objects/promise/all/index.html b/files/ru/web/javascript/reference/global_objects/promise/all/index.html index b6291344c2..4a79cf71ab 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/all/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/all/index.html @@ -27,19 +27,19 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all

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

          -

          {{jsxref("Promise")}}, который будет выполнен когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонен, если будет отклонено хоть одно из переданных обещаний.

          +

          {{jsxref("Promise")}}, который будет выполнен когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонён, если будет отклонено хоть одно из переданных обещаний.

          Описание

          Promise.all возвращает массив значений от всех обещаний, которые были ему переданы. Возвращаемый массив значений сохраняет порядок оригинального перечисляемого объекта, но не порядок выполнения обещаний. Если какой-либо элемент перечисляемого объекта не является обещанием, то он будет преобразован с помощью метода {{jsxref("Promise.resolve")}}.

          -

          Если одно из переданных обещаний будет отклонено, Promise.all будет немедленно отклонен со значением отклоненного обещания, не учитывая другие обещания, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то Promise.all будет выполнен немедленно

          +

          Если одно из переданных обещаний будет отклонено, Promise.all будет немедленно отклонён со значением отклонённого обещания, не учитывая другие обещания, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то Promise.all будет выполнен немедленно

          Примеры

          Использование Promise.all

          -

          Promise.all ждет выполнения всех обещаний (или первого метода reject()).

          +

          Promise.all ждёт выполнения всех обещаний (или первого метода reject()).

          var p1 = Promise.resolve(3);
           var p2 = 1337;
          @@ -57,7 +57,7 @@ Promise.all([p1, p2, p3]).then(values => {
           
           

          Promise.all поведение немедленного отклонения

          -

          Promise.all будет немедленно отклонен если одно из переданных обещаний будет отклонено: если у вас есть четыре обещания которые будут выполнены с задержкой и одно, которое будет отклонено немедленно - тогда Promise.all будет немедленно отклонен.

          +

          Promise.all будет немедленно отклонён если одно из переданных обещаний будет отклонено: если у вас есть четыре обещания которые будут выполнены с задержкой и одно, которое будет отклонено немедленно - тогда Promise.all будет немедленно отклонен.

          var p1 = new Promise((resolve, reject) => {
             setTimeout(resolve, 1000, "one");
          @@ -72,7 +72,7 @@ var p4 = new Promise((resolve, reject) => {
             setTimeout(resolve, 4000, "four");
           });
           var p5 = new Promise((resolve, reject) => {
          -// Это обещание прервет Promise.all
          +// Это обещание прервёт Promise.all
             reject("reject");
           });
           
          diff --git a/files/ru/web/javascript/reference/global_objects/promise/any/index.html b/files/ru/web/javascript/reference/global_objects/promise/any/index.html
          index 339d9f7aad..fc85e0927c 100644
          --- a/files/ru/web/javascript/reference/global_objects/promise/any/index.html
          +++ b/files/ru/web/javascript/reference/global_objects/promise/any/index.html
          @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any
           ---
           
          {{JSRef}}
          -

          Метод Promise.any() принимает итерируемый объект содержащий объекты "обещаний" {{JSxRef("Promise")}}. Как только одно из "обещаний"(Promise) выполнится успешно(fullfill), метод возвратит единственный объект Promise со значением выполненного "обещания". Если ни одно из "обещаний" не завершится успешно(если все "обещания" завершатся с ошибкой, т.е. rejected), тогда возвращенный объект promise будет отклонен(rejected) с одним из значений: массив содержащий причины ошибки(отклонения), или {{JSxRef("AggregateError")}} — подкласс {{JSxRef("Error")}}, который объединяет выброшенные ошибки вместе. По существу, метод Promise.any() является противоположностью для {{JSxRef("Promise.all()")}}.

          +

          Метод Promise.any() принимает итерируемый объект содержащий объекты "обещаний" {{JSxRef("Promise")}}. Как только одно из "обещаний"(Promise) выполнится успешно(fullfill), метод возвратит единственный объект Promise со значением выполненного "обещания". Если ни одно из "обещаний" не завершится успешно(если все "обещания" завершатся с ошибкой, т.е. rejected), тогда возвращённый объект promise будет отклонён(rejected) с одним из значений: массив содержащий причины ошибки(отклонения), или {{JSxRef("AggregateError")}} — подкласс {{JSxRef("Error")}}, который объединяет выброшенные ошибки вместе. По существу, метод Promise.any() является противоположностью для {{JSxRef("Promise.all()")}}.

          Warning! The Promise.any() method is experimental and not fully supported by all browsers. It is currently in the TC39 Candidate stage (Stage 3).

          @@ -27,25 +27,25 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any
          • Исполненный {{JSxRef("Promise")}}, если переданный итерируемый объект пуст.
          • Исполненный асинхронно {{JSxRef("Promise")}}, если переданный итерируемый объект не содержит "обещаний"(promises).
          • -
          • Во всех других случаях {{JSxRef("Promise")}} со статусом ожидания(pending). Возвращенное "обещание" будет исполнено(resolved/rejected) асинхронно (как только стэк вызовов окажется пустым), когда одно(любое) "обещание" из  переданного итерируемого объекта исполнится, либо все "обещания" будут отклонены.
          • +
          • Во всех других случаях {{JSxRef("Promise")}} со статусом ожидания(pending). Возвращённое "обещание" будет исполнено(resolved/rejected) асинхронно (как только стэк вызовов окажется пустым), когда одно(любое) "обещание" из  переданного итерируемого объекта исполнится, либо все "обещания" будут отклонены.

          Описание

          -

          Метод полезен, когда нужно вернуть первое исполненное "обещание". После того как одно из "обещаний" будет исполнено, метод не будет дожидаться исполнения остальных. В отличие от {{JSxRef("Promise.all()")}}, который содержит массив(Array) значений исполненных обещаний, Promise.any() содержит только одно значение (при условии, что хотя бы одно из "обещаний" исполнено успешно). Такой подход может быть выгодным, когда нужно, чтобы выполнилось только одно "обещание", неважно какое. Также, в отличие от {{JSxRef("Promise.race()")}}, который возвращает "обещание", содержащее значение первого завершенного(resolved или rejected), этот метод возвращает "обещание" содержащее значение первого успешно выполненного(resolved) "обещания". Метод будет игнорировать исполнение обещаний с ошибкой(rejection) вплоть до первого исполненного успешно(fullfilment).

          +

          Метод полезен, когда нужно вернуть первое исполненное "обещание". После того как одно из "обещаний" будет исполнено, метод не будет дожидаться исполнения остальных. В отличие от {{JSxRef("Promise.all()")}}, который содержит массив(Array) значений исполненных обещаний, Promise.any() содержит только одно значение (при условии, что хотя бы одно из "обещаний" исполнено успешно). Такой подход может быть выгодным, когда нужно, чтобы выполнилось только одно "обещание", неважно какое. Также, в отличие от {{JSxRef("Promise.race()")}}, который возвращает "обещание", содержащее значение первого завершённого(resolved или rejected), этот метод возвращает "обещание" содержащее значение первого успешно выполненного(resolved) "обещания". Метод будет игнорировать исполнение обещаний с ошибкой(rejection) вплоть до первого исполненного успешно(fullfilment).

          Успешное исполнение(Fullfilment)

          -

          Если одно из "обещаний" исполнится успешно, возвращенное "обещание" асинхронно исполнится успешно со значением выполненного "обещания", независимо от завершения остальных "обещаний".

          +

          Если одно из "обещаний" исполнится успешно, возвращённое "обещание" асинхронно исполнится успешно со значением выполненного "обещания", независимо от завершения остальных "обещаний".

          • Если передан пустой итерируемый объект, тогда метод возвращает (синхронно) выполненное "обещание".
          • -
          • Если одно из переданных обещаний исполнится успешно, или в переданном итерируемом объекте не содержится "обещаний", "обещание" возвращенное из метода Promise.any асинхронно исполнится успешно.
          • +
          • Если одно из переданных обещаний исполнится успешно, или в переданном итерируемом объекте не содержится "обещаний", "обещание" возвращённое из метода Promise.any асинхронно исполнится успешно.

          Исполнение с ошибкой(Rejection)

          -

          Если все переданные "обещания" будут отклонены(rejected), Promise.any асинхронно будет отклонено в одном из двух вариантов (которые еще не были согласованы): либо

          +

          Если все переданные "обещания" будут отклонены(rejected), Promise.any асинхронно будет отклонено в одном из двух вариантов (которые ещё не были согласованы): либо

          • Массив(Array) содержащий причины отклонения всех "обещаний" переданных в итерируемом объекте, либо
          • diff --git a/files/ru/web/javascript/reference/global_objects/promise/catch/index.html b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html index 91d7970796..3515b9c63c 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/catch/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch ---
            {{JSRef}}
            -

            Метод catch() возвращает Promise(обещание) и работает только в случае отклонения обещания. Ведет себя аналогично вызову {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}}.

            +

            Метод catch() возвращает Promise(обещание) и работает только в случае отклонения обещания. Ведёт себя аналогично вызову {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}}.

            Syntax

            @@ -31,7 +31,7 @@ p.catch(function(reason) {
            reason
            Причина отказа.
            -

            Promise( Обещание ), возвращенное catch (), отклоняется, если onRejected выдает ошибку(throw) или возвращает Promise, который был отклонен; В противном случае Promise, возвращаемый catch () имеет статус  выполнено  (fulfilled)

            +

            Promise( Обещание ), возвращённое catch (), отклоняется, если onRejected выдаёт ошибку(throw) или возвращает Promise, который был отклонён; В противном случае Promise, возвращаемый catch () имеет статус  выполнено  (fulfilled)

          @@ -72,7 +72,7 @@ p1.then(function(value) {   console.log('Not fired due to the catch'); }); -// Следующий код ведет себя также, как вышенаписанный +// Следующий код ведёт себя также, как вышенаписанный p1.then(function(value) {   console.log(value); // "Success!" return Promise.reject('oh, no!'); diff --git a/files/ru/web/javascript/reference/global_objects/promise/finally/index.html b/files/ru/web/javascript/reference/global_objects/promise/finally/index.html index b1a53051fa..c12f7625a0 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/finally/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/finally/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally ---
          {{JSRef}}
          -

          Метод finally() возвращает {{jsxref("Promise")}}. Когда Promise (обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это дает возможность запустить один раз определенный участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился Promise.

          +

          Метод finally() возвращает {{jsxref("Promise")}}. Когда Promise (обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это даёт возможность запустить один раз определённый участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился Promise.

          Это позволяет вам избавиться от дубликации кода в обработчиках {{jsxref("Promise.then", "then()")}} и {{jsxref("Promise.catch", "catch()")}}.

          @@ -14,11 +14,11 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally
          p.finally(onFinally);
           
           p.finally(function() {
          -   // завершен (успешно или с ошибкой)
          +   // завершён (успешно или с ошибкой)
           });
           
           p.finally(() => {
          -// завершен (успешно или с ошибкой)
          +// завершён (успешно или с ошибкой)
           });

          Параметры

          @@ -40,7 +40,7 @@ p.finally(() => {
          • Использование finally() позволяет избежать двойного объявления одной и той же функции или создания переменной. 
          • -
          • finally не получает аргументов, так как не существует способа определить, будет ли обещание выполнено успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости ее/его передавать.
          • +
          • finally не получает аргументов, так как не существует способа определить, будет ли обещание выполнено успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости её/его передавать.
          • В отличие от Promise.resolve(2).then(() => {}, () => {}) (результатом которого будет resolved-промис, со значением undefined), результатом Promise.resolve(2).finally(() => {}) будет resolved-промис со значением 2.
          • Аналогично, в отличии от Promise.reject(3).then(() => {}, () => {}) (результатом которого будет resolved-промис, со значением undefined), результатом Promise.reject(3).finally(() => {}) будет rejected-промис со значением 3.
          diff --git a/files/ru/web/javascript/reference/global_objects/promise/index.html b/files/ru/web/javascript/reference/global_objects/promise/index.html index f5701b4694..7410136177 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/index.html @@ -29,13 +29,13 @@ new Promise(function(resolve, reject) { ... });
          executor
          -
          Объект функции с двумя аргументами resolve и reject. Функция executor  получает оба аргумента и выполняется сразу, еще до того как конструктор вернет созданный объект. Первый аргумент (resolve) вызывает успешное исполнение промиса, второй (reject) отклоняет его.
          +
          Объект функции с двумя аргументами resolve и reject. Функция executor  получает оба аргумента и выполняется сразу, ещё до того как конструктор вернёт созданный объект. Первый аргумент (resolve) вызывает успешное исполнение промиса, второй (reject) отклоняет его.
          Обычно функция executor описывает выполнение какой-то асинхронной работы, по завершении которой необходимо вызвать функцию resolve или reject. Обратите внимание, что возвращаемое значение функции executor игнорируется.

          Описание

          -

          Интерфейс Promise (промис) представляет собой обертку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается обещание (промис) получить результат в некоторый момент в будущем.

          +

          Интерфейс Promise (промис) представляет собой обёртку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается обещание (промис) получить результат в некоторый момент в будущем.

          Promise может находиться в трёх состояниях:

          @@ -45,14 +45,14 @@ new Promise(function(resolve, reject) { ... });
        • отклонено (rejected): операция завершена с ошибкой.
        -

        При создании промис находится в ожидании (pending), а затем может стать исполненным  (fulfilled), вернув полученный результат (значение), или отклоненным (rejected), вернув причину отказа. В любом из этих случаев вызывается обработчик, прикрепленный к промису методом then. (Если в момент назначения обработчика промис уже исполнен или отклонен, обработчик все равно будет вызван, т.е. асинхронное исполнение промиса и назначение обработчика не будет происходить в «состоянии гонки», как, например, в случае с событиями в DOM.)

        +

        При создании промис находится в ожидании (pending), а затем может стать исполненным  (fulfilled), вернув полученный результат (значение), или отклонённым (rejected), вернув причину отказа. В любом из этих случаев вызывается обработчик, прикреплённый к промису методом then. (Если в момент назначения обработчика промис уже исполнен или отклонён, обработчик все равно будет вызван, т.е. асинхронное исполнение промиса и назначение обработчика не будет происходить в «состоянии гонки», как, например, в случае с событиями в DOM.)

        Так как методы {{JSxRef("Promise.then", "Promise.prototype.then()")}} и {{JSxRef("Promise.catch", "Promise.prototype.catch()")}} сами возвращают промис, их можно вызывать цепочкой, создавая соединения.

        -

        Примечание: говорят, что промис находится в состоянии завершен (settled) когда он или исполнен или отклонен, т.е. в любом состоянии, кроме ожидания (это лишь форма речи, не являющаяся настоящим состоянием промиса). Также можно встретить термин исполин (resolved) — это значит что промис завершен или "заблокирован" в ожидании завершения другого промиса. В статье состояния и fates приводится более подробное описание терминологии.

        +

        Примечание: говорят, что промис находится в состоянии завершён (settled) когда он или исполнен или отклонён, т.е. в любом состоянии, кроме ожидания (это лишь форма речи, не являющаяся настоящим состоянием промиса). Также можно встретить термин исполин (resolved) — это значит что промис завершён или "заблокирован" в ожидании завершения другого промиса. В статье состояния и fates приводится более подробное описание терминологии.

        Свойства

        @@ -69,13 +69,13 @@ new Promise(function(resolve, reject) { ... });
        {{jsxref("Promise.all", "Promise.all(iterable)")}}
        Ожидает исполнения всех промисов или отклонения любого из них.
        -
        Возвращает промис, который исполнится после исполнения всех промисов в iterable. В случае, если любой из промисов будет отклонен, Promise.all будет также отклонен.
        +
        Возвращает промис, который исполнится после исполнения всех промисов в iterable. В случае, если любой из промисов будет отклонён, Promise.all будет также отклонен.
        {{JSxRef("Promise.allSettled", "Promise.allSettled(iterable)")}}
        Ожидает завершения всех полученных промисов (как исполнения так и отклонения).
        Возвращает промис, который исполняется когда все полученные промисы завершены (исполнены или отклонены), содержащий массив результатов исполнения полученных промисов.
        {{jsxref("Promise.race", "Promise.race(iterable)")}}
        Ожидает исполнения или отклонения любого из полученных промисов.
        -
        Возвращает промис, который будет исполнен или отклонен с результатом исполнения первого исполненного или отклонённого промиса из .iterable.
        +
        Возвращает промис, который будет исполнен или отклонён с результатом исполнения первого исполненного или отклонённого промиса из .iterable.
        @@ -88,7 +88,7 @@ new Promise(function(resolve, reject) { ... });
        Возвращает промис, исполненный с результатом value.
        @@ -105,7 +105,7 @@ new Promise(function(resolve, reject) { ... });

        Создание промиса

        -

        Объект Promise создается при помощи ключевого слова new и своего конструктора. Конструктор Promise принимает в качестве аргумента функцию, называемую "исполнитель" (executor function). Эта функция должна принимать две функции-колбэка в качестве параметров. Первый из них (resolve) вызывается, когда асинхронная операция завершилась успешно и вернула результат своего исполнения в виде значения. Второй колбэк (reject) вызывается, когда операция не удалась, и возвращает значение, указывающее на причину неудачи, чаще всего объект ошибки.

        +

        Объект Promise создаётся при помощи ключевого слова new и своего конструктора. Конструктор Promise принимает в качестве аргумента функцию, называемую "исполнитель" (executor function). Эта функция должна принимать две функции-колбэка в качестве параметров. Первый из них (resolve) вызывается, когда асинхронная операция завершилась успешно и вернула результат своего исполнения в виде значения. Второй колбэк (reject) вызывается, когда операция не удалась, и возвращает значение, указывающее на причину неудачи, чаще всего объект ошибки.

        const myFirstPromise = new Promise((resolve, reject) => {
           // выполняется асинхронная операция, которая в итоге вызовет:
        diff --git a/files/ru/web/javascript/reference/global_objects/promise/race/index.html b/files/ru/web/javascript/reference/global_objects/promise/race/index.html
        index 79b3fba0b0..da184495a3 100644
        --- a/files/ru/web/javascript/reference/global_objects/promise/race/index.html
        +++ b/files/ru/web/javascript/reference/global_objects/promise/race/index.html
        @@ -10,7 +10,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race
         ---
         
        {{JSRef}}
        -

        Метод Promise.race(iterable) возвращает выполненное или отклоненное обещание, в зависимости от того, с каким результатом завершится первое из переданных обещаний, со значением или причиной отклонения этого обещания.

        +

        Метод Promise.race(iterable) возвращает выполненное или отклонённое обещание, в зависимости от того, с каким результатом завершится первое из переданных обещаний, со значением или причиной отклонения этого обещания.

        {{EmbedInteractiveExample("pages/js/promise-race.html")}}

        @@ -27,11 +27,11 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race

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

        -

        Выполненный или отклоненный {{jsxref("Promise")}} в зависимости от результата первого завершенного из переданных в итерируемом объекте обещаний.

        +

        Выполненный или отклонённый {{jsxref("Promise")}} в зависимости от результата первого завершённого из переданных в итерируемом объекте обещаний.

        Описание

        -

        Метод race  возвращает Обещание (Promise) с результатом, первого завершенного из переданных обещаний. Т.е. возвратит resolve или reject, в зависимости от того, что случится первым.

        +

        Метод race  возвращает Обещание (Promise) с результатом, первого завершённого из переданных обещаний. Т.е. возвратит resolve или reject, в зависимости от того, что случится первым.

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/promise/reject/index.html b/files/ru/web/javascript/reference/global_objects/promise/reject/index.html index 9bb06a2115..ebaed59a5f 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/reject/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/reject/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject ---
        {{JSRef}}
        -

        Метод Promise.reject(reason) возвращает объект Promise, который был отклонен по указанной причине.

        +

        Метод Promise.reject(reason) возвращает объект Promise, который был отклонён по указанной причине.

        Синтаксис

        @@ -19,13 +19,13 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject

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

        -

        Отклоненный с указанной причиной {{jsxref("Promise")}}.

        +

        Отклонённый с указанной причиной {{jsxref("Promise")}}.

        Описание

        -

        Promise.reject возвращает Promise который был отклонен. В целях отладки и выборочного отлова ошибок, удобно использовать в качестве причины объекты {{jsxref("Error")}}.

        +

        Promise.reject возвращает Promise который был отклонён. В целях отладки и выборочного отлова ошибок, удобно использовать в качестве причины объекты {{jsxref("Error")}}.

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html b/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html index 1b5cff1c3e..f61fad91ec 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html @@ -10,7 +10,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve ---
        {{JSRef}}
        -

        Метод Promise.resolve(value) возвращает {{jsxref("Promise")}} выполненный с переданным значением. Если переданное значение является thenable - объект (т.е. имеет метод {{jsxref("Promise.then", "\"then\" method")}}), возвращаемое обещание будет следовать thenable - объекту, принимая свое состояние; в ином случае возвращаемое обещание будет выполнено с переданным значением.

        +

        Метод Promise.resolve(value) возвращает {{jsxref("Promise")}} выполненный с переданным значением. Если переданное значение является thenable - объект (т.е. имеет метод {{jsxref("Promise.then", "\"then\" method")}}), возвращаемое обещание будет следовать thenable - объекту, принимая своё состояние; в ином случае возвращаемое обещание будет выполнено с переданным значением.

        Синтаксис

        diff --git a/files/ru/web/javascript/reference/global_objects/promise/then/index.html b/files/ru/web/javascript/reference/global_objects/promise/then/index.html index 211b7692dd..a380cb5b5c 100644 --- a/files/ru/web/javascript/reference/global_objects/promise/then/index.html +++ b/files/ru/web/javascript/reference/global_objects/promise/then/index.html @@ -12,7 +12,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then

        Метод then() возвращает {{jsxref("Promise")}}. Метод может принимать два аргумента: колбэк-функции для случаев выполнения и отклонения промиса.

        -

         Если один или оба аргумента отсутствуют или их значения не функции, то then пропустит их и не выбросит ошибку. Если для Promise, который переходит в состояние выполнен или отклонен вызван метод then, и у данного метода нет нужного обработчика, то в таком случае then просто возвращает промис с состоянием начального Promise, для которого then был вызван.

        +

         Если один или оба аргумента отсутствуют или их значения не функции, то then пропустит их и не выбросит ошибку. Если для Promise, который переходит в состояние выполнен или отклонён вызван метод then, и у данного метода нет нужного обработчика, то в таком случае then просто возвращает промис с состоянием начального Promise, для которого then был вызван.

        Синтаксис

        @@ -32,7 +32,7 @@ p.then(value => {
        onFulfilled {{optional_inline}}
        {{jsxref("Function")}} вызывается, когда Promise выполнен. Эта функция принимает один аргумент, значение с которым промис был выполнен. Если значение onFulfilled не функция, то оно автоматически заменяется на "Identity" функцию (возвращает полученный аргумент)
        onRejected {{optional_inline}}
        -
        {{jsxref("Function")}} вызывается, когда Promise  отклонен. Эта функция принимает один аргумент, значение с которым промис был отклонен. Если значение onRejected не функция, то оно автоматически заменяется на "Thrower" функцию (выбрасывает полученный аргумент как ошибку)
        +
        {{jsxref("Function")}} вызывается, когда Promise  отклонён. Эта функция принимает один аргумент, значение с которым промис был отклонён. Если значение onRejected не функция, то оно автоматически заменяется на "Thrower" функцию (выбрасывает полученный аргумент как ошибку)

        Описание

        @@ -58,7 +58,7 @@ p1.then(function(value) {

        Соединение

        -

        Так как метод then возвращает Promise (обещание), вы можете объединить несколько вызовов then в цепочку. Значения возвращаемые из onFulfilled или onRejected колбэков будут автоматически обернуты в обещание.

        +

        Так как метод then возвращает Promise (обещание), вы можете объединить несколько вызовов then в цепочку. Значения возвращаемые из onFulfilled или onRejected колбэков будут автоматически обёрнуты в обещание.

        var p2 = new Promise(function(resolve, reject) {
           resolve(1);
        @@ -88,7 +88,7 @@ p2.then(function(value) {
             var j = response.json();
             // можем что-нибудь делать с j
             return j; // в случае выполнения обещания, значение
        -              // передается в fetch_current_data().then()
        +              // передаётся в fetch_current_data().then()
           });
         }
         
        diff --git a/files/ru/web/javascript/reference/global_objects/reflect/construct/index.html b/files/ru/web/javascript/reference/global_objects/reflect/construct/index.html index e5eaa5af39..e1c5fcbdbc 100644 --- a/files/ru/web/javascript/reference/global_objects/reflect/construct/index.html +++ b/files/ru/web/javascript/reference/global_objects/reflect/construct/index.html @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct ---
        {{JSRef}}
        -

        Статический метод Reflect.construct() работает как new operator. Он эквивалентен new target(...args). Это также дает дополнительную возможность указать другой прототип.

        +

        Статический метод Reflect.construct() работает как new operator. Он эквивалентен new target(...args). Это также даёт дополнительную возможность указать другой прототип.

        {{EmbedInteractiveExample("pages/js/reflect-construct.html")}}
        diff --git a/files/ru/web/javascript/reference/global_objects/reflect/index.html b/files/ru/web/javascript/reference/global_objects/reflect/index.html index 9a93944a56..8f5f7bb306 100644 --- a/files/ru/web/javascript/reference/global_objects/reflect/index.html +++ b/files/ru/web/javascript/reference/global_objects/reflect/index.html @@ -71,7 +71,7 @@ Reflect.has(duck, 'haircut');

        Добавление нового свойства в объект

        Reflect.set(duck, 'eyes', 'black');
        -// вернется "true" если вызов успешен
        +// вернётся "true" если вызов успешен
         // объект "duck" теперь содержит свойство "eyes" со значением "black"

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

        diff --git a/files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html b/files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html index 8579639a52..c99438a6d8 100644 --- a/files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html +++ b/files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys ---
        {{JSRef}}
        -

        Статический метод Reflect.ownKeys() возвращает массив имен, а также Symbols собственных полей объекта target .

        +

        Статический метод Reflect.ownKeys() возвращает массив имён, а также Symbols собственных полей объекта target .

        {{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}
        diff --git a/files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html b/files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html index 80c4692d97..fffdadf7c9 100644 --- a/files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html +++ b/files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html @@ -40,7 +40,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@split

        Этот метод существует для кастомизации поведения (разбиения) подкласса RegExp.

        -

        Если аргумент str не объект типа {{jsxref("RegExp")}}, метод {{jsxref("String.prototype.split()")}} не вызывается, так же не создается объект типа {{jsxref("RegExp")}}.

        +

        Если аргумент str не объект типа {{jsxref("RegExp")}}, метод {{jsxref("String.prototype.split()")}} не вызывается, так же не создаётся объект типа {{jsxref("RegExp")}}.

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/regexp/index.html b/files/ru/web/javascript/reference/global_objects/regexp/index.html index 20b0d9b10e..359a8f167d 100644 --- a/files/ru/web/javascript/reference/global_objects/regexp/index.html +++ b/files/ru/web/javascript/reference/global_objects/regexp/index.html @@ -293,7 +293,7 @@ var re = new RegExp('\\w+');
        @@ -380,7 +380,7 @@ var re = new RegExp('\\w+');

        Сопоставляется с x, только если x не предшествует y

        Например, /(?<!-)\d+/ сопоставится с цифрой, только если ей не предшествует минус.
        - /(?<!-)\d+/.exec('3') вернет "3".
        + /(?<!-)\d+/.exec('3') вернёт "3".
         /(?<!-)\d+/.exec('-3')  не сопоставится с цифрой, тк цифре перед цифрой 3 присутствует минус.

        diff --git a/files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html b/files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html index 3d86f2958e..89551d517b 100644 --- a/files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html +++ b/files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html @@ -19,7 +19,7 @@ RegExp['$&']

        Значение свойства lastMatch доступно только для чтение и изменяется при успешном совпадении с регулярным выражением.

        -

        Поскольку использование символа "&" приведет к выбрасыванию ошибки {{jsxref("SyntaxError")}}, обратиться к данному свойству с помощью точечной нотации(RegExp.$&) нельзя. Вместо этого стоит использовать скобочную нотацию (RegExp['$&']).

        +

        Поскольку использование символа "&" приведёт к выбрасыванию ошибки {{jsxref("SyntaxError")}}, обратиться к данному свойству с помощью точечной нотации(RegExp.$&) нельзя. Вместо этого стоит использовать скобочную нотацию (RegExp['$&']).

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/regexp/n/index.html b/files/ru/web/javascript/reference/global_objects/regexp/n/index.html index 4873c56af0..5becd52a06 100644 --- a/files/ru/web/javascript/reference/global_objects/regexp/n/index.html +++ b/files/ru/web/javascript/reference/global_objects/regexp/n/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/n ---
        {{JSRef}} {{non-standard_header}}
        -

        Нестандартные свойства $1, $2, $3, $4, $5, $6, $7, $8, $9 являются статическими и доступными только для чтения свойствами регулярных выражений, которые содержат найденные подстроки, обернутые в скобки.

        +

        Нестандартные свойства $1, $2, $3, $4, $5, $6, $7, $8, $9 являются статическими и доступными только для чтения свойствами регулярных выражений, которые содержат найденные подстроки, обёрнутые в скобки.

        Синтаксис

        @@ -26,7 +26,7 @@ RegExp.$9

        Значения этих свойств не доступны для изменения, они модифицируются всякий раз при успешном совпадении регулярного выражения.

        -

        Количество возможных подстрок в круглых скобках неограничено, но объект RegExp может содержать в себе только последние 9. Вы можете получить доступ ко всем подстрокам, совпавшим с выражениями внутри круглых скобок, с помощью индексов возвращенного массива.

        +

        Количество возможных подстрок в круглых скобках неограничено, но объект RegExp может содержать в себе только последние 9. Вы можете получить доступ ко всем подстрокам, совпавшим с выражениями внутри круглых скобок, с помощью индексов возвращённого массива.

        Эти свойства могу использоваться при замене текста в методе {{jsxref("String.replace")}}. Когда используете его, не добавляйте их в RegExp. Пример ниже демонстрирует правильное применение. Когда круглые скобки не включены в регулярное выражение, код интерпретирует такие значения, как $n буквально, как литерал (n - положительное число).

        diff --git a/files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html b/files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html index ea9db422df..af771e9feb 100644 --- a/files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html +++ b/files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html @@ -53,7 +53,7 @@ console.log(regex.unicode); // true

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

        - +

        {{Compat("javascript.builtins.RegExp.unicode")}}

        diff --git a/files/ru/web/javascript/reference/global_objects/set/delete/index.html b/files/ru/web/javascript/reference/global_objects/set/delete/index.html index e2ecf26cfd..e6987bffe3 100644 --- a/files/ru/web/javascript/reference/global_objects/set/delete/index.html +++ b/files/ru/web/javascript/reference/global_objects/set/delete/index.html @@ -26,7 +26,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete

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

        -

        true, если элемент был успешно удален из объекта Set, иначе false.

        +

        true, если элемент был успешно удалён из объекта Set, иначе false.

        Примеры

        @@ -35,15 +35,15 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete
        var mySet = new Set();
         mySet.add('foo');
         
        -mySet.delete('bar'); // Вернет false. Отсутствует элемент "bar" для удаления.
        -mySet.delete('foo'); // Вернет true.  Успешно удален.
        +mySet.delete('bar'); // Вернёт false. Отсутствует элемент "bar" для удаления.
        +mySet.delete('foo'); // Вернёт true.  Успешно удалён.
         
        -mySet.has('foo');    // Вернет false. Элемент "foo" больше не присутствует.
        +mySet.has('foo');    // Вернёт false. Элемент "foo" больше не присутствует.
         

        Давайте проверим как удалить Object из Set.

        -
        var setObj = new Set(); // Создаем новый Set.
        +
        var setObj = new Set(); // Создаём новый Set.
         
         setObj.add({x: 10, y: 20}); // Добавляем объект в набор.
         
        diff --git a/files/ru/web/javascript/reference/global_objects/set/foreach/index.html b/files/ru/web/javascript/reference/global_objects/set/foreach/index.html
        index 5ed212666b..643c1f4b3f 100644
        --- a/files/ru/web/javascript/reference/global_objects/set/foreach/index.html
        +++ b/files/ru/web/javascript/reference/global_objects/set/foreach/index.html
        @@ -60,7 +60,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach
         
         

        Содержимое объекта Set 

        -

        Приведенный код показывает состояние каждого элемента в объекте Set:

        +

        Приведённый код показывает состояние каждого элемента в объекте Set:

        function logSetElements(value1, value2, set) {
             console.log('s[' + value1 + '] = ' + value2);
        diff --git a/files/ru/web/javascript/reference/global_objects/set/set/index.html b/files/ru/web/javascript/reference/global_objects/set/set/index.html
        index 66e1d0108e..5dabdcbd5d 100644
        --- a/files/ru/web/javascript/reference/global_objects/set/set/index.html
        +++ b/files/ru/web/javascript/reference/global_objects/set/set/index.html
        @@ -18,7 +18,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Set/Set
         
        iterable {{optional_inline}}
        -

        Если передается итеративный объект, все его элементы будут добавлены в новый Set.

        +

        Если передаётся итеративный объект, все его элементы будут добавлены в новый Set.

        Если вы не укажете этот параметр или его значение равно нулю, новый набор будет пустым.

        diff --git a/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html index d625a5a809..ecd0cb98a9 100644 --- a/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html +++ b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer ---
        {{JSRef}}
        -

        Объект SharedArrayBuffer используется для создания разделенного буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту {{jsxref("ArrayBuffer")}}, но могут быть использованы для создания обзора на разделенную память. В отличие от ArrayBufferSharedArrayBuffer не может быть отсоединен.

        +

        Объект SharedArrayBuffer используется для создания разделённого буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту {{jsxref("ArrayBuffer")}}, но могут быть использованы для создания обзора на разделённую память. В отличие от ArrayBufferSharedArrayBuffer не может быть отсоединен.

        Синтаксис

        @@ -29,15 +29,15 @@ translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer

        Для разделения памяти с помощью объекта {{jsxref("SharedArrayBuffer")}} между одним агентом в кластере и другим (агент может быть как основной программой web-страницы, так и одним из web-workers), используются postMessage и structured cloning.

        -

        Алгоритм структурированного клонирования принимает SharedArrayBuffers и TypedArrays, отображенный в SharedArrayBuffers. В обоих случаях, объект  SharedArrayBuffer передается получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для {{jsxref("ArrayBuffer")}}). Однако, блок общих данных, на который ссылаются оба объекта SharedArrayBuffer, это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.

        +

        Алгоритм структурированного клонирования принимает SharedArrayBuffers и TypedArrays, отображённый в SharedArrayBuffers. В обоих случаях, объект  SharedArrayBuffer передаётся получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для {{jsxref("ArrayBuffer")}}). Однако, блок общих данных, на который ссылаются оба объекта SharedArrayBuffer, это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.

        var sab = new SharedArrayBuffer(1024);
         worker.postMessage(sab);
         
        -

        Обновление и синхронизация разделенной памяти с помощью Атомарных операций

        +

        Обновление и синхронизация разделённой памяти с помощью Атомарных операций

        -

        Разделенная память может быть создана и изменена одновременно в  workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы {{jsxref("Атомарные", "атомарные", "", 1)}} операции .

        +

        Разделённая память может быть создана и изменена одновременно в  workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы {{jsxref("Атомарные", "атомарные", "", 1)}} операции .

        API, принимающие объекты SharedArrayBuffer

        @@ -61,7 +61,7 @@ worker.postMessage(sab);
        SharedArrayBuffer.length
        -
        Длина конструктора SharedArrayBuffer, чье значение равно 1.
        +
        Длина конструктора SharedArrayBuffer, чьё значение равно 1.
        {{jsxref("SharedArrayBuffer.prototype")}}
        Позволяет дополнительные свойства для всех объектов SharedArrayBuffer.
        diff --git a/files/ru/web/javascript/reference/global_objects/string/match/index.html b/files/ru/web/javascript/reference/global_objects/string/match/index.html index 2819776d46..e857555cc6 100644 --- a/files/ru/web/javascript/reference/global_objects/string/match/index.html +++ b/files/ru/web/javascript/reference/global_objects/string/match/index.html @@ -70,7 +70,7 @@ console.log(found); // '.1' - это последнее значение, сопоставленное с группой `(\.\d)`. // Свойство 'index' содержит значение (0) индекса совпадения // относительно начала сопоставления -// Свойство 'input' содержит значение введенной строки.
        +// Свойство 'input' содержит значение введённой строки.

        Пример: использование флагов глобальности и игнорирования регистра с методом match()

        diff --git a/files/ru/web/javascript/reference/global_objects/string/matchall/index.html b/files/ru/web/javascript/reference/global_objects/string/matchall/index.html index 6c8defbc17..1b698ae6cc 100644 --- a/files/ru/web/javascript/reference/global_objects/string/matchall/index.html +++ b/files/ru/web/javascript/reference/global_objects/string/matchall/index.html @@ -72,7 +72,7 @@ Array.from(matches, m => m[0]);

        Улучшенный доступ к группам захвата

        -

        Еще одна веская причина использовать matchAll это улучшенный доступ к группам захвата. Группы захвата игнорируются при использовании match() с глобальным флагом /g:

        +

        Ещё одна веская причина использовать matchAll это улучшенный доступ к группам захвата. Группы захвата игнорируются при использовании match() с глобальным флагом /g:

        var regexp = /t(e)(st(\d?))/g;
         var str = 'test1test2';
        diff --git a/files/ru/web/javascript/reference/global_objects/string/padend/index.html b/files/ru/web/javascript/reference/global_objects/string/padend/index.html
        index a380c3f50d..45c72b87e2 100644
        --- a/files/ru/web/javascript/reference/global_objects/string/padend/index.html
        +++ b/files/ru/web/javascript/reference/global_objects/string/padend/index.html
        @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd
         ---
         
        {{JSRef}}{{SeeCompatTable}}
        -

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

        +

        Метод padEnd() дополняет текущую строку с помощью заданной строки (в конечном счёте повторяя), так чтобы результирующая строка достигла заданной длины. Дополнение применяется в конце (справа) текущей строки.

        Синтаксис

        @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd
        targetLength
        Длина результирующей строки, после того как текущая строка была дополнена. Если этот параметр меньше длины текущей строки, то будет возвращена текущая строка , как она есть.
        padString {{optional_inline}}
        -
        Строка для дополнения текущей строки с. Если эта строка слишком длинная, она будет урезана и будет применяться ее левая большая часть. " " (U+0020) - значение по умолчанию для этого параметра.
        +
        Строка для дополнения текущей строки с. Если эта строка слишком длинная, она будет урезана и будет применяться её левая большая часть. " " (U+0020) - значение по умолчанию для этого параметра.

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

        @@ -39,7 +39,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd

        Характеристики

        -

        Этот метод еще не достиг стандарта ECMAScript. Сейчас он в состоянии proposal for ECMAScript.

        +

        Этот метод ещё не достиг стандарта ECMAScript. Сейчас он в состоянии proposal for ECMAScript.

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

        diff --git a/files/ru/web/javascript/reference/global_objects/string/replaceall/index.html b/files/ru/web/javascript/reference/global_objects/string/replaceall/index.html index 8ccf95507f..432f977fc5 100644 --- a/files/ru/web/javascript/reference/global_objects/string/replaceall/index.html +++ b/files/ru/web/javascript/reference/global_objects/string/replaceall/index.html @@ -7,7 +7,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll

        Метод replaceAll() возвращает новую строку со всеми совпадениями pattern , который меняется на replacementpattern может быть строкой или регулярным выражением, и replacement может быть строкой или функция возвращающая каждое совпадение.

        -

        Исходная строка остается без изменений.

        +

        Исходная строка остаётся без изменений.

        {{EmbedInteractiveExample("pages/js/string-replaceall.html")}}
        @@ -19,14 +19,14 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll
        -

        Когда вы используете `regexp` вы должны установить флаг глобального поиска ("g"), иначе вернется ошибка TypeError: "replaceAll must be called with a global RegExp".

        +

        Когда вы используете `regexp` вы должны установить флаг глобального поиска ("g"), иначе вернётся ошибка TypeError: "replaceAll must be called with a global RegExp".

        Parameters

        regexp (pattern)
        -
        Регулярное выражение или буква с глобальным флагом поиска ("g"). Совпадения меняются на newSubstr или значении возвращенное указанной функцией function. A RegExp без глобального флага поиска ("g") вернет ошибку TypeError: "replaceAll must be called with a global RegExp".
        +
        Регулярное выражение или буква с глобальным флагом поиска ("g"). Совпадения меняются на newSubstr или значении возвращённое указанной функцией function. A RegExp без глобального флага поиска ("g") вернёт ошибку TypeError: "replaceAll must be called with a global RegExp".
        substr
        Подстрока, которая заменится newSubstr. Обрабатывается как буквенная строка, не интерпретируется как регулярное выражение.
        newSubstr (replacement)
        @@ -45,7 +45,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll

        Указание строки в качестве параметра

        -

        Замененная строка может включатся в следующие специальные шаблоны:

        +

        Заменённая строка может включатся в следующие специальные шаблоны:

        \n -

        Где n является целым положительным числом. Обратная ссылка на последнюю сопоставившуюся подстроку в n-ных по счёту круглых скобках в регулярном выражении (нумерация скобок идет слева направо).

        +

        Где n является целым положительным числом. Обратная ссылка на последнюю сопоставившуюся подстроку в n-ных по счёту круглых скобках в регулярном выражении (нумерация скобок идёт слева направо).

        Например, шаблон /яблоко(,)\sапельсин\1/ сопоставится подстроке «яблоко, апельсин,» в строке «яблоко, апельсин, вишня, персик». Более подробный пример смотрите после этой таблицы.

        @@ -82,7 +82,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll

        Вы можете передать функцию вторым параметром. Этом случае, функция вызывается после нахождения совпадений. Результат функции может быть использована как замещающая строка. (Внимание: Выше упомянутые специальные шаблоны замены в данном случае неприменимы.)

        -

        Функция может быть вызвана многократно для каждого замененного совпадения, если регулярное выражение указано с глобальным флагом("g").

        +

        Функция может быть вызвана многократно для каждого заменённого совпадения, если регулярное выражение указано с глобальным флагом("g").

        Функция имеет следующие аргументы:

        diff --git a/files/ru/web/javascript/reference/global_objects/string/slice/index.html b/files/ru/web/javascript/reference/global_objects/string/slice/index.html index 5b6f3895c4..021c1839ae 100644 --- a/files/ru/web/javascript/reference/global_objects/string/slice/index.html +++ b/files/ru/web/javascript/reference/global_objects/string/slice/index.html @@ -35,7 +35,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/String/slice

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

        -

        Новая строка, содержащая извлеченную часть строки.

        +

        Новая строка, содержащая извлечённую часть строки.

        Описание

        @@ -75,15 +75,15 @@ str.slice(0, -1); // вернёт 'Приближается утро'

        В этом примере начальным индексом считается 11-й символ с конца строки, а конечным - 16-й с начала.

        -
        str.slice(-11, 16); // вернет 'ается утр'
        +
        str.slice(-11, 16); // вернёт 'ается утр'

        Здесь начальным индексом считается 6-й символ от начала строки, а конечным - 7-й с конца.

        -
        str.slice(6, -7); // вернет 'жаетс'
        +
        str.slice(6, -7); // вернёт 'жаетс'

        В этом примере оба индекса считаются с конца строки: 5-й для начального индекса, 1-й для конечного.

        -
        str.slice(-5, -1); // вернет 'утро'
        +
        str.slice(-5, -1); // вернёт 'утро'

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

        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 index 5b4a6ee85c..87d85f23ce 100644 --- a/files/ru/web/javascript/reference/global_objects/symbol/for/index.html +++ b/files/ru/web/javascript/reference/global_objects/symbol/for/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for ---
        {{JSRef}}
        -

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

        +

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

        Синтаксис

        diff --git a/files/ru/web/javascript/reference/global_objects/symbol/index.html b/files/ru/web/javascript/reference/global_objects/symbol/index.html index 739474189c..71361cc695 100644 --- a/files/ru/web/javascript/reference/global_objects/symbol/index.html +++ b/files/ru/web/javascript/reference/global_objects/symbol/index.html @@ -35,7 +35,7 @@ var sym2 = Symbol("foo"); var sym3 = Symbol("foo"); -

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

        +

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

        Symbol("foo") === Symbol("foo"); // false
        @@ -55,7 +55,7 @@ typeof symObj; // "object"

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

        -

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

        +

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

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

        @@ -97,9 +97,9 @@ typeof symObj; // "object"
        {{jsxref("Symbol.hasInstance")}}
        Метод, определяющий, распознает ли конструктор некоторый объект как свой экземпляр. Используется оператором {{jsxref("Operators/instanceof", "instanceof")}}.
        {{jsxref("Symbol.isConcatSpreadable")}}
        -
        Булево значение, показывающее, должен ли объект быть сведен к плоскому представлению (англ. flatten) в виде массива его элементов функцией {{jsxref("Array.prototype.concat()")}}.
        +
        Булево значение, показывающее, должен ли объект быть сведён к плоскому представлению (англ. flatten) в виде массива его элементов функцией {{jsxref("Array.prototype.concat()")}}.
        {{jsxref("Symbol.unscopables")}}
        -
        Массив строковых имен свойств. Позволяет скрыть свойства от инструкции with (прежде всего для обратной совместимости).
        +
        Массив строковых имён свойств. Позволяет скрыть свойства от инструкции with (прежде всего для обратной совместимости).
        {{jsxref("Symbol.species")}}
        Метод, определяющий конструктор для порождённых объектов.
        {{jsxref("Symbol.toPrimitive")}}
        @@ -112,7 +112,7 @@ typeof symObj; // "object"
        {{jsxref("Symbol.for()", "Symbol.for(key)")}}
        -
        Ищет существующие символы по заданному ключу и возвращает его, если он найден. В противном случае создается новый символ для данного ключа в глобальном реестре символов.
        +
        Ищет существующие символы по заданному ключу и возвращает его, если он найден. В противном случае создаётся новый символ для данного ключа в глобальном реестре символов.
        {{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}
        Получает по разделяемому символу его ключ из глобального реестра символов.
        @@ -153,7 +153,7 @@ typeof Symbol.iterator === 'symbol'

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

        -

        Символы не перечисляются при итерации {{jsxref("Statements/for...in","for...in")}}. В дополнение к этому, {{jsxref("Object.getOwnPropertyNames()")}} не вернет символьные свойства объекта. Тем не менее, их можно получить с помощью {{jsxref("Object.getOwnPropertySymbols()")}}.

        +

        Символы не перечисляются при итерации {{jsxref("Statements/for...in","for...in")}}. В дополнение к этому, {{jsxref("Object.getOwnPropertyNames()")}} не вернёт символьные свойства объекта. Тем не менее, их можно получить с помощью {{jsxref("Object.getOwnPropertySymbols()")}}.

        var obj = {};
         
        @@ -175,7 +175,7 @@ for (var i in obj) {
         
         

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

        -

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

        +

        Объекты-обёртки для 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 index ac35c69346..1252063034 100644 --- a/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html +++ b/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html @@ -21,7 +21,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive

        Описание

        -

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

        +

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

        Примеры

        diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/index.html index 17bd236f34..3db99bf074 100644 --- a/files/ru/web/javascript/reference/global_objects/typedarray/index.html +++ b/files/ru/web/javascript/reference/global_objects/typedarray/index.html @@ -35,7 +35,7 @@ Int8Array(), Uint8Array(), Uint8ClampedArray(), Int16Array(), Uint16Array(), Int
        object
        Новый массив создаётся так, как если бы была вызвана функция TypedArray.from()
        buffer, byteOffset, length
        -
        Когда происходит вызов с параметрами buffer и опциональными параметрами byteOffset и length, то будет создан новый типизированный массив, который будет отражать buffer типа {{jsxref("ArrayBuffer")}}. Параметры byteOffset и length определяют диапазон (размер) памяти, выводимый данным массивоподобным представлением. Если оба этих параметра (byteOffset и length) опущены, то будет использован весь буфер buffer; если опущен только length, то будет выведен весь остаток буфера после смещения начала отсчета элементов, заданного параметром byteOffset.
        +
        Когда происходит вызов с параметрами buffer и опциональными параметрами byteOffset и length, то будет создан новый типизированный массив, который будет отражать buffer типа {{jsxref("ArrayBuffer")}}. Параметры byteOffset и length определяют диапазон (размер) памяти, выводимый данным массивоподобным представлением. Если оба этих параметра (byteOffset и length) опущены, то будет использован весь буфер buffer; если опущен только length, то будет выведен весь остаток буфера после смещения начала отсчёта элементов, заданного параметром byteOffset.

        Описание

        @@ -218,7 +218,7 @@ for (var k in typedArrayTypes)
        - + diff --git a/files/ru/web/javascript/reference/global_objects/unescape/index.html b/files/ru/web/javascript/reference/global_objects/unescape/index.html index b0052bf0dc..0aecf842d0 100644 --- a/files/ru/web/javascript/reference/global_objects/unescape/index.html +++ b/files/ru/web/javascript/reference/global_objects/unescape/index.html @@ -11,7 +11,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/unescape

        Описание

        -

        Устаревший метод unescape(str) создает новую строку в которой шестнадцатеричная последовательность символов вида %xx заменяется эквивалентами из кодировки ASCII. Знаки, закодированные в формате %uxxxx (знаки Юникода), заменяются знаками Юникода в шестнадцатеричной кодировке xxxx.

        +

        Устаревший метод unescape(str) создаёт новую строку в которой шестнадцатеричная последовательность символов вида %xx заменяется эквивалентами из кодировки ASCII. Знаки, закодированные в формате %uxxxx (знаки Юникода), заменяются знаками Юникода в шестнадцатеричной кодировке xxxx.

        Последовательность может быть результатом работы функции вроде {{jsxref("Global_Objects/escape", "escape")}}. Т.к. {{jsxref("Global_Objects/decodeURIComponent", "unescape")}} является устаревшей, используйте {{jsxref("Global_Objects/decodeURI", "decodeURI")}} или {{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} вместо неё.

        diff --git a/files/ru/web/javascript/reference/global_objects/uneval/index.html b/files/ru/web/javascript/reference/global_objects/uneval/index.html index 21cd4e9958..2fa30aeeaa 100644 --- a/files/ru/web/javascript/reference/global_objects/uneval/index.html +++ b/files/ru/web/javascript/reference/global_objects/uneval/index.html @@ -10,7 +10,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/uneval
        Сводка
        -

        uneval() метод создает строковое представление исходного кода объекта.

        +

        uneval() метод создаёт строковое представление исходного кода объекта.

        Синтаксис

        diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html index 260264b01d..e99dbd4a2d 100644 --- a/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html +++ b/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html @@ -32,7 +32,7 @@ wm.has(window) // false

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

        -

        Не входит ни в одну текущую спецификацию или черновик. Этот метод был частью черновика ECMAScript 6, до 28 ревизии (версия от 14 октября, 2014), но был удален в последующих версиях черновика. В финальном стандарте его не будет.

        +

        Не входит ни в одну текущую спецификацию или черновик. Этот метод был частью черновика ECMAScript 6, до 28 ревизии (версия от 14 октября, 2014), но был удалён в последующих версиях черновика. В финальном стандарте его не будет.

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

        diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html index 8072855d1e..595f0ab82e 100644 --- a/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html +++ b/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html @@ -15,7 +15,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete
        key
        -
        Обязателен. Ключ элемента, который будет уделен из объекта WeakMap.
        +
        Обязателен. Ключ элемента, который будет уделён из объекта WeakMap.

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

        diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/index.html index 1bf1b3c017..c849670ad7 100644 --- a/files/ru/web/javascript/reference/global_objects/weakmap/index.html +++ b/files/ru/web/javascript/reference/global_objects/weakmap/index.html @@ -27,7 +27,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap

        Почему WeakMap?

        -

        Опытный JavaScript разработчик заметит, что map API можно реализовать на JavaScript c помощью двух массивов (один для ключей, второй для значений) и четырех общих API методов. Установка элементов в этот map должна будет одновременно запушить ключи и значения. В результате индексы ключа и значения будут корректными. Получение значений с map потребует итерирование ключей, чтобы найти совпадение, а затем использование индекса этого соответствия для извлечения соответствующего значения из массива значений.

        +

        Опытный JavaScript разработчик заметит, что map API можно реализовать на JavaScript c помощью двух массивов (один для ключей, второй для значений) и четырёх общих API методов. Установка элементов в этот map должна будет одновременно запушить ключи и значения. В результате индексы ключа и значения будут корректными. Получение значений с map потребует итерирование ключей, чтобы найти совпадение, а затем использование индекса этого соответствия для извлечения соответствующего значения из массива значений.

        У такой реализации было бы два главных неудобства. Первым является O(n) поиск (где n — количество ключей в map), так как обе операции требуют итерирование списка ключей для нахождения совпадения. Вторым – проблема утечки памяти. В словарях, написанных вручную, массив с ключами будет хранить ссылки на объекты-ключи, не давая им быть помеченными сборщиком мусора. В нативных WeakMap, ссылки на объекты-ключи хранятся «слабо», что означает то, что они не предотвратят сборку мусора в том случае, если других ссылок на объект не будет.

        diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html index 90f80474a6..e463183f01 100644 --- a/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html +++ b/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html @@ -69,7 +69,7 @@ fetch('simple.wasm').then(response =>

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

        - +

        {{Compat("javascript.builtins.WebAssembly.compile")}}

        diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html index 106519cdf2..79b702b091 100644 --- a/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html +++ b/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html @@ -31,7 +31,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStrea

        Примеры

        -

        Следующий пример (см. Нашу демонстрацию compile-streaming.html на GitHub и view it live) напрямую передает модуль .wasm из исходника, затем компилирует его в объект {{jsxref("WebAssembly.Module")}}.
        +

        Следующий пример (см. Нашу демонстрацию compile-streaming.html на GitHub и view it live) напрямую передаёт модуль .wasm из исходника, затем компилирует его в объект {{jsxref("WebAssembly.Module")}}.
        Поскольку функция compileStreaming() принимает обещание для объекта {{domxref("Response")}}, вы можете напрямую передать ему вызов {{domxref("WindowOrWorkerGlobalScope.fetch()")}}, и он передаст ответ в выполняемую функцию.

        var importObject = { imports: { imported_func: arg => console.log(arg) } };
        @@ -40,7 +40,7 @@ WebAssembly.compileStreaming(fetch('simple.wasm'))
         .then(module => WebAssembly.instantiate(module, importObject))
         .then(instance => instance.exports.exported_func());
        -

        Затем создается полученный экземпляр модуля с помощью {{jsxref("WebAssembly.instantiate()")}} и вызывается экспортированная функция.

        +

        Затем создаётся полученный экземпляр модуля с помощью {{jsxref("WebAssembly.instantiate()")}} и вызывается экспортированная функция.

        Характеристики

        @@ -65,7 +65,7 @@ WebAssembly.compileStreaming(fetch('simple.wasm'))

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

        - +

        {{Compat("javascript.builtins.WebAssembly.compileStreaming")}}

        diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/index.html index daff5d4ee7..5265fcdac1 100644 --- a/files/ru/web/javascript/reference/global_objects/webassembly/index.html +++ b/files/ru/web/javascript/reference/global_objects/webassembly/index.html @@ -5,9 +5,9 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly ---
        {{JSRef}}{{SeeCompatTable}}
        -

        Объект JavaScript WebAssembly действует как пространство имен для всего WebAssembly-связанного функционала.

        +

        Объект JavaScript WebAssembly действует как пространство имён для всего WebAssembly-связанного функционала.

        -

        В отличие от большинства других глобальных объектов, WebAssembly не является конструктором (это не объект функции). Можно сравнить его с {{jsxref("Math")}}, который так же является пространством имен констант и функций, или  {{jsxref("Intl")}}, который является пространством имен для конструкторов интернационализации и других языково-чувствительных функций.

        +

        В отличие от большинства других глобальных объектов, WebAssembly не является конструктором (это не объект функции). Можно сравнить его с {{jsxref("Math")}}, который так же является пространством имён констант и функций, или  {{jsxref("Intl")}}, который является пространством имён для конструкторов интернационализации и других языково-чувствительных функций.

        Описание

        @@ -34,24 +34,24 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly
        {{jsxref("WebAssembly.Module()")}}
        -
        Создает новый объект WebAssembly Module.
        +
        Создаёт новый объект WebAssembly Module.
        {{jsxref("WebAssembly.Instance()")}}
        -
        Создает новый объект WebAssembly Instance.
        +
        Создаёт новый объект WebAssembly Instance.
        {{jsxref("WebAssembly.Memory()")}}
        -
        Создает новый объект WebAssembly Memory.
        +
        Создаёт новый объект WebAssembly Memory.
        {{jsxref("WebAssembly.Table()")}}
        -
        Создает новый объект WebAssembly Table.
        +
        Создаёт новый объект WebAssembly Table.
        {{jsxref("WebAssembly.CompileError()")}}
        -
        Создает новый объект WebAssembly CompileError.
        +
        Создаёт новый объект WebAssembly CompileError.
        {{jsxref("WebAssembly.LinkError()")}}
        -
        Создает новый объект WebAssembly LinkError.
        +
        Создаёт новый объект WebAssembly LinkError.
        {{jsxref("WebAssembly.RuntimeError()")}}
        -
        Создает новый объект WebAssembly RuntimeError.
        +
        Создаёт новый объект WebAssembly RuntimeError.

        Примеры

        -

        После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаем экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (result), содержащий скомпилированные Module и объекты Instance. Мы можем вызвать Exported WebAssembly function, которая была экспортирована через Instance.

        +

        После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаём экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (result), содержащий скомпилированные Module и объекты Instance. Мы можем вызвать Exported WebAssembly function, которая была экспортирована через Instance.

        var importObject = {
           imports: {
        @@ -148,7 +148,7 @@ fetch('simple.wasm').then(response =>
         
        {{SpecName('Typed Array')}} {{Spec2('Typed Array')}}Определяет работу TypedArray и ArrayBufferView. Заменен в ECMAScript 6.Определяет работу TypedArray и ArrayBufferView. Заменён в ECMAScript 6.
        {{SpecName('ES6', '#sec-typedarray-objects', 'TypedArray Objects')}}
        -

        [1] WebAssembly включен в Firefox 52+, хотя не валиден в Firefox 52 Extended Support Release (ESR.)

        +

        [1] WebAssembly включён в Firefox 52+, хотя не валиден в Firefox 52 Extended Support Release (ESR.)

        [2] В настоящее время поддерживается флаг «Экспериментальные функции JavaScript».  Для более подробной информации смотрите этот blog post.

        diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html index eb9bc5ce48..23fab50edb 100644 --- a/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html +++ b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table ---
        {{JSRef}}
        -

        Объект WebAssembly.Table() - это JavaScript обертка — структура похожая на массив, представляющая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.

        +

        Объект WebAssembly.Table() - это JavaScript обёртка — структура похожая на массив, представляющая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.

        Обратите внимание: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.

        @@ -15,7 +15,7 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table
        WebAssembly.Table()
        -
        Создает новый объект Table.
        +
        Создаёт новый объект Table.

        Экземпляры Table

        @@ -44,14 +44,14 @@ translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table

        Примеры

        -

        Следующий пример (смотри исходный код и живую версию table2.html) создает новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух элементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и элементы равны {{jsxref("null")}}.

        +

        Следующий пример (смотри исходный код и живую версию table2.html) создаёт новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух элементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и элементы равны {{jsxref("null")}}.

        var tbl = new WebAssembly.Table({initial:2, element:"anyfunc"});
         console.log(tbl.length);  // "2"
         console.log(tbl.get(0));  // "null"
         console.log(tbl.get(1));  // "null"
        -

        После этого мы создаем объект импорта содержащий таблицу:

        +

        После этого мы создаём объект импорта содержащий таблицу:

        var importObj = {
           js: {
        @@ -59,7 +59,7 @@ console.log(tbl.get(1));  // "null"
        } };
        -

        После этого, мы создаем экземпляр модуля wasm (table2.wasm) используя метод {{jsxref("WebAssembly.instantiateStreaming()")}}.  Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри текстовую версию).  Таким образом, после создания wasm-модуля, таблица имеет туже длину, но элементы таблицы стали функциями экспортированными из WebAssembly которые можно вызывать из JS.

        +

        После этого, мы создаём экземпляр модуля wasm (table2.wasm) используя метод {{jsxref("WebAssembly.instantiateStreaming()")}}.  Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри текстовую версию).  Таким образом, после создания wasm-модуля, таблица имеет туже длину, но элементы таблицы стали функциями экспортированными из WebAssembly которые можно вызывать из JS.

        WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
         .then(function(obj) {
        @@ -68,9 +68,9 @@ console.log(tbl.get(1));  // "null"
          console.log(tbl.get(1)()); });
      -

      Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращенную из талицы (т.е. get(0)() вместо get(0)) .

      +

      Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращённую из талицы (т.е. get(0)() вместо get(0)) .

      -

      Этот пример показывает что мы создаем и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.

      +

      Этот пример показывает что мы создаём и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.

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

      diff --git a/files/ru/web/javascript/reference/iteration_protocols/index.html b/files/ru/web/javascript/reference/iteration_protocols/index.html index cc9b66658a..4c42e875f7 100644 --- a/files/ru/web/javascript/reference/iteration_protocols/index.html +++ b/files/ru/web/javascript/reference/iteration_protocols/index.html @@ -9,7 +9,7 @@ translation_of: Web/JavaScript/Reference/Iteration_protocols
      {{jsSidebar("More")}}
      -

      Одно из нововведений стандарта ECMAScript 2015 - протоколы перебора, которые могут реализованы любым объектом, соблюдая при этом определенные правила.

      +

      Одно из нововведений стандарта ECMAScript 2015 - протоколы перебора, которые могут реализованы любым объектом, соблюдая при этом определённые правила.

      Протоколы перебора

      @@ -42,7 +42,7 @@ translation_of: Web/JavaScript/Reference/Iteration_protocols

      Протокол "Итератор" определяет стандартный способ получения последовательности значений  (конечной или бесконечной).

      -

      Объект является итератором, если в нем определен метод next() , реализующий следующую логику:

      +

      Объект является итератором, если в нем определён метод next() , реализующий следующую логику:

      @@ -129,7 +129,7 @@ someString + "" // "hi"

      {{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} и {{jsxref("Set")}} итерируемы, так как их прототипы содержат @@iterator метод, а {{jsxref("Object")}} нет, так как прототип {{jsxref("Object")}} не содержит метода @@iterator

      -

      Итерируемость определенная пользователем

      +

      Итерируемость определённая пользователем

      Мы можем создать итерируемый объект сами:

      diff --git a/files/ru/web/javascript/reference/lexical_grammar/index.html b/files/ru/web/javascript/reference/lexical_grammar/index.html index 24705ce8ec..9c74d62e61 100644 --- a/files/ru/web/javascript/reference/lexical_grammar/index.html +++ b/files/ru/web/javascript/reference/lexical_grammar/index.html @@ -50,7 +50,7 @@ ECMAScript также определяет ключевые слова и лит

      Пробелы

      -

      Пробельные символы улучшают читабельность исходного текста и разделяет токены друг от друга. Пробельные символы обычно не обязательны для функционирования кода. Утилиты для уменьшения объема кода часто удаляют пробельные символы, чтобы уменьшить объем кода.

      +

      Пробельные символы улучшают читабельность исходного текста и разделяет токены друг от друга. Пробельные символы обычно не обязательны для функционирования кода. Утилиты для уменьшения объёма кода часто удаляют пробельные символы, чтобы уменьшить объем кода.

      @@ -212,7 +212,7 @@ comment();

      Третий специализированный синтаксис комментариев, шебанг комментарий, в процессе стандартизации в ECMAScript (смотреть Hashbang Grammar proposal).

      -

      Шебанг комментарий ведет себя точно также как и однострочный (//) комментарий. Вместо этого, он начинается с #! и действителен только в самом начале скрипта или модуля. Обратите внимание, что никакие пробелы не разрешены перед #!. Комментарий состоит из всех символов после #! до конца первой строки; только такой комментарий разрешен.

      +

      Шебанг комментарий ведёт себя точно также как и однострочный (//) комментарий. Вместо этого, он начинается с #! и действителен только в самом начале скрипта или модуля. Обратите внимание, что никакие пробелы не разрешены перед #!. Комментарий состоит из всех символов после #! до конца первой строки; только такой комментарий разрешен.

      Шебанг комментарий определяет путь к  JavaScript интерпретатору, скрипт которого Вы хотите выполнить. Пример, как это работает:

      @@ -366,7 +366,7 @@ false 0777 // распознается, как восьмеричное число, 511 - как десятичное число -

      Имейте в виду, что литералы десятичных чисел могут начинаться с нуля (0), за которым следует другое десятичное число, но в случае, если число начинается с нуля и за ним идет цифра меньше 8, то число будет распознано как восьмеричное. This won't throw in JavaScript, see {{bug(957513)}}. See also the page about {{jsxref('Global_Objects/parseInt','parseInt()','Octal_interpretations_with_no_radix')}}.

      +

      Имейте в виду, что литералы десятичных чисел могут начинаться с нуля (0), за которым следует другое десятичное число, но в случае, если число начинается с нуля и за ним идёт цифра меньше 8, то число будет распознано как восьмеричное. This won't throw in JavaScript, see {{bug(957513)}}. See also the page about {{jsxref('Global_Objects/parseInt','parseInt()','Octal_interpretations_with_no_radix')}}.

      Binary (двоичные числа)

      @@ -403,7 +403,7 @@ var m = 0o644; // 420
      var o = { a: "foo", b: "bar", c: 42 };
       
      -// сокращенная нотация. Появилась в ES2015
      +// сокращённая нотация. Появилась в ES2015
       var a = "foo", b = "bar", c = 42;
       var o = {a, b, c};
       // вместо
      @@ -481,7 +481,7 @@ tag `string text ${expression} string text`
    • return
    • -

      Спецификация ECMAScript напоминает о трех правилах вставки точки с запятой.

      +

      Спецификация ECMAScript напоминает о трёх правилах вставки точки с запятой.

      1. Точка с запятой ставится до, когда ограничитель строки или "}" is encountered that is not allowed by the grammar.

      diff --git a/files/ru/web/javascript/reference/operators/addition/index.html b/files/ru/web/javascript/reference/operators/addition/index.html index 94efb4b63e..c55fa767fe 100644 --- a/files/ru/web/javascript/reference/operators/addition/index.html +++ b/files/ru/web/javascript/reference/operators/addition/index.html @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Operators/Addition ---
      {{jsSidebar("Operators")}}
      -

      Оператор сложения (+) создает сумму числовых операндов или конкатенацию строк.

      +

      Оператор сложения (+) создаёт сумму числовых операндов или конкатенацию строк.

      {{EmbedInteractiveExample("pages/js/expressions-addition.html")}}
      diff --git a/files/ru/web/javascript/reference/operators/await/index.html b/files/ru/web/javascript/reference/operators/await/index.html index ecce9884c5..6159cd8b19 100644 --- a/files/ru/web/javascript/reference/operators/await/index.html +++ b/files/ru/web/javascript/reference/operators/await/index.html @@ -22,7 +22,7 @@ translation_of: Web/JavaScript/Reference/Operators/await

      Описание

      -

      Оператор await заставляет функцию, объявленную с использованием оператора async, ждать выполнения Promise и продолжать выполнение после возвращения Promise значения. Впоследствии возвращает полученное из  Promise значение. Если типом значения, к которому был применен оператор await, является не Promise, то значение приводится к успешно выполненному Promise.

      +

      Оператор await заставляет функцию, объявленную с использованием оператора async, ждать выполнения Promise и продолжать выполнение после возвращения Promise значения. Впоследствии возвращает полученное из  Promise значение. Если типом значения, к которому был применён оператор await, является не Promise, то значение приводится к успешно выполненному Promise.

      Если Promise отклоняется, то await генерирует исключение с отклонённым значением.

      @@ -54,7 +54,7 @@ f1(); f2(); -

      Если Promise отклонен, то выбрасывается исключение с переданным значением.

      +

      Если Promise отклонён, то выбрасывается исключение с переданным значением.

      async function f3() {
         try {
      diff --git a/files/ru/web/javascript/reference/operators/bitwise_and/index.html b/files/ru/web/javascript/reference/operators/bitwise_and/index.html
      index 6c08ef0ded..099bbe37cd 100644
      --- a/files/ru/web/javascript/reference/operators/bitwise_and/index.html
      +++ b/files/ru/web/javascript/reference/operators/bitwise_and/index.html
      @@ -72,7 +72,7 @@ translation_of: Web/JavaScript/Reference/Operators/Bitwise_AND
       14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
       
      -

      Побитовое И для любого числа x с 0 дает 0.

      +

      Побитовое И для любого числа x с 0 даёт 0.

      Примеры

      diff --git a/files/ru/web/javascript/reference/operators/comma_operator/index.html b/files/ru/web/javascript/reference/operators/comma_operator/index.html index 85d739fdab..de9bc91731 100644 --- a/files/ru/web/javascript/reference/operators/comma_operator/index.html +++ b/files/ru/web/javascript/reference/operators/comma_operator/index.html @@ -31,13 +31,13 @@ original_slug: Web/JavaScript/Reference/Operators/Оператор_Запята

      Примеры

      -

      Если a это двумерный массив элементов размерностью 10 х 10, то приведенный ниже код использует оператор запятая для одновременного изменения двух переменных за раз.

      +

      Если a это двумерный массив элементов размерностью 10 х 10, то приведённый ниже код использует оператор запятая для одновременного изменения двух переменных за раз.

      Следующий код выводит в консоль значения диагональных элементов массива:

      for (let i = 0, j = 9; i <= 9; i++, j--)
         console.log("a[" + i + "][" + j + "] = " + a[i][j]);
      -

      Заметьте, что запятая при объявлении переменной varlet или const не является оператором запятая, так как в данном случае она находится не в выражении. Скорее, это спец символ в объявлении переменных, комбинирующий их множество в одно выражение. Практически, эта запятая ведет себя почти так же, как и запятая.

      +

      Заметьте, что запятая при объявлении переменной varlet или const не является оператором запятая, так как в данном случае она находится не в выражении. Скорее, это спец символ в объявлении переменных, комбинирующий их множество в одно выражение. Практически, эта запятая ведёт себя почти так же, как и запятая.

        // подобное объявление запрещено в строгом режиме(strict mode)
       
      diff --git a/files/ru/web/javascript/reference/operators/conditional_operator/index.html b/files/ru/web/javascript/reference/operators/conditional_operator/index.html
      index 8b035ad9e4..7eabde0687 100644
      --- a/files/ru/web/javascript/reference/operators/conditional_operator/index.html
      +++ b/files/ru/web/javascript/reference/operators/conditional_operator/index.html
      @@ -42,9 +42,9 @@ original_slug: Web/JavaScript/Reference/Operators/Условный_операт
       
       
      var firstCheck = false,
           secondCheck = false,
      -    access = firstCheck ? "Доступ запрещен" : secondCheck ? "Доступ запрещен" : "Доступ разрешен";
      +    access = firstCheck ? "Доступ запрещён" : secondCheck ? "Доступ запрещён" : "Доступ разрешён";
       
      -console.log( access ); // выводит в консоль "Доступ разрешен"
      +console.log( access ); // выводит в консоль "Доступ разрешён"

      Тернарные операции можно использовать и сами по себе - для выполнения различных операций:

      @@ -62,18 +62,18 @@ age > 18 ? ( location.assign("continue.html") ) : ( stop = true, - alert("Простите, вы еще так юны!") + alert("Простите, вы ещё так юны!") ); -

      При присвоении значения также возможно выполнение более одной операции. В этом случае переменной будет присвоено то значение, которое стоит последним в списке значений, разделенных запятой.

      +

      При присвоении значения также возможно выполнение более одной операции. В этом случае переменной будет присвоено то значение, которое стоит последним в списке значений, разделённых запятой.

      var age = 16;
       
       var url = age > 18 ? (
           alert("Хорошо, вы можете продолжить."),
      -    // alert вернет "undefined", но это будет проигнорировано, потому что
      -    // не является последним в списке значений, разделенных запятой
      +    // alert вернёт "undefined", но это будет проигнорировано, потому что
      +    // не является последним в списке значений, разделённых запятой
           "continue.html" // значение будет присвоено, если age > 18
       ) : (
           alert("Вы слишком молоды!"),
      diff --git a/files/ru/web/javascript/reference/operators/delete/index.html b/files/ru/web/javascript/reference/operators/delete/index.html
      index 2edf33b67e..d7722fa829 100644
      --- a/files/ru/web/javascript/reference/operators/delete/index.html
      +++ b/files/ru/web/javascript/reference/operators/delete/index.html
      @@ -64,18 +64,18 @@ delete property // удаляет свойства глобальног
       

      delete эффективен только применительно к свойствам объектов. Он не оказывает никакого влияния на имена переменных и функций.
      Присвоение значения свойству без указания объекта (без оператора var) иногда неверно характеризуется, как глобальная переменная, (например x = 5). На самом деле происходит присвоение значения свойству глобального объекта.

      -

      delete не может удалить определенные свойства встроенных объектов (таких как Object, Array, Math и так далее). В спецификации ECMA-262 они обозначены как DontDelete.

      +

      delete не может удалить определённые свойства встроенных объектов (таких как Object, Array, Math и так далее). В спецификации ECMA-262 они обозначены как DontDelete.

      -
      x = 42;         // создает свойство x в глобальном объекте
      +
      x = 42;         // создаёт свойство x в глобальном объекте
       var y = 43;     // объявляет новую переменную, y
       myobj = {};
      -myobj.h = 4;    // создает свойство h в myobj
      -myobj.k = 5;    // создает свойство k в myobj
      +myobj.h = 4;    // создаёт свойство h в myobj
      +myobj.k = 5;    // создаёт свойство k в myobj
       
       delete x;       // возвращает true  (x - свойство глобального объекта и может быть удалено)
       delete y;       // возвращает false (delete не влияет на имена переменных)
      -delete Math.PI; // возвращает false (delete не влияет на определенные встроенные свойства)
      -delete myobj.h; // возвращает true  (свойства, определенные пользователем могут быть удалены)
      +delete Math.PI; // возвращает false (delete не влияет на определённые встроенные свойства)
      +delete myobj.h; // возвращает true  (свойства, определённые пользователем могут быть удалены)
       
       with(myobj) {
           delete k;   // возвращает true  (эквивалентно delete myobj.k)
      @@ -89,7 +89,7 @@ delete myobj;   // возвращает true  (myobj это свойство г
       Foo.prototype.bar = 42;
       var foo = new Foo();
       delete foo.bar;           // возвращает true, но безрезультатно, так как bar - наследуемое свойство
      -alert(foo.bar);           // выводит 42, свойство все еще наследуется
      +alert(foo.bar);           // выводит 42, свойство все ещё наследуется
       delete Foo.prototype.bar; // удаляет свойство из прототипа
       alert(foo.bar);           // выводит "undefined", свойство больше не наследуется
      @@ -106,7 +106,7 @@ if (3 in trees) { // этот участок кода не выполнится }
      -

      Если Вы хотите, чтобы элемент массива существовал, но имел значение undefined, используйте значение undefined вместо оператора delete. В следующем примере, trees{{ mediawiki.external(3) }} принимает значение undefined, но элемент массива все еще существует:

      +

      Если Вы хотите, чтобы элемент массива существовал, но имел значение undefined, используйте значение undefined вместо оператора delete. В следующем примере, trees{{ mediawiki.external(3) }} принимает значение undefined, но элемент массива все ещё существует:

      var trees = ["redwood","bay","cedar","oak","maple"];
       trees[3]=undefined;
      @@ -116,9 +116,9 @@ if (3 in trees) {
       
       

      Проблема кроссбраузерности

      -

      Несмотря на то, что стандарт ECMAScript оставляет порядок итерации по свойствам объектов на усмотрение реализующей стороны, может оказаться так, что все основные браузеры поддерживают порядок итерации, основанный на принципе "свойство добавленное в объект раньше идет раньше" (по крайней мере для свойств не находящихся в прототипе). Однако, в случае с Internet Explorer, когда кто-нибудь использует delete с каким-либо свойством, это приводит к некоторым неожиданным результатам, заставляя другие браузеры отказаться от использования простых объектов, таких как литералы объектов, в качестве ассоциативных массивов. В Internet Explorer, когда значение свойства установлено в undefined, после удаления этого свойства, если кто-нибудь позже добавит свойство с таким же именем, оно окажется в своей старой позиции, а не в конце итерационной последовательности, как ожидается.

      +

      Несмотря на то, что стандарт ECMAScript оставляет порядок итерации по свойствам объектов на усмотрение реализующей стороны, может оказаться так, что все основные браузеры поддерживают порядок итерации, основанный на принципе "свойство добавленное в объект раньше идёт раньше" (по крайней мере для свойств не находящихся в прототипе). Однако, в случае с Internet Explorer, когда кто-нибудь использует delete с каким-либо свойством, это приводит к некоторым неожиданным результатам, заставляя другие браузеры отказаться от использования простых объектов, таких как литералы объектов, в качестве ассоциативных массивов. В Internet Explorer, когда значение свойства установлено в undefined, после удаления этого свойства, если кто-нибудь позже добавит свойство с таким же именем, оно окажется в своей старой позиции, а не в конце итерационной последовательности, как ожидается.

      -

      Поэтому, если Вы хотите симулировать упорядоченный ассоциативный массив в кроссбраузерной среде, вам придется либо использовать два отдельных массива (один для ключей и один для значений), либо построить массив из объектов с одним свойством и так далее.

      +

      Поэтому, если Вы хотите симулировать упорядоченный ассоциативный массив в кроссбраузерной среде, вам придётся либо использовать два отдельных массива (один для ключей и один для значений), либо построить массив из объектов с одним свойством и так далее.

      Внешние ссылки

      diff --git a/files/ru/web/javascript/reference/operators/in/index.html b/files/ru/web/javascript/reference/operators/in/index.html index 7260b5913e..7570704fb8 100644 --- a/files/ru/web/javascript/reference/operators/in/index.html +++ b/files/ru/web/javascript/reference/operators/in/index.html @@ -58,7 +58,7 @@ var color2 = "coral"; "length" in color2
      -

      Использование оператора in с неопределенными или с уже удаленными свойствами

      +

      Использование оператора in с неопределёнными или с уже удалёнными свойствами

      Если вы удалили свойство при помощи оператора delete, то оператор in возвратит false для этого свойства.

      @@ -71,7 +71,7 @@ delete trees[3]; 3 in trees; // false
      -

      Если вы зададите свойству значение {{jsxref("Global_Objects/undefined", "undefined")}}, но не удалите его, то для этого свойства оператор in вернет значение true.

      +

      Если вы зададите свойству значение {{jsxref("Global_Objects/undefined", "undefined")}}, но не удалите его, то для этого свойства оператор in вернёт значение true.

      var mycar = {make: "Honda", model: "Accord", year: 1998};
       mycar.make = undefined;
      diff --git a/files/ru/web/javascript/reference/operators/instanceof/index.html b/files/ru/web/javascript/reference/operators/instanceof/index.html
      index dd264b0a07..a9274710e2 100644
      --- a/files/ru/web/javascript/reference/operators/instanceof/index.html
      +++ b/files/ru/web/javascript/reference/operators/instanceof/index.html
      @@ -109,7 +109,7 @@ myDate instanceof String;   // возвращает false
       
       

      Показывает, что mycar имеет тип Car и тип Object

      -

      Следующий код создает тип Car и экземпляр этого типа, mycar. Оператор instanceof показывает, что объект mycar имеет тип Car и тип Object.

      +

      Следующий код создаёт тип Car и экземпляр этого типа, mycar. Оператор instanceof показывает, что объект mycar имеет тип Car и тип Object.

      function Car(make, model, year) {
         this.make = make;
      diff --git a/files/ru/web/javascript/reference/operators/new.target/index.html b/files/ru/web/javascript/reference/operators/new.target/index.html
      index bab9b8e956..5feccb7b52 100644
      --- a/files/ru/web/javascript/reference/operators/new.target/index.html
      +++ b/files/ru/web/javascript/reference/operators/new.target/index.html
      @@ -47,8 +47,8 @@ Foo(); // ошибка "Foo() must be called with new"
       
       class B extends A { constructor() { super(); } }
       
      -var a = new A(); // вернет "A"
      -var b = new B(); // вернет "B"
      +var a = new A(); // вернёт "A"
      +var b = new B(); // вернёт "B"
       

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

      diff --git a/files/ru/web/javascript/reference/operators/new/index.html b/files/ru/web/javascript/reference/operators/new/index.html index b6f4ed80b7..6afdd75f04 100644 --- a/files/ru/web/javascript/reference/operators/new/index.html +++ b/files/ru/web/javascript/reference/operators/new/index.html @@ -9,7 +9,7 @@ translation_of: Web/JavaScript/Reference/Operators/new ---
      {{jsSidebar("Operators")}}
      -

      Оператор (операторная функция) new создает экземпляр объекта, встроенного или определенного пользователем, имеющего конструктор.

      +

      Оператор (операторная функция) new создаёт экземпляр объекта, встроенного или определённого пользователем, имеющего конструктор.

      Синтаксис

      @@ -29,7 +29,7 @@ translation_of: Web/JavaScript/Reference/Operators/new

      Описание

      -

      Создание объекта, определенного пользователем, требует два шага:

      +

      Создание объекта, определённого пользователем, требует два шага:

      1. Написать функцию, которая задаст тип объекта.
      2. @@ -41,14 +41,14 @@ translation_of: Web/JavaScript/Reference/Operators/new

        Когда исполняется new Foo(...) , происходит следующее:

          -
        1. Создается новый объект, наследующий Foo.prototype.
        2. +
        3. Создаётся новый объект, наследующий Foo.prototype.
        4. Вызывается конструктор — функция Foo с указанными аргументами и this, привязанным к только что созданному объекту. new Foo эквивалентно new Foo(), то есть если аргументы не указаны, Foo вызывается без аргументов.
        5. -
        6. Результатом выражения new становится объект, возвращенный конструктором. Если конструктор не возвращает объект явно, используется объект из п. 1. (Обычно конструкторы не возвращают значение, но они могут делать это, если нужно переопределить обычный процесс создания объектов.)
        7. +
        8. Результатом выражения new становится объект, возвращённый конструктором. Если конструктор не возвращает объект явно, используется объект из п. 1. (Обычно конструкторы не возвращают значение, но они могут делать это, если нужно переопределить обычный процесс создания объектов.)

        Всегда можно добавить свойство к уже созданному объекту. Например, car1.color = "black" добавляет свойство color к объекту car1, и присваивает ему значение "black". Это не затрагивает другие объекты. Чтобы добавить свойство ко всем объектам типа, нужно добавлять его в определение типа Car.

        -

        Добавить свойство к ранее определенному типу можно используя свойство Function.prototype. Это определит свойство для всех объектов, созданных этой функцией, а не только у какого-либо экземпляра. Следующий пример добавляет свойство color со значением null всем объектам типа car, а потом меняет его на  "black" только у экземпляра car1. Больше информации в статье prototype.

        +

        Добавить свойство к ранее определённому типу можно используя свойство Function.prototype. Это определит свойство для всех объектов, созданных этой функцией, а не только у какого-либо экземпляра. Следующий пример добавляет свойство color со значением null всем объектам типа car, а потом меняет его на  "black" только у экземпляра car1. Больше информации в статье prototype.

        function Car() {}
         car1 = new Car();
        @@ -80,7 +80,7 @@ console.log(car1.color);   // black
         
        var mycar = new Car("Eagle", "Talon TSi", 1993);
         
        -

        Это выражение создает экземпляр mycar и присваивает его свойствам указанные значения. Таким образом, mycar.make принимает значение "Eagle", mycar.year принимает значение 1993, и так далее.

        +

        Это выражение создаёт экземпляр mycar и присваивает его свойствам указанные значения. Таким образом, mycar.make принимает значение "Eagle", mycar.year принимает значение 1993, и так далее.

        Можно создать любое количество экземпляров car с помощью оператора new. Например:

        diff --git a/files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html b/files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html index 71484f05a1..a8482f38c8 100644 --- a/files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html +++ b/files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html @@ -131,7 +131,7 @@ console.log(foo.someBarProp?.toUpperCase()); // undefined

        Прогресс реализации

        -

        В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция еще не достигла стабильности в разных браузерах. Данные генерируются путем запуска соответствующих тестов функциональности в Test262, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.

        +

        В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция ещё не достигла стабильности в разных браузерах. Данные генерируются путём запуска соответствующих тестов функциональности в Test262, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.

        {{EmbedTest262ReportResultsTable("coalesce-expression")}}
        diff --git a/files/ru/web/javascript/reference/operators/object_initializer/index.html b/files/ru/web/javascript/reference/operators/object_initializer/index.html index 5f8d445e0d..8487de375a 100644 --- a/files/ru/web/javascript/reference/operators/object_initializer/index.html +++ b/files/ru/web/javascript/reference/operators/object_initializer/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Operators/Object_initializer ---
        {{JsSidebar("Операторы")}}
        -

        Объекты могут быть инициализированы с помощью new Object(), Object.create() или литеральной (инициирующей) нотации. Инициализатор объекта это разделенный запятыми список ноль или более пар имен свойств и ассоциируемых с ними значений, заключенных в фигурные скобки ({}).

        +

        Объекты могут быть инициализированы с помощью new Object(), Object.create() или литеральной (инициирующей) нотации. Инициализатор объекта это разделённый запятыми список ноль или более пар имён свойств и ассоциируемых с ними значений, заключённых в фигурные скобки ({}).

        Синтаксис

        @@ -26,16 +26,16 @@ var o = {

        Пожалуйста, просмотрите таблицу поддержки этих нотаций. В неподдерживаемом окружении, эти нотации приведут к синтаксической ошибке.

        -
        // Сокращение имен свойств (ES2015)
        +
        // Сокращение имён свойств (ES2015)
         var a = 'foo', b = 42, c = {};
         var o = {a, b, c};
         
        -// Сокращение имен методов (ES2015)
        +// Сокращение имён методов (ES2015)
         var o = {
           property([parameters]) {}
         };
         
        -// Вычисление имен свойств (ES2015)
        +// Вычисление имён свойств (ES2015)
         var prop = 'foo';
         var o = {
           [prop]: 'hey',
        @@ -52,7 +52,7 @@ var o = {
         
         
        var object = {};
        -

        Однако, преимущество литеральной или инициирующей нотации это возможность быстро создавать объекты со свойствами внутри фигурных скобок. Создается простой список пар ключ: значение, разделенных запятой. Следующий код создает объект с тремя парами значений и ключи это "foo", "age" и "baz". Значения этих ключей строка "bar", число 42 и другой объект.

        +

        Однако, преимущество литеральной или инициирующей нотации это возможность быстро создавать объекты со свойствами внутри фигурных скобок. Создаётся простой список пар ключ: значение, разделённых запятой. Следующий код создаёт объект с тремя парами значений и ключи это "foo", "age" и "baz". Значения этих ключей строка "bar", число 42 и другой объект.

        var object = {
           foo: 'bar',
        @@ -90,14 +90,14 @@ var o = {
             b = 42,
             c = {};
         
        -// Сокращение имен свойств (ES2015)
        +// Сокращение имён свойств (ES2015)
         var o = {a, b, c};
         
         // Иначе говоря,
         console.log((o.a === {a}.a)); // true
         
        -

        Повторение имен свойств

        +

        Повторение имён свойств

        Когда используются одинаковые имена свойств, второе свойство перезапишет первое.

        @@ -105,14 +105,14 @@ console.log((o.a === {a}.a)); // true console.log(a); // {x: 2}
        -

        В строгом режиме ECMAScript 5, повторение имен свойств будет воспринято как {{jsxref("SyntaxError")}}.  С введением вычисляемых имен свойств и появлением возможности создавать дубликаты во время выполнения кода, ECMAScript 2015 убрал это ограничение.

        +

        В строгом режиме ECMAScript 5, повторение имён свойств будет воспринято как {{jsxref("SyntaxError")}}.  С введением вычисляемых имён свойств и появлением возможности создавать дубликаты во время выполнения кода, ECMAScript 2015 убрал это ограничение.

        function haveES2015DuplicatePropertySemantics() {
           'use strict';
           try {
             ({prop: 1, prop: 2});
         
        -    // Не будет ошибки, повторение имен доступно в строгом режиме
        +    // Не будет ошибки, повторение имён доступно в строгом режиме
             return true;
           } catch(e) {
             // Будет ошибка, дубликаты запрещены в строгом режиме
        @@ -132,7 +132,7 @@ console.log(a); // {x: 2}
         
         

        В ECMAScript 2015, доступна короткая нотация, поэтому слово "function" более не обязательно.

        -
        // Сокращение имен методов (ES2015)
        +
        // Сокращение имён методов (ES2015)
         var o = {
           property([parameters]) {},
           *generator() {}
        @@ -243,7 +243,7 @@ assert(obj3.__proto__ === 17);
          
      3. В JSON значения могут быть только строками, числами, массивами, true, false, null или другими (JSON) объектами.
      4. Значения-функции (смотри "Методы" выше) не могут быть присвоены свойствам в JSON.
      5. Объект вида {{jsxref("Date")}} будет строкой после {{jsxref("JSON.parse()")}}.
      6. -
      7. {{jsxref("JSON.parse()")}} отклонит вычисляемые имена свойств и вернет ошибку.
      8. +
      9. {{jsxref("JSON.parse()")}} отклонит вычисляемые имена свойств и вернёт ошибку.
      10. Спецификации

        diff --git a/files/ru/web/javascript/reference/operators/optional_chaining/index.html b/files/ru/web/javascript/reference/operators/optional_chaining/index.html index 959d17c800..b82d793eee 100644 --- a/files/ru/web/javascript/reference/operators/optional_chaining/index.html +++ b/files/ru/web/javascript/reference/operators/optional_chaining/index.html @@ -48,7 +48,7 @@ let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.secon

        Вы можете использовать ?.когда необходимо вызвать метод, которого может не существовать. Это может быть полезно, например, при использовании API, в котором метод может быть недоступен из-за устаревания или не поддерживаем ости устройством пользователя.

        -

        Использование ?. с вызовом функции значит, что выполнение автоматически вернет undefined, а не выбросит исключение, если метод не найден:

        +

        Использование ?. с вызовом функции значит, что выполнение автоматически вернёт undefined, а не выбросит исключение, если метод не найден:

        let result = someInterface.customMethod?.();
        @@ -101,7 +101,7 @@ myMap.set("foo", {name: "baz", desc: "inga"}); let nameBar = myMap.get("bar")?.name;
        -

        Сокращенное выполнение

        +

        Сокращённое выполнение

        При использовании оператора опциональной последовательности в выражениях, где левая часть операнда равна null или undefined, выражение не будет выполнено. Например:

        diff --git a/files/ru/web/javascript/reference/operators/pipeline_operator/index.html b/files/ru/web/javascript/reference/operators/pipeline_operator/index.html index ec069c9e24..3fee1a8a0d 100644 --- a/files/ru/web/javascript/reference/operators/pipeline_operator/index.html +++ b/files/ru/web/javascript/reference/operators/pipeline_operator/index.html @@ -58,7 +58,7 @@ double(increment(double(double(5)))); // 42
      - +
      Таблица пробельных символов
      Pipeline operator draft Этап 1Еще не включен в спецификацию ECMAScript.Ещё не включён в спецификацию ECMAScript.
      diff --git a/files/ru/web/javascript/reference/operators/spread_syntax/index.html b/files/ru/web/javascript/reference/operators/spread_syntax/index.html index c96be61337..1019bdd757 100644 --- a/files/ru/web/javascript/reference/operators/spread_syntax/index.html +++ b/files/ru/web/javascript/reference/operators/spread_syntax/index.html @@ -44,7 +44,7 @@ translation_of: Web/JavaScript/Reference/Operators/Spread_syntax var args = [0, 1, 2]; myFunction.apply(null, args);
      -

      С spread syntax вышеприведенное можно записать как:

      +

      С spread syntax вышеприведённое можно записать как:

      function myFunction(x, y, z) { }
       var args = [0, 1, 2];
      @@ -58,7 +58,7 @@ myFunction(-1, ...args, 2, ...[3]);

      Apply для new

      -

      Вызывая конструктор через ключевое слово new, невозможно использовать массив и apply напрямую (apply выполняет [[Call]], а не [[Construct]]).Однако благодаря spread syntax, массив может быть с легкостью использован со словом new:

      +

      Вызывая конструктор через ключевое слово new, невозможно использовать массив и apply напрямую (apply выполняет [[Call]], а не [[Construct]]).Однако благодаря spread syntax, массив может быть с лёгкостью использован со словом new:

      var dateFields = [1970, 0, 1];  // 1 Jan 1970
       var d = new Date(...dateFields);
      @@ -103,7 +103,7 @@ var lyrics = ['head', ...parts, 'and', 'toes'];
       // ["head", "shoulders", "knees", "and", "toes"]
       
      -

      Аналогично развертыванию в массиве аргументов, ... может быть использован повсеместно и многократно в литерале массива.

      +

      Аналогично развёртыванию в массиве аргументов, ... может быть использован повсеместно и многократно в литерале массива.

      Копирование массива

      @@ -147,7 +147,7 @@ var arr2 = [3, 4, 5]; // Prepend all items from arr2 onto arr1 Array.prototype.unshift.apply(arr1, arr2) // arr1 is now [3, 4, 5, 0, 1, 2]
      -

      С использованием spread syntax [Следует отметить, что такой способ создает новый массив arr1. В отличие от {{jsxref("Array.unshift")}}, исходный массив не мутируется]:

      +

      С использованием spread syntax [Следует отметить, что такой способ создаёт новый массив arr1. В отличие от {{jsxref("Array.unshift")}}, исходный массив не мутируется]:

      var arr1 = [0, 1, 2];
       var arr2 = [3, 4, 5];
      @@ -183,11 +183,11 @@ var mergedObj = merge ( obj1, obj2);
       var mergedObj = merge ( {}, obj1, obj2);
       // Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }
      -

      В приведенном выше примере оператор распространения не работает так, как можно было бы ожидать: он распространяет массив аргументов в литерал объекта благодаря параметру rest.

      +

      В приведённом выше примере оператор распространения не работает так, как можно было бы ожидать: он распространяет массив аргументов в литерал объекта благодаря параметру rest.

      Только для итерируемых объектов

      -

      Spread syntax ( кроме случаев spread properties) может быть применен только к итерируемым объектам (iterable objects) :

      +

      Spread syntax ( кроме случаев spread properties) может быть применён только к итерируемым объектам (iterable objects) :

      var obj = {'key1': 'value1'};
       var array = [...obj]; // TypeError: obj is not iterable
      diff --git a/files/ru/web/javascript/reference/operators/this/index.html b/files/ru/web/javascript/reference/operators/this/index.html
      index 59761d890e..b373d12fa1 100644
      --- a/files/ru/web/javascript/reference/operators/this/index.html
      +++ b/files/ru/web/javascript/reference/operators/this/index.html
      @@ -13,7 +13,7 @@ translation_of: Web/JavaScript/Reference/Operators/this
       
       

      Поведение ключевого слова this в JavaScript несколько отличается по сравнению с остальными языками. Имеются также различия при использовании this в строгом и нестрогом режиме.

      -

      В большинстве случаев значение this определяется тем, каким образом вызвана функция. Значение this не может быть установлено путем присваивания во время исполнения кода и может иметь разное значение при каждом вызове функции. В ES5 представлен метод {{jsxref('Function.prototype.bind()', 'bind()')}}, который используется для {{jsxref('Operators/this','привязки значения ключевого слова this независимо от того, как вызвана функция','Метод_bind')}}. Также в ES2015 представлены {{jsxref('Functions/Arrow_functions', 'стрелочные функции')}}, которые не создают собственные привязки к this (они сохраняют значение this лексического окружения, в котором были созданы).

      +

      В большинстве случаев значение this определяется тем, каким образом вызвана функция. Значение this не может быть установлено путём присваивания во время исполнения кода и может иметь разное значение при каждом вызове функции. В ES5 представлен метод {{jsxref('Function.prototype.bind()', 'bind()')}}, который используется для {{jsxref('Operators/this','привязки значения ключевого слова this независимо от того, как вызвана функция','Метод_bind')}}. Также в ES2015 представлены {{jsxref('Functions/Arrow_functions', 'стрелочные функции')}}, которые не создают собственные привязки к this (они сохраняют значение this лексического окружения, в котором были созданы).

      {{EmbedInteractiveExample("pages/js/expressions-this.html")}}
      @@ -65,7 +65,7 @@ f1() === window; // window - глобальный объект в браузер f1() === global; // global - глобальный объект в Node
      -

      В строгом режиме, если значение this не установлено в контексте выполнения, оно остается undefined, как показано в следующем примере:

      +

      В строгом режиме, если значение this не установлено в контексте выполнения, оно остаётся undefined, как показано в следующем примере:

      function f2(){
         "use strict"; // см. strict mode
      @@ -77,7 +77,7 @@ f2() === undefined; // true
       
       
      Во втором примере this должно иметь значение {{jsxref("undefined")}}, потому что функция f2 была вызвана напрямую, а не как метод или свойство объекта (например, window.f2()). Реализация этой особенности не поддерживалась в некоторых браузерах, когда они впервые начали поддерживать {{jsxref('Strict_mode', 'строгий режим')}}. В результате они некорректно возвращали объект window.
      -

      Для того, чтобы при вызове функции установить this в определенное значение, используйте {{jsxref('Function.prototype.call()', 'call()')}} или {{jsxref('Function.prototype.apply()', 'apply()')}}, как в следующих примерах.

      +

      Для того, чтобы при вызове функции установить this в определённое значение, используйте {{jsxref('Function.prototype.call()', 'call()')}} или {{jsxref('Function.prototype.apply()', 'apply()')}}, как в следующих примерах.

      Пример 1

      @@ -128,7 +128,7 @@ bar.call('foo'); // [object String]

      Метод bind

      -

      ECMAScript 5 представил {{jsxref("Function.prototype.bind()")}}. Вызов f.bind(someObject) создает новую функцию с тем же телом и областью действия, что и f, но там, где в исходной функции используется this, в новой функции оно постоянно будет связано с первым аргументом bind, независимо от того, как функция используется.

      +

      ECMAScript 5 представил {{jsxref("Function.prototype.bind()")}}. Вызов f.bind(someObject) создаёт новую функцию с тем же телом и областью действия, что и f, но там, где в исходной функции используется this, в новой функции оно постоянно будет связано с первым аргументом bind, независимо от того, как функция используется.

      function f() {
         return this.a;
      @@ -155,7 +155,7 @@ console.log(foo() === globalObject); // true

      Note: если аргумент this передаётся в call, bind или apply при вызове стрелочной функции, он будет проигнорирован. Вы всё ещё можете добавить аргументы к вызову, но первый аргумент (thisArg) должен быть установлен в null.

      -

      Неважно, как стрелочная функция foo() будет вызвана, её значение this будет указывать на глобальный объект. this будет сохранять свое значение, даже если функция foo() будет вызвана как метод объекта (что в обычных функциях связывает this с объектом вызова) или с использованием методов call, apply или bind:

      +

      Неважно, как стрелочная функция foo() будет вызвана, её значение this будет указывать на глобальный объект. this будет сохранять своё значение, даже если функция foo() будет вызвана как метод объекта (что в обычных функциях связывает this с объектом вызова) или с использованием методов call, apply или bind:

      // Вызов функции как метода объекта
       var obj = {foo: foo};
      @@ -170,7 +170,7 @@ console.log(foo() === globalObject); // true

      Несмотря ни на что, this стрелочной функции foo() имеет то же значение, что и при создании функции (глобальный объект в примере выше). То же самое касается стрелочных функций, созданных внутри других функций: их this будет привязан к окружению.

      -
      // Создаем объект obj, содержащий метод bar, который возвращает функцию,
      +
      // Создаём объект obj, содержащий метод bar, который возвращает функцию,
       // которая возвращает свой this. Возвращаемая функция создана
       // как стрелочная функция, таким образом её this постоянно замкнут
       // на this функции, в которой она создана. Значение bar может быть установлено
      @@ -195,7 +195,7 @@ var fn2 = obj.bar;
       // потому что он следует за this из fn2.
       console.log(fn2()() == window); // true
      -

      В примере выше, функция (назовем её анонимной функцией A), присвоенная методу obj.bar, возвращает другую функцию (назовем её анонимной функцией B) которая создана как стрелочная функция. В результате, this функции B при вызове замкнут на this, принадлежащий obj.bar (функции A). this функции B всегда будет иметь то значение, которое он получил при создании. В примере выше, this функции B указывает на this функции A,которым является obj, таким образом this будет равен obj даже тогда, когда будет вызван методом, который в нормальных условиях устанавливал бы значение this равным undefined или глобальному объекту (или любым другим методом, как в предыдущем примере в глобальном контексте выполнения).

      +

      В примере выше, функция (назовём её анонимной функцией A), присвоенная методу obj.bar, возвращает другую функцию (назовём её анонимной функцией B) которая создана как стрелочная функция. В результате, this функции B при вызове замкнут на this, принадлежащий obj.bar (функции A). this функции B всегда будет иметь то значение, которое он получил при создании. В примере выше, this функции B указывает на this функции A,которым является obj, таким образом this будет равен obj даже тогда, когда будет вызван методом, который в нормальных условиях устанавливал бы значение this равным undefined или глобальному объекту (или любым другим методом, как в предыдущем примере в глобальном контексте выполнения).

      В методе объекта

      @@ -213,7 +213,7 @@ console.log(fn2()() == window); // true
      console.log(o.f()); // logs 37
      -

      Необходимо отметить, что на поведение this совсем не влияет то, как или где была определена функция. В предыдущем примере мы определили функцию внутри свойства f во время определения объекта o. Однако, мы могли бы также просто определить сначала функцию, а затем закрепить ее за за свойством o.f. В этом случае поведение this не изменится:

      +

      Необходимо отметить, что на поведение this совсем не влияет то, как или где была определена функция. В предыдущем примере мы определили функцию внутри свойства f во время определения объекта o. Однако, мы могли бы также просто определить сначала функцию, а затем закрепить её за за свойством o.f. В этом случае поведение this не изменится:

      var o = {prop: 37};
       
      @@ -236,7 +236,7 @@ console.log(o.b.g()); // logs 42
       
       

      this в цепочке object's prototype

      -

      Это же представление справедливо и для методов, определенных где-либо в цепочке object's prototype. Если метод находится в цепочке прототипов, то this ссылается на объект, на котором был вызван метод, т.е. так, словно метод является методом самого объекта, а не прототипа.

      +

      Это же представление справедливо и для методов, определённых где-либо в цепочке object's prototype. Если метод находится в цепочке прототипов, то this ссылается на объект, на котором был вызван метод, т.е. так, словно метод является методом самого объекта, а не прототипа.

      var o = {f:function(){ return this.a + this.b; }};
       var p = Object.create(o);
      @@ -274,7 +274,7 @@ console.log(o.phase, o.modulus); // logs -0.78 1.4142
       
       

      Когда функция используется как конструктор (с ключевым словом new ), this связано с создаваемым новым объектом.

      -

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

      +

      Примечание: по умолчанию конструктор возвращает объект, на который ссылается this, но он может вернуть и другой объект (если возвращаемое значение не является объектом, тогда будет возвращён объект с this).

      /*
        * Конструктор работает таким образом:
      @@ -312,7 +312,7 @@ o = new C2();
       console.log(o.a); // logs 38
       
      -

      В последнем примере (C2), из-за того, что конструктор вернул объект, новый объект, к которому было привязано this, был просто отброшен. (Это фактически делает выражение "this.a = 37;" "мертвым" кодом. Он не является буквально нерабочим, так как он выполняется, но он может быть изъят без каких-либо внешних эффектов.)

      +

      В последнем примере (C2), из-за того, что конструктор вернул объект, новый объект, к которому было привязано this, был просто отброшен. (Это фактически делает выражение "this.a = 37;" "мёртвым" кодом. Он не является буквально нерабочим, так как он выполняется, но он может быть изъят без каких-либо внешних эффектов.)

      call и apply

      @@ -335,7 +335,7 @@ add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16 add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
      -

      Необходимо отметить, что если методам call и apply передается значение с this, которое не является при этом объектом, будет предпринята попытка конвертировать значение в объект, используя внутреннюю операцию ToObject. Если переданное значение является примитивным типом, например 7 или 'foo', оно будет преобразовано в объект с использованием родственного конструктора, так примитив 7 преобразовывается в объект через new Number(7), а строка 'foo' в объект через new String('foo'), и т.д.

      +

      Необходимо отметить, что если методам call и apply передаётся значение с this, которое не является при этом объектом, будет предпринята попытка конвертировать значение в объект, используя внутреннюю операцию ToObject. Если переданное значение является примитивным типом, например 7 или 'foo', оно будет преобразовано в объект с использованием родственного конструктора, так примитив 7 преобразовывается в объект через new Number(7), а строка 'foo' в объект через new String('foo'), и т.д.

      function bar() {
         console.log(Object.prototype.toString.call(this));
      @@ -382,7 +382,7 @@ for (var i = 0; i < elements.length; i++) {
       </button>
       
      -

      В этом случае this вложенной функции не будет установлен, так что будет возвращен global/window объект.

      +

      В этом случае this вложенной функции не будет установлен, так что будет возвращён global/window объект.

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

      diff --git a/files/ru/web/javascript/reference/operators/void/index.html b/files/ru/web/javascript/reference/operators/void/index.html index e415aacae7..998c138972 100644 --- a/files/ru/web/javascript/reference/operators/void/index.html +++ b/files/ru/web/javascript/reference/operators/void/index.html @@ -41,7 +41,7 @@ translation_of: Web/JavaScript/Reference/Operators/void

      JavaScript URIs

      -

      Когда браузер переходит по javascript: URI, он вычисляет код в URI и заменяет содержание страницы возвращенным значением, если оно не равно {{jsxref("Global_Objects/undefined", "undefined")}}. Можно воспользоваться оператором void для возврата {{jsxref("Global_Objects/undefined", "undefined")}}. Например:

      +

      Когда браузер переходит по javascript: URI, он вычисляет код в URI и заменяет содержание страницы возвращённым значением, если оно не равно {{jsxref("Global_Objects/undefined", "undefined")}}. Можно воспользоваться оператором void для возврата {{jsxref("Global_Objects/undefined", "undefined")}}. Например:

      <a href="javascript:void(0);">
         Click here to do nothing
      diff --git a/files/ru/web/javascript/reference/statements/async_function/index.html b/files/ru/web/javascript/reference/statements/async_function/index.html
      index 966ea49b80..a956f73e66 100644
      --- a/files/ru/web/javascript/reference/statements/async_function/index.html
      +++ b/files/ru/web/javascript/reference/statements/async_function/index.html
      @@ -81,7 +81,7 @@ add2(10).then(v => {
       

      Не путайте await и Promise.all

      -

      Функция add1 приостанавливается на 2 секунды для первого await и еще на 2 для второго. Второй таймер создается только после срабатывания первого. В функции add2 создаются оба и оба же переходят в состояние await. В результате функция add2 завершится скорее через две, чем через четыре секунды, поскольку таймеры работают одновременно. Однако запускаются они все же не параллельно, а друг за другом - такая конструкция не означает автоматического использования Promise.all. Если два или более Promise должны разрешаться параллельно, следует использовать Promise.all.

      +

      Функция add1 приостанавливается на 2 секунды для первого await и ещё на 2 для второго. Второй таймер создаётся только после срабатывания первого. В функции add2 создаются оба и оба же переходят в состояние await. В результате функция add2 завершится скорее через две, чем через четыре секунды, поскольку таймеры работают одновременно. Однако запускаются они все же не параллельно, а друг за другом - такая конструкция не означает автоматического использования Promise.all. Если два или более Promise должны разрешаться параллельно, следует использовать Promise.all.

      Когда функция async выбрасывает исключение

      @@ -136,7 +136,7 @@ throwsValue() }
      -

      Заметьте, что пример выше не содержит await на return, потому что возвращаемое значение функции async неявно обернуто в {{jsxref("Promise.resolve")}}.

      +

      Заметьте, что пример выше не содержит await на return, потому что возвращаемое значение функции async неявно обёрнуто в {{jsxref("Promise.resolve")}}.

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

      @@ -165,7 +165,7 @@ throwsValue()

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

      - +

      {{Compat("javascript.statements.async_function")}}

      diff --git a/files/ru/web/javascript/reference/statements/block/index.html b/files/ru/web/javascript/reference/statements/block/index.html index a6fb564aa7..c6d34377df 100644 --- a/files/ru/web/javascript/reference/statements/block/index.html +++ b/files/ru/web/javascript/reference/statements/block/index.html @@ -41,13 +41,13 @@ original_slug: Web/JavaScript/Reference/Statements/Блок

      Обратите внимание, что блок инструкций не заканчивается точкой с запятой.

      -

      Блок инструкций часто называется сложной (составной) инструкцией в других языках. Он позволяет вам использовать несколько операторов там, где JavaScript ожидает один оператор. Помещение инструкций в блок - это распространенная практика в JavaScript. Противоположное поведение - использование пустого оператора там, где никаких действий не нужно, а оператор требуется.

      +

      Блок инструкций часто называется сложной (составной) инструкцией в других языках. Он позволяет вам использовать несколько операторов там, где JavaScript ожидает один оператор. Помещение инструкций в блок - это распространённая практика в JavaScript. Противоположное поведение - использование пустого оператора там, где никаких действий не нужно, а оператор требуется.

      Правила области видимости блока

      С использованием var

      -

      Переменные, объявленные через varне имеют блочной области видимости. Переменные, введенные внутри блока, имеют областью видимости содержащую их функцию или скрипт, и последствия записи в них значения распространяются за границы, собственно, блока, в котором они объявлены. Другими словами, блок инструкций не вводит новую область видимости. Хотя "отдельно стоящие" блоки не являются нарушением синтаксиса, не стоит использовать отдельно стоящие блоки в JavaScript, потому что они не делают то, чего вы от них ожидаете, если вы ожидаете, что они будут себя вести аналогично блокам в C или Java. Например:

      +

      Переменные, объявленные через varне имеют блочной области видимости. Переменные, введённые внутри блока, имеют областью видимости содержащую их функцию или скрипт, и последствия записи в них значения распространяются за границы, собственно, блока, в котором они объявлены. Другими словами, блок инструкций не вводит новую область видимости. Хотя "отдельно стоящие" блоки не являются нарушением синтаксиса, не стоит использовать отдельно стоящие блоки в JavaScript, потому что они не делают то, чего вы от них ожидаете, если вы ожидаете, что они будут себя вести аналогично блокам в C или Java. Например:

      var x = 1;
       {
      diff --git a/files/ru/web/javascript/reference/statements/class/index.html b/files/ru/web/javascript/reference/statements/class/index.html
      index 6e772f9c6a..507c13cb10 100644
      --- a/files/ru/web/javascript/reference/statements/class/index.html
      +++ b/files/ru/web/javascript/reference/statements/class/index.html
      @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Statements/class
       ---
       
      {{jsSidebar("Statements")}}
      -

      Class declaration создает новый класс с данным именем на основе прототипного наследования.

      +

      Class declaration создаёт новый класс с данным именем на основе прототипного наследования.

      Можно так же определить класс, используя {{jsxref("Operators/class", "class expression", "", 1)}}. Но в отличие от class expression, class declaration не позволяет снова объявить уже существующий класс, это приведёт к ошибке типа.

      @@ -54,7 +54,7 @@ class Square extends Polygon { class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
      -

      Та же ошибка будет вызвана, если класс был определен перед использованием class declaration.

      +

      Та же ошибка будет вызвана, если класс был определён перед использованием class declaration.

      var Foo = class {};
       class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
      diff --git a/files/ru/web/javascript/reference/statements/do...while/index.html b/files/ru/web/javascript/reference/statements/do...while/index.html
      index f6707b4b04..6a2aa31f07 100644
      --- a/files/ru/web/javascript/reference/statements/do...while/index.html
      +++ b/files/ru/web/javascript/reference/statements/do...while/index.html
      @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Statements/do...while
       ---
       
      {{jsSidebar("Statements")}}
      -

      Выражение do...while создает цикл, который выполняет указанное выражение до тех пор, пока условие не станет ложным. Условие проверяется после выполнения выражения, то есть выражение выполнится как минимум один раз.

      +

      Выражение do...while создаёт цикл, который выполняет указанное выражение до тех пор, пока условие не станет ложным. Условие проверяется после выполнения выражения, то есть выражение выполнится как минимум один раз.

      {{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}

      @@ -23,7 +23,7 @@ while (условие);
      условие
      -
      Выражение, которое вычисляется после каждого шага цикла. Если условие истинно, то выражение выполняется еще раз. Когда условие ложно, выполняется выражение, следующее после do...while.
      +
      Выражение, которое вычисляется после каждого шага цикла. Если условие истинно, то выражение выполняется ещё раз. Когда условие ложно, выполняется выражение, следующее после do...while.

      Примеры

      diff --git a/files/ru/web/javascript/reference/statements/empty/index.html b/files/ru/web/javascript/reference/statements/empty/index.html index 3792c035bc..64aee27def 100644 --- a/files/ru/web/javascript/reference/statements/empty/index.html +++ b/files/ru/web/javascript/reference/statements/empty/index.html @@ -39,7 +39,7 @@ console.log(arr) killTheUniverse() // Это всегда выполняется!!!
      -

      Другой пример: if...else без фигурных скобок  ({}). Если three истинно, ничего не произойдет, four не важна, и функция launchRocket() тоже не запустится.

      +

      Другой пример: if...else без фигурных скобок  ({}). Если three истинно, ничего не произойдёт, four не важна, и функция launchRocket() тоже не запустится.

      if (one)
         doOne();
      diff --git a/files/ru/web/javascript/reference/statements/for-await...of/index.html b/files/ru/web/javascript/reference/statements/for-await...of/index.html
      index 9ed679ace7..d5a6b93e35 100644
      --- a/files/ru/web/javascript/reference/statements/for-await...of/index.html
      +++ b/files/ru/web/javascript/reference/statements/for-await...of/index.html
      @@ -77,7 +77,7 @@ translation_of: Web/JavaScript/Reference/Statements/for-await...of
       // 1
       // 2
      -

      Для более конкретного примера перебора асинхронного генератора с помощью for await... of, рассмотрим перебор данных из API.  В этом примере сначала создается асинхронный итератор для потока данных, а затем он используется для определения размера ответа от API.

      +

      Для более конкретного примера перебора асинхронного генератора с помощью for await... of, рассмотрим перебор данных из API.  В этом примере сначала создаётся асинхронный итератор для потока данных, а затем он используется для определения размера ответа от API.

      async function* streamAsyncIterator(stream) {
         const reader = stream.getReader();
      diff --git a/files/ru/web/javascript/reference/statements/for...in/index.html b/files/ru/web/javascript/reference/statements/for...in/index.html
      index 24d7434f81..18ffee0e24 100644
      --- a/files/ru/web/javascript/reference/statements/for...in/index.html
      +++ b/files/ru/web/javascript/reference/statements/for...in/index.html
      @@ -29,7 +29,7 @@ translation_of: Web/JavaScript/Reference/Statements/for...in
       
       

      Удаление, добавление и модификация свойств

      -

      Цикл for...in проходит по свойствам в произвольном порядке (см. оператор {{jsxref("Operators/delete", "delete")}} для того, чтобы узнать почему порядок прохода может отличаться в зависимости от браузера). Если свойство изменяется за одну итерацию, а затем изменяется снова, его значением в цикле является его последнее значение. Свойство, удаленное до того, как до него дошёл цикл, не будет участвовать в нём. Свойства добавленные в объекты в цикле могут быть пропущены. В общем, лучше не добавлять, изменять или удалять свойство из объекта во время итерации, если по нему ещё не прошли. Нет гарантии, что добавленное свойство будет посещено циклом, низменное после проведения изменений, а удалённое после удаления.

      +

      Цикл for...in проходит по свойствам в произвольном порядке (см. оператор {{jsxref("Operators/delete", "delete")}} для того, чтобы узнать почему порядок прохода может отличаться в зависимости от браузера). Если свойство изменяется за одну итерацию, а затем изменяется снова, его значением в цикле является его последнее значение. Свойство, удалённое до того, как до него дошёл цикл, не будет участвовать в нём. Свойства добавленные в объекты в цикле могут быть пропущены. В общем, лучше не добавлять, изменять или удалять свойство из объекта во время итерации, если по нему ещё не прошли. Нет гарантии, что добавленное свойство будет посещено циклом, низменное после проведения изменений, а удалённое после удаления.

      Проход по массиву и for...in

      diff --git a/files/ru/web/javascript/reference/statements/for...of/index.html b/files/ru/web/javascript/reference/statements/for...of/index.html index fdf8799529..cd4447e59f 100644 --- a/files/ru/web/javascript/reference/statements/for...of/index.html +++ b/files/ru/web/javascript/reference/statements/for...of/index.html @@ -213,7 +213,7 @@ for (var value of iterable) {

      Для {{jsxref("Statements/for...in", "for...in")}} обход перечисляемых свойств объекта осуществляется в произвольном порядке.

      -

      Для for...of обход происходит в соответствии с тем, какой порядок определен в итерируемом объекте.

      +

      Для for...of обход происходит в соответствии с тем, какой порядок определён в итерируемом объекте.

      Следующий пример показывает различия в работе циклов for...of и for...in при обходе {{jsxref("Array")}}.

      @@ -237,7 +237,7 @@ for (let i of iterable) { console.log(i); // выведет 3, 5, 7 }
      -

      Разберемся шаг за шагом в вышеописанном коде.

      +

      Разберёмся шаг за шагом в вышеописанном коде.

      Object.prototype.objCustom = function() {};
       Array.prototype.arrCustom = function() {};
      @@ -251,7 +251,7 @@ iterable.foo = 'hello';
      console.log(i); // выведет 0, 1, 2, "foo", "arrCustom", "objCustom" }
      -

      Цикл выводит только перечисляемые свойства объекта iterable, в порядке их создания. Он не выводит значения 357 и hello поскольку они не являются перечисляемыми, фактически они вообще не являются свойствами, они являются значениями. Выводятся же имена свойств и методов, например arrCustom и objCustom. Если вы еще не совсем поняли, по каким свойствам осуществляется обход, вот дополнительное объяснение того, как работает {{jsxref("Statements/for...in", "array iteration and for...in", "#Array_iteration_and_for...in")}} .

      +

      Цикл выводит только перечисляемые свойства объекта iterable, в порядке их создания. Он не выводит значения 357 и hello поскольку они не являются перечисляемыми, фактически они вообще не являются свойствами, они являются значениями. Выводятся же имена свойств и методов, например arrCustom и objCustom. Если вы ещё не совсем поняли, по каким свойствам осуществляется обход, вот дополнительное объяснение того, как работает {{jsxref("Statements/for...in", "array iteration and for...in", "#Array_iteration_and_for...in")}} .

      for (let i in iterable) {
         if (iterable.hasOwnProperty(i)) {
      diff --git a/files/ru/web/javascript/reference/statements/for/index.html b/files/ru/web/javascript/reference/statements/for/index.html
      index 6b394ef5a5..080e4e8c61 100644
      --- a/files/ru/web/javascript/reference/statements/for/index.html
      +++ b/files/ru/web/javascript/reference/statements/for/index.html
      @@ -52,7 +52,7 @@ for (; i < 9; i++) {
       }
       
      -

      Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.

      +

      Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервёте цикл где-то в теле, а не создадите бесконечный цикл.

      for (var i = 0;; i++) {
          console.log(i);
      diff --git a/files/ru/web/javascript/reference/statements/import/index.html b/files/ru/web/javascript/reference/statements/import/index.html
      index d301e39327..99911d4f33 100644
      --- a/files/ru/web/javascript/reference/statements/import/index.html
      +++ b/files/ru/web/javascript/reference/statements/import/index.html
      @@ -46,7 +46,7 @@ import("/module-name.js").then(module => {…}) // Динамический 
        
      module-name
      Имя модуля для импорта. Это зачастую относительный или абсолютный путь к .js файлу модуля без указания расширения .js. Некоторые сборщики могут разрешать или даже требовать использования расширения; проверяйте своё рабочее окружение. Допускаются только строки с одиночными или двойными кавычками.
      name
      -
      Имя локального объекта, который будет использован как своего рода пространство имен, ссылающееся на импортируемые значения.
      +
      Имя локального объекта, который будет использован как своего рода пространство имён, ссылающееся на импортируемые значения.
      @@ -61,7 +61,7 @@ import("/module-name.js").then(module => {…}) // Динамический

      Описание

      -

      Параметр name это имя локального объекта, который будет использован как своего рода пространство имен, ссылающееся на импортируемые значения. Параметры export определяют отдельные именованные значения, в то время как import * as name импортирует все значения. Примеры ниже объясняют синтаксис.

      +

      Параметр name это имя локального объекта, который будет использован как своего рода пространство имён, ссылающееся на импортируемые значения. Параметры export определяют отдельные именованные значения, в то время как import * as name импортирует все значения. Примеры ниже объясняют синтаксис.

      Импорт всего содержимого модуля

      @@ -69,13 +69,13 @@ import("/module-name.js").then(module => {…}) // Динамический
      import * as myModule from '/modules/my-module.js';
      -

      В данном случае, доступ к импортируемым значениям можно осуществить с использованием имени модуля (в данном случае "myModule") в качестве пространства имен. Например, если импортируемый выше модуль включает в себя экспорт метода doAllTheAmazingThings(), вы можете вызвать его так:

      +

      В данном случае, доступ к импортируемым значениям можно осуществить с использованием имени модуля (в данном случае "myModule") в качестве пространства имён. Например, если импортируемый выше модуль включает в себя экспорт метода doAllTheAmazingThings(), вы можете вызвать его так:

      myModule.doAllTheAmazingThings();

      Импорт единичного значения из модуля

      -

      Определенное ранее значение, названное myExport, которое было экспортировано из модуля my-module либо неявно (если модуль был экспортирован целиком), либо явно (с использованием инструкции {{jsxref("Statements/export", "export")}}), позволяет вставить myExport в текущую область видимости.

      +

      Определённое ранее значение, названное myExport, которое было экспортировано из модуля my-module либо неявно (если модуль был экспортирован целиком), либо явно (с использованием инструкции {{jsxref("Statements/export", "export")}}), позволяет вставить myExport в текущую область видимости.

      import {myExport} from '/modules/my-module.js';
      @@ -85,7 +85,7 @@ import("/module-name.js").then(module => {…}) // Динамический
      import {foo, bar} from '/modules/my-module.js';
      -

      Импорт значений с использованием более удобных имен

      +

      Импорт значений с использованием более удобных имён

      Вы можете переименовать значения, когда импортируете их. Например, этот код вставляет shortName в текущую область видимости.

      @@ -117,10 +117,10 @@ import("/module-name.js").then(module => {…}) // Динамический
      import myDefault from '/modules/my-module.js';
       
      -

      Возможно также использование такого синтаксиса с другими вариантами из перечисленных выше (импорт пространства имен или именованный импорт). В таком случае, импорт значения по умолчанию должен быть определён первым. Для примера:

      +

      Возможно также использование такого синтаксиса с другими вариантами из перечисленных выше (импорт пространства имён или именованный импорт). В таком случае, импорт значения по умолчанию должен быть определён первым. Для примера:

      import myDefault, * as myModule from '/modules/my-module.js';
      -// myModule использовано как пространство имен
      +// myModule использовано как пространство имён

    или

    diff --git a/files/ru/web/javascript/reference/statements/let/index.html b/files/ru/web/javascript/reference/statements/let/index.html index 2f38f7e7ca..df2a17de02 100644 --- a/files/ru/web/javascript/reference/statements/let/index.html +++ b/files/ru/web/javascript/reference/statements/let/index.html @@ -87,7 +87,7 @@ for (var i = 1; i <= 5; i++) {

    Пример выше будет выполнен как и ожидается, так как пять экземпляров внутренней функции (анонимной) будут ссылаться на пять разных экземпляров переменной i. Пример будет выполнен неверно, если заменить директиву let на var, или удалить переменную i из параметров вложенной функции и использовать внешнюю переменную i во внутренней функции.

    -

    На верхнем уровне скриптов и функций let, в отличии от var, не создает свойства на глобальном объекте. Например:

    +

    На верхнем уровне скриптов и функций let, в отличии от var, не создаёт свойства на глобальном объекте. Например:

    var x = 'global_x';
     let y = 'global_y';
    @@ -130,16 +130,16 @@ console.log(privateScope.hiddenProperty); // error

    Эта техника позволяет получить только "статичное" приватное состояние - в примере выше, все экземпляры полученные из конструктора SomeConstructor будут ссылаться на одну и ту же область видимости privateScope.

    -

    Временные мертвые зоны и ошибки при использовании let

    +

    Временные мёртвые зоны и ошибки при использовании let

    -

    Повторное объявление той же переменной в том же блоке или функции приведет к выбросу исключения SyntaxError.

    +

    Повторное объявление той же переменной в том же блоке или функции приведёт к выбросу исключения SyntaxError.

    if (x) {
       let foo;
       let foo; // SyntaxError thrown.
     }
    -

    В стандарте ECMAScript 2015 переменные, объявленные директивой let, переносятся в начало блока. Но если вы сошлетесь в блоке на переменную, до того как она объявлена директивой let, то это приведет к выбросу исключения ReferenceError, потому что переменная находится во "временной мертвой зоне" с начала блока и до места ее объявления. (В отличии от переменной, объявленной через var, которая просто будет содержать значение undefined)

    +

    В стандарте ECMAScript 2015 переменные, объявленные директивой let, переносятся в начало блока. Но если вы сошлётесь в блоке на переменную, до того как она объявлена директивой let, то это приведёт к выбросу исключения ReferenceError, потому что переменная находится во "временной мёртвой зоне" с начала блока и до места её объявления. (В отличии от переменной, объявленной через var, которая просто будет содержать значение undefined)

    function do_something() {
       console.log(bar); // undefined
    @@ -175,7 +175,7 @@ for ( let i=i ; i < 10 ; i++ ) {
     
    for (let expr1; expr2; expr3) statement
     
    -

    В этом примере expr2, expr3, statement  заключены в неявный блок, который содержит блок локальных переменных, объявленных конструкцией let expr1. Пример приведен выше.

    +

    В этом примере expr2, expr3, statement  заключены в неявный блок, который содержит блок локальных переменных, объявленных конструкцией let expr1. Пример приведён выше.

    Примеры

    @@ -224,7 +224,7 @@ console.log(i); // i is not defined

    Описание

    -

    let блок предоставляет локальную область видимости для переменных. Работа его заключается в привязке нуля или более переменных к области видимости этого блока кода, другими словами, он является блоком операторов. Отметим, что область видимости переменных, объявленных директивой var, в блоке let, будет той же самой, что и если бы эти переменные были объявлены вне блока let, иными словами областью видимости таких переменных по-прежнему является функция. Скобки в блоке let являются обязательными. Опускание их приведет к синтаксической ошибке.

    +

    let блок предоставляет локальную область видимости для переменных. Работа его заключается в привязке нуля или более переменных к области видимости этого блока кода, другими словами, он является блоком операторов. Отметим, что область видимости переменных, объявленных директивой var, в блоке let, будет той же самой, что и если бы эти переменные были объявлены вне блока let, иными словами областью видимости таких переменных по-прежнему является функция. Скобки в блоке let являются обязательными. Опускание их приведёт к синтаксической ошибке.

    Пример

    @@ -408,7 +408,7 @@ console.log(a); // 5
    • До SpiderMonkey 46 {{geckoRelease(46)}} выбрасывал {{jsxref("TypeError")}} на повторное объявление, вместо {{jsxref("SyntaxError")}} ({{bug(1198833)}}).
    • -
    • До SpiderMonkey 44 {{geckoRelease(44)}}, let был доступен только для блоков кода обернутых в HTML <script type="application/javascript;version=1.7">block (or higher version) и имел другую семантику.
    • -
    • Поддержка в {{domxref("Worker")}} код спрятан за dom.workers.latestJSVersion флагом ({{bug(487070)}}). Без версии let, флаг будет удален в будущем ({{bug(1219523)}}).
    • +
    • До SpiderMonkey 44 {{geckoRelease(44)}}, let был доступен только для блоков кода обёрнутых в HTML <script type="application/javascript;version=1.7">block (or higher version) и имел другую семантику.
    • +
    • Поддержка в {{domxref("Worker")}} код спрятан за dom.workers.latestJSVersion флагом ({{bug(487070)}}). Без версии let, флаг будет удалён в будущем ({{bug(1219523)}}).
    • Соблюдение стандарта ES2015 для let в SpIderMonkey отслеживается в {{bug(950547)}}
    diff --git a/files/ru/web/javascript/reference/statements/return/index.html b/files/ru/web/javascript/reference/statements/return/index.html index 37f44af769..7859580049 100644 --- a/files/ru/web/javascript/reference/statements/return/index.html +++ b/files/ru/web/javascript/reference/statements/return/index.html @@ -25,7 +25,7 @@ translation_of: Web/JavaScript/Reference/Statements/return

    Описание

    -

    При вызове оператора return в функции её выполнение прекращается. Указанное значение возвращается в место вызова функции. Например, приведенная ниже функция возвращает возведенное в квадрат значение своего аргумента, x (где x – это число):

    +

    При вызове оператора return в функции её выполнение прекращается. Указанное значение возвращается в место вызова функции. Например, приведённая ниже функция возвращает возведённое в квадрат значение своего аргумента, x (где x – это число):

    function square(x) {
        return x * x;
    diff --git a/files/ru/web/javascript/reference/statements/throw/index.html b/files/ru/web/javascript/reference/statements/throw/index.html
    index 1ba0dc149a..7dfceb09c3 100644
    --- a/files/ru/web/javascript/reference/statements/throw/index.html
    +++ b/files/ru/web/javascript/reference/statements/throw/index.html
    @@ -23,7 +23,7 @@ translation_of: Web/JavaScript/Reference/Statements/throw
     
     

    Описание

    -

    Используйте инструкцию throw для генерирования исключения. Когда вы генерируете исключение (throw), выражение задает значение исключения. Каждое из следующих throw создает исключение:

    +

    Используйте инструкцию throw для генерирования исключения. Когда вы генерируете исключение (throw), выражение задаёт значение исключения. Каждое из следующих throw создаёт исключение:

    throw "Error2"; // генерирует исключение, значением которого является строка
     throw 42;       // генерирует исключение, значением которого является число 42
    @@ -35,11 +35,11 @@ throw true;     // генерирует исключение, значением
     
     

    Пример: Генерирование объекта в качестве исключения

    -

    Можно указать объект в качестве исключения. Затем можно получить ссылку на этот объект и доступ ко всем его свойствам в блоке catch. Следующий пример создает объект ошибки, который имеет тип UserException, и используется для генерации исключения.

    +

    Можно указать объект в качестве исключения. Затем можно получить ссылку на этот объект и доступ ко всем его свойствам в блоке catch. Следующий пример создаёт объект ошибки, который имеет тип UserException, и используется для генерации исключения.

    function UserException(message) {
        this.message = message;
    -   this.name = "Исключение, определенное пользователем";
    +   this.name = "Исключение, определённое пользователем";
     }
     function getMonthName(mo) {
        mo = mo-1; // Нужно скорректировать номер месяца согласно индексам массива (1=Jan, 12=Dec)
    @@ -54,11 +54,11 @@ function getMonthName(mo) {
     
     try {
        // statements to try
    -   var myMonth = 15; // 15 находится вне границ массива, что приведет к исключению
    +   var myMonth = 15; // 15 находится вне границ массива, что приведёт к исключению
        var monthName = getMonthName(myMonth);
     } catch (e) {
        monthName = "неизвестен";
    -   logMyErrors(e.message, e.name); // передаем исключение в обработчик ошибок
    +   logMyErrors(e.message, e.name); // передаём исключение в обработчик ошибок
     }
     
    @@ -67,7 +67,7 @@ try {

    Следующий пример проверяет, является ли строка, переданная в функцию, почтовым индексом США. Если индекс имеет недопустимый формат, будет сгенерировано исключение посредством создания объекта, имеющего тип ZipCodeFormatException.

    /*
    - * Создает объект ZipCode.
    + * Создаёт объект ZipCode.
      *
      * Допустимые форматы почтового индекса:
      *    12345
    @@ -125,16 +125,16 @@ function verifyZipCode(z) {
        return z;
     }
     
    -a = verifyZipCode(95060);         // вернет 95060
    -b = verifyZipCode(9560);          // вернет -1
    -c = verifyZipCode("a");           // вернет -1
    -d = verifyZipCode("95060");       // вернет 95060
    -e = verifyZipCode("95060 1234");  // вернет 95060 1234
    +a = verifyZipCode(95060);         // вернёт 95060
    +b = verifyZipCode(9560);          // вернёт -1
    +c = verifyZipCode("a");           // вернёт -1
    +d = verifyZipCode("95060");       // вернёт 95060
    +e = verifyZipCode("95060 1234");  // вернёт 95060 1234
     

    Пример: Повторный выброс исключения

    -

    Можно использовать throw для повторного выброса исключения после того, как оно было поймано. В следующем примере ловится исключение с числовым значением и делается повторный выброс, если его значение больше 50.  Повторно выброшенное исключение передается далее в вызывающую функцию или до верхнего уровня, который видит пользователь.

    +

    Можно использовать throw для повторного выброса исключения после того, как оно было поймано. В следующем примере ловится исключение с числовым значением и делается повторный выброс, если его значение больше 50.  Повторно выброшенное исключение передаётся далее в вызывающую функцию или до верхнего уровня, который видит пользователь.

    try {
        throw n; // бросаем исключение с числовым значением
    diff --git a/files/ru/web/javascript/reference/statements/try...catch/index.html b/files/ru/web/javascript/reference/statements/try...catch/index.html
    index 241bc90d83..a18bf95b37 100644
    --- a/files/ru/web/javascript/reference/statements/try...catch/index.html
    +++ b/files/ru/web/javascript/reference/statements/try...catch/index.html
    @@ -86,7 +86,7 @@ catch (e) {
     }
     
    -

    Блок catch задает идентификатор (e в примере выше) который содержит объект исключения (в примере выше — значение, переданное оператору throw). Область видимости этого объекта ограничивается блоком catch.

    +

    Блок catch задаёт идентификатор (e в примере выше) который содержит объект исключения (в примере выше — значение, переданное оператору throw). Область видимости этого объекта ограничивается блоком catch.

    Условный блок catch

    diff --git a/files/ru/web/javascript/reference/statements/var/index.html b/files/ru/web/javascript/reference/statements/var/index.html index fd0ca7f862..78b2f5edcd 100644 --- a/files/ru/web/javascript/reference/statements/var/index.html +++ b/files/ru/web/javascript/reference/statements/var/index.html @@ -5,7 +5,7 @@ translation_of: Web/JavaScript/Reference/Statements/var ---
    {{jsSidebar("Statements")}}
    -

    Оператор var объявляет переменную, инициализируя ее, при необходимости.

    +

    Оператор var объявляет переменную, инициализируя её, при необходимости.

    {{EmbedInteractiveExample("pages/js/statement-var.html")}}

    @@ -80,7 +80,7 @@ bla = 2;

    Поэтому объявление переменных рекомендовано выносить в начало их области видимости (в начало глобального кода или в начало функции). Это даёт понять какие переменные принадлежат функции (т.е. являются локальными), а какие обрабатываются в цепи областей видимости (т.е. являются глобальными).

    -

    Важно отметить, что подъем будет влиять на объявление переменной, но не на инициализацию ее значения. Значение присваивается при выполнении оператора присваивания:

    +

    Важно отметить, что подъем будет влиять на объявление переменной, но не на инициализацию её значения. Значение присваивается при выполнении оператора присваивания:

    function do_something() {
       console.log(bar); // выведет undefined
    @@ -153,7 +153,7 @@ console.log(x, y);
    var x = 0;  // x объявлена глобально, затем присваивается значение 0
     
    -console.log(typeof z); // undefined, пока еще z не существует
    +console.log(typeof z); // undefined, пока ещё z не существует
     
     function a() { // когда функция a вызвана,
       var y = 2;   // y объявляется локально в функции a, затем присваивается 2
    @@ -163,10 +163,10 @@ function a() { // когда функция a вызвана,
       function b() {       // когда функция b вызвана
         x = 3;  // присваивается 3 существующей глобальной x
         y = 4;  // присваивается 4 существующей внешней y
    -    z = 5;  // создается новая глобальная переменная z и присваивается значение 5.
    +    z = 5;  // создаётся новая глобальная переменная z и присваивается значение 5.
       }         // (Порождает ReferenceError в strict mode(строгом режиме).)
     
    -  b();     // вызов b создает z как глобальную переменную
    +  b();     // вызов b создаёт z как глобальную переменную
       console.log(x, y, z);  // 3 4 5
     }
     
    diff --git a/files/ru/web/javascript/reference/statements/while/index.html b/files/ru/web/javascript/reference/statements/while/index.html
    index 1baf54a1f4..4c367fc488 100644
    --- a/files/ru/web/javascript/reference/statements/while/index.html
    +++ b/files/ru/web/javascript/reference/statements/while/index.html
    @@ -9,7 +9,7 @@ translation_of: Web/JavaScript/Reference/Statements/while
     ---
     
    {{jsSidebar("Statements")}}
    -

    Оператор while создает цикл, выполняющий заданную инструкцию, пока истинно проверяемое условие. Логическое значение условия вычисляется перед исполнением тела цикла.

    +

    Оператор while создаёт цикл, выполняющий заданную инструкцию, пока истинно проверяемое условие. Логическое значение условия вычисляется перед исполнением тела цикла.

    Синтаксис

    diff --git a/files/ru/web/javascript/reference/statements/with/index.html b/files/ru/web/javascript/reference/statements/with/index.html index 208863d500..e28aedee90 100644 --- a/files/ru/web/javascript/reference/statements/with/index.html +++ b/files/ru/web/javascript/reference/statements/with/index.html @@ -32,7 +32,7 @@ translation_of: Web/JavaScript/Reference/Statements/with

    Pro: Оператор with может помочь уменьшить размер файла, уменьшив необходимость повторять длинную ссылку на объект без снижения производительности.  Изменение цепочки контекста, необходимое для 'with', не требует больших вычислительных затрат.  Использование 'with' избавит интерпретатор от разбора повторных ссылок на объекты. Однако, обратите внимание, что во многих случаях это преимущество может быть достигнуто с помощью временной переменной для хранения ссылки на нужный объект.

    -

    Contra: Оператор with заставляет указанный объект быть найденным сначала среди всех имен поиска.  Поэтому все идентификаторы, которые не относятся к указанному объекту, будут обнаруживаться медленнее в блоке «with.  Там, где важна производительность, «with» следует использовать только для охвата блоков кода, которые обращаются к членам указанного объекта.

    +

    Contra: Оператор with заставляет указанный объект быть найденным сначала среди всех имён поиска.  Поэтому все идентификаторы, которые не относятся к указанному объекту, будут обнаруживаться медленнее в блоке «with.  Там, где важна производительность, «with» следует использовать только для охвата блоков кода, которые обращаются к членам указанного объекта.

    Ambiguity contra

    diff --git a/files/ru/web/javascript/reference/strict_mode/index.html b/files/ru/web/javascript/reference/strict_mode/index.html index 7b35f93897..fbf4446b55 100644 --- a/files/ru/web/javascript/reference/strict_mode/index.html +++ b/files/ru/web/javascript/reference/strict_mode/index.html @@ -10,7 +10,7 @@ translation_of: Web/JavaScript/Reference/Strict_mode ---
    {{JsSidebar("More")}}
    -

    Режим strict (строгий режим), введенный в ECMAScript 5, позволяет использовать более строгий вариант JavaScript. Это не просто подмножество языка: в нем сознательно используется семантика, отличающаяся от обычно принятой. Не поддерживающие строгий режим браузеры будут по-другому выполнять код, написанный для строгого режима, поэтому не полагайтесь на строгий режим без тестирования поддержки используемых особенностей этого режима. Строгий и обычный режим могут сосуществовать одновременно, а скрипт может переключаться в строгий режим по мере надобности.

    +

    Режим strict (строгий режим), введённый в ECMAScript 5, позволяет использовать более строгий вариант JavaScript. Это не просто подмножество языка: в нем сознательно используется семантика, отличающаяся от обычно принятой. Не поддерживающие строгий режим браузеры будут по-другому выполнять код, написанный для строгого режима, поэтому не полагайтесь на строгий режим без тестирования поддержки используемых особенностей этого режима. Строгий и обычный режим могут сосуществовать одновременно, а скрипт может переключаться в строгий режим по мере надобности.

    Строгий режим принёс ряд изменений в обычную семантику JavaScript. Во-первых, строгий режим заменяет исключениями некоторые ошибки, которые интерпретатор JavaScript ранее молча пропускал. Во-вторых, строгий режим исправляет ошибки, которые мешали движкам JavaScript выполнять оптимизацию -- в некоторых случаях код в строгом режиме может быть оптимизирован для более быстрого выполнения, чем код в обычном режиме. В-третьих, строгий режим запрещает использовать некоторые элементы синтаксиса, которые, вероятно, в следующих версиях ECMAScript получат особый смысл.

    @@ -18,11 +18,11 @@ translation_of: Web/JavaScript/Reference/Strict_mode

    Активизация строгого режима

    -

    Строгий режим применяется ко всему скрипту или к отдельным функциям. Он не может быть применён к блокам операторов, заключенных в фигурные скобки -- попытка использовать его в подобном контексте будет проигнорирована. Код в eval, Function, в атрибутах обработчиков событий, в строках, переданных в setTimeout, и т.п. рассматривается как законченный скрипт, и активизация строгого режима в нём выполняется ожидаемым образом.

    +

    Строгий режим применяется ко всему скрипту или к отдельным функциям. Он не может быть применён к блокам операторов, заключённых в фигурные скобки -- попытка использовать его в подобном контексте будет проигнорирована. Код в eval, Function, в атрибутах обработчиков событий, в строках, переданных в setTimeout, и т.п. рассматривается как законченный скрипт, и активизация строгого режима в нём выполняется ожидаемым образом.

    Строгий режим для скриптов

    -

    Чтобы активизировать строгий режим для всего скрипта, нужно поместить оператор "use strict"; или 'use strict'; перед всеми остальными операторами скрипта (выдержать приведенный синтаксис буквально).

    +

    Чтобы активизировать строгий режим для всего скрипта, нужно поместить оператор "use strict"; или 'use strict'; перед всеми остальными операторами скрипта (выдержать приведённый синтаксис буквально).

    // Синтаксис переключения в строгий режим всего скрипта
     "use strict";
    @@ -74,11 +74,11 @@ mistypeVaraible = 17; // mistypedVaraible, эта строка выбросит
     
     
    "use strict";
     
    -// Присваивание значения глобальной переменной, защищенной от записи
    +// Присваивание значения глобальной переменной, защищённой от записи
     var undefined = 5; // выдаст TypeError
     var Infinity = 5; // выдаст TypeError
     
    -// Присваивание значения свойству, защищенному от записи
    +// Присваивание значения свойству, защищённому от записи
     var obj1 = {};
     Object.defineProperty(obj1, "x", { value: 42, writable: false });
     obj1.x = 9; // выдаст TypeError
    @@ -133,7 +133,7 @@ var sum = 015 + // !!! синтаксическая ошибка
     console.log(sumWithOctal); // 16
     
    -

    В-седьмых, строгий режим в ECMAScript 2015 запрещает установку свойств {{Glossary("primitive")}} значениям. Без строгого режима, установка свойств просто игнорируется (no-op), со строгим режимом, однако, выдает {{jsxref ("TypeError")}}.

    +

    В-седьмых, строгий режим в ECMAScript 2015 запрещает установку свойств {{Glossary("primitive")}} значениям. Без строгого режима, установка свойств просто игнорируется (no-op), со строгим режимом, однако, выдаёт {{jsxref ("TypeError")}}.

    (function() {
     'use strict';
    @@ -146,7 +146,7 @@ false.true = '';         // TypeError
     
     

    Упрощение работы с переменными

    -

    Строгий режим упрощает сопоставление имени переменной с местом ее определения в коде. Многие оптимизации времени компиляции полагаются на возможность считать, что переменная X хранится в этом конкретном месте исходного кода. Иногда, при компиляции JavaScript простое сопоставление имени переменной с местом ее определения в коде не возможно, без выполнения того самого кода. Строгий же режим исключает большинство таких случаев, благодаря чему оптимизации компилятора работают эффективнее.

    +

    Строгий режим упрощает сопоставление имени переменной с местом её определения в коде. Многие оптимизации времени компиляции полагаются на возможность считать, что переменная X хранится в этом конкретном месте исходного кода. Иногда, при компиляции JavaScript простое сопоставление имени переменной с местом её определения в коде не возможно, без выполнения того самого кода. Строгий же режим исключает большинство таких случаев, благодаря чему оптимизации компилятора работают эффективнее.

    Во-первых, строгий режим запрещает использование with. Проблема с with в том, что во время выполнения любое имя внутри блока может ссылаться как на свойство обрабатываемого объекта, так и на переменную в окружающем (или даже в глобальном) контексте -- невозможно знать об этом заранее. Строгий режим считает with синтаксической ошибкой, поэтому не остаётся шанса использовать имя переменной внутри with для ссылки на неизвестное место во время выполнения:

    @@ -206,7 +206,7 @@ eval('var y; delete y;'); // !!!
    синтаксическая ошибк

    Упрощение eval и arguments

    -

    В строгом режиме снижается количество странностей в поведении arguments и eval, оба из которых примешивают определённое количество магии в обычный код. Так eval добавляет или удаляет переменные и меняет их значения, а переменная arguments может удивить своими проиндексированными свойствами, которые являются ссылками (синонимами) для поименованных аргументов функции. Строгий режим делает большой шаг в прояснении этих двух ключевых слов, но полное их обуздание произойдет лишь в следующей редакции ECMAScript.

    +

    В строгом режиме снижается количество странностей в поведении arguments и eval, оба из которых примешивают определённое количество магии в обычный код. Так eval добавляет или удаляет переменные и меняет их значения, а переменная arguments может удивить своими проиндексированными свойствами, которые являются ссылками (синонимами) для поименованных аргументов функции. Строгий режим делает большой шаг в прояснении этих двух ключевых слов, но полное их обуздание произойдёт лишь в следующей редакции ECMAScript.

    Во-первых, ключевые слова eval и arguments не могут быть переопределены или изменены. Все подобные попытки это сделать являются синтаксическими ошибками:

    @@ -235,7 +235,7 @@ console.assert(pair[0] === 42); console.assert(pair[1] === 17);
    -

    В-третьих, свойство arguments.callee больше не поддерживается. В обычном коде свойство arguments.callee ссылается на саму функцию для вызова которой и был создан объект arguments. Малоприменимое свойство, так как функция заранее известна, и к ней можно обратиться и по ее имени непосредственно. Более того, arguments.callee значительно затрудняет такую оптимизацию, как инлайнинг, потому как должна быть сохранена возможность обратиться к незаинлайненой функции на случай, если присутствует обращение к arguments.callee. В строгом режиме arguments.callee превращается в неудаляемое свойство, которое выбрасывает предостерегающее исключение при любой попытке обращения к нему:

    +

    В-третьих, свойство arguments.callee больше не поддерживается. В обычном коде свойство arguments.callee ссылается на саму функцию для вызова которой и был создан объект arguments. Малоприменимое свойство, так как функция заранее известна, и к ней можно обратиться и по её имени непосредственно. Более того, arguments.callee значительно затрудняет такую оптимизацию, как инлайнинг, потому как должна быть сохранена возможность обратиться к незаинлайненой функции на случай, если присутствует обращение к arguments.callee. В строгом режиме arguments.callee превращается в неудаляемое свойство, которое выбрасывает предостерегающее исключение при любой попытке обращения к нему:

    "use strict";
     var f = function() { return arguments.callee; };
    @@ -244,7 +244,7 @@ f(); // выдаст TypeError
     
     

    "Безопасный" JavaScript

    -

    Строгий режим упрощает написание "безопасного" JavaScript кода. Сейчас некоторые веб-сайты предоставляют пользователям возможность писать JavaScript, который будет выполняться на сайте от имени других пользователей. В браузерах, JavaScript может иметь доступ к приватной информации пользователя, поэтому, в целях ограничения доступа к запретной функциональности, такой JavaScript перед выполнением должен быть частично преобразован. Гибкость JavaScript делает это практически невозможным без многочисленных проверок во время исполнения. Функционал, исполняемый языком иногда столь массивен, что выполнение любых дополнительных проверок во время исполнения скрипта приведет к значительной потере производительности. Однако, некоторые особенности строгого режима, плюс обязательное требование того, чтобы JavaScript, загруженный пользователем, имел строгий режим и вызывался определенным способом, существенно снижают потребность в таких проверках.

    +

    Строгий режим упрощает написание "безопасного" JavaScript кода. Сейчас некоторые веб-сайты предоставляют пользователям возможность писать JavaScript, который будет выполняться на сайте от имени других пользователей. В браузерах, JavaScript может иметь доступ к приватной информации пользователя, поэтому, в целях ограничения доступа к запретной функциональности, такой JavaScript перед выполнением должен быть частично преобразован. Гибкость JavaScript делает это практически невозможным без многочисленных проверок во время исполнения. Функционал, исполняемый языком иногда столь массивен, что выполнение любых дополнительных проверок во время исполнения скрипта приведёт к значительной потере производительности. Однако, некоторые особенности строгого режима, плюс обязательное требование того, чтобы JavaScript, загруженный пользователем, имел строгий режим и вызывался определённым способом, существенно снижают потребность в таких проверках.

    Во-первых, значение, передаваемое в функцию как this, в строгом режиме не приводится к объекту (не "упаковывается"). В обычной функции this всегда представляет собой объект: либо это непосредственно объект, в случае вызова с this, представляющим объект-значение; либо значение, упакованное в объект, в случае вызова с this типа Boolean, string, или number; либо глобальный объект, если тип this это undefined или null. (Для точного определения конкретного this используйте {{jsxref('Global_Objects/Function/call', 'call')}}, {{jsxref('Global_Objects/Function/apply', 'apply')}}, или {{jsxref('Global_Objects/Function/bind', 'bind')}}.) Автоматическая упаковка не только снижает производительность, но и выставляет на показ глобальный объект, что в браузерах является угрозой безопасности, потому что глобальный объект предоставляет доступ к функциональности, которая должна быть ограничена в среде "безопасного" JavaScript. Таким образом, для функции в строгом режиме точно определённый this не упаковывается в объект, а если не определён точно, this является undefined:

    @@ -304,7 +304,7 @@ function fun(static) { 'use strict'; } // !!!
    -

    Два замечания, специфичных для Mozilla: Первое, если ваш код создан на JavaScript 1.7 или выше (например, chrome code, или тег <script type=""> заполнен правильно), и применен строгий режим, то let и yield имеют ту же функциональность, которая у них была изначально, когда они только появились. Однако в веб, в строгом коде загруженном через <script src=""> или <script>...</script>, нельзя будет использовать let/yield в качестве идентификаторов. Второе, в то время как ES5 зарезервировал слова class, enum, export, extends, import и super для любого режима, в Firefox 5 Mozilla они были зарезервированы намного раньше и лишь для строгого режима.

    +

    Два замечания, специфичных для Mozilla: Первое, если ваш код создан на JavaScript 1.7 или выше (например, chrome code, или тег <script type=""> заполнен правильно), и применён строгий режим, то let и yield имеют ту же функциональность, которая у них была изначально, когда они только появились. Однако в веб, в строгом коде загруженном через <script src=""> или <script>...</script>, нельзя будет использовать let/yield в качестве идентификаторов. Второе, в то время как ES5 зарезервировал слова class, enum, export, extends, import и super для любого режима, в Firefox 5 Mozilla они были зарезервированы намного раньше и лишь для строгого режима.

    Во-вторых, в строгом режиме запрещается объявление функций глубже самого верхнего уровня скрипта или функции. В обычном коде в браузерах, объявление функций позволено "везде", что не является частью ES5 (или даже ES3!) Это расширение различных браузеров, не имеющее общего совместимого подхода. Есть надежда, что в последующих редакциях ECMAScript будет определена новая семантика для объявления функций вне верхнего уровня скрипта или функции. Запрет на объявление таких функций в строгом режиме производит "зачистку" для спецификации в будущем релизе ECMAScript:

    @@ -326,7 +326,7 @@ function baz() { // верно

    Строгий режим в браузерах

    -

    В большинстве браузеров в настоящее время строгий режим реализован. Однако не стоит впадать в слепую зависимость от него, потому что существует множество Версий браузеров, поддерживающих строгий режим лишь частично или вовсе не поддерживающих оный (например, Internet Explorer ниже версии 10!). Строгий режим изменяет семантику. Надежда на эти изменения приведет к ошибкам и погрешностям в браузерах, в которых строгий режим не реализован. Проявляйте осторожность при использовании строгого режима, и подкрепляйте надежность строгого режима тестами особенностей, которые проверяют, насколько верно реализованы его фрагменты. Наконец, старайтесь тестировать свой код в браузерах, как поддерживающих, так и не поддерживающих строгий режим. Если вы проводите тестирование только в тех браузерах, которые не поддерживают строгий режим, то вполне вероятно у вас появятся проблемы в браузерах, его поддерживающих, и наоборот.

    +

    В большинстве браузеров в настоящее время строгий режим реализован. Однако не стоит впадать в слепую зависимость от него, потому что существует множество Версий браузеров, поддерживающих строгий режим лишь частично или вовсе не поддерживающих оный (например, Internet Explorer ниже версии 10!). Строгий режим изменяет семантику. Надежда на эти изменения приведёт к ошибкам и погрешностям в браузерах, в которых строгий режим не реализован. Проявляйте осторожность при использовании строгого режима, и подкрепляйте надёжность строгого режима тестами особенностей, которые проверяют, насколько верно реализованы его фрагменты. Наконец, старайтесь тестировать свой код в браузерах, как поддерживающих, так и не поддерживающих строгий режим. Если вы проводите тестирование только в тех браузерах, которые не поддерживают строгий режим, то вполне вероятно у вас появятся проблемы в браузерах, его поддерживающих, и наоборот.

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

    diff --git a/files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html b/files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html index 5447834c4b..4c4b882462 100644 --- a/files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html +++ b/files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html @@ -8,7 +8,7 @@ translation_of: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mod ---
    {{jsSidebar("More")}}
    -

    В ECMAScript 5 введен {{jsxref('Strict_mode', 'строгий режим')}}, который реализован во всех основных браузерах (включая IE10). В то время как включение интерпретации браузерами кода в строгом режиме делается очень просто (достаточно добавить "use strict"; в верхней части вашего исходного кода), для адаптации уже существующего кода к строгому режиму потребуется немного больше работы.

    +

    В ECMAScript 5 введён {{jsxref('Strict_mode', 'строгий режим')}}, который реализован во всех основных браузерах (включая IE10). В то время как включение интерпретации браузерами кода в строгом режиме делается очень просто (достаточно добавить "use strict"; в верхней части вашего исходного кода), для адаптации уже существующего кода к строгому режиму потребуется немного больше работы.

    Цель этой статьи: предоставить для разработчиков руководство по переходу к строгому режиму.

    @@ -105,15 +105,15 @@ s.opacity = 1;

    this в вызовах функции

    -

    В функциях как f(), значением this является глобальный объект. В строгом режиме он теперь равен undefined. Когда функция вызывалась с помощью {{jsxref('Global_Objects/Function/call', 'call')}} или {{jsxref('Global_Objects/Function/apply', 'apply')}}, если значением был примитив, он упаковывался в соответствующий объект (или в глобальный объект для undefined и null). В строгом режиме значение передается без каких-либо преобразований и замен.

    +

    В функциях как f(), значением this является глобальный объект. В строгом режиме он теперь равен undefined. Когда функция вызывалась с помощью {{jsxref('Global_Objects/Function/call', 'call')}} или {{jsxref('Global_Objects/Function/apply', 'apply')}}, если значением был примитив, он упаковывался в соответствующий объект (или в глобальный объект для undefined и null). В строгом режиме значение передаётся без каких-либо преобразований и замен.

    arguments не является псевдонимом именованных аргументов функции

    -

    В нестрогом режиме изменение значения в объекте arguments изменяло соответствующий именованный аргумент функции. Это усложняло оптимизацию кода для движков JavaScript и сам код становился менее читабельным и понятным. В строгом режиме объект arguments создается и инициализируется с теми же значениями, что и именованные аргументы, но изменения объекта arguments или именованных аргументов теперь никак не влияют друг на друга.

    +

    В нестрогом режиме изменение значения в объекте arguments изменяло соответствующий именованный аргумент функции. Это усложняло оптимизацию кода для движков JavaScript и сам код становился менее читабельным и понятным. В строгом режиме объект arguments создаётся и инициализируется с теми же значениями, что и именованные аргументы, но изменения объекта arguments или именованных аргументов теперь никак не влияют друг на друга.

    Изменения в eval

    -

    В строгом режиме eval не создает новой переменной в той области видимости, где был вызван. Также, конечно, в строгом режиме, строка выполняется с правилами строгого режима. Потребуется провести тщательное тестирование, чтобы убедиться, что ничего не сломалось. Не использовать eval, если он вам действительно не нужен, может быть другим прагматичным решением.

    +

    В строгом режиме eval не создаёт новой переменной в той области видимости, где был вызван. Также, конечно, в строгом режиме, строка выполняется с правилами строгого режима. Потребуется провести тщательное тестирование, чтобы убедиться, что ничего не сломалось. Не использовать eval, если он вам действительно не нужен, может быть другим прагматичным решением.

    Строго-нейтральный код

    diff --git a/files/ru/web/javascript/typed_arrays/index.html b/files/ru/web/javascript/typed_arrays/index.html index d55e398573..82b7830b90 100644 --- a/files/ru/web/javascript/typed_arrays/index.html +++ b/files/ru/web/javascript/typed_arrays/index.html @@ -5,23 +5,23 @@ translation_of: Web/JavaScript/Typed_arrays ---
    {{JsSidebar("Advanced")}}
    -

    Типизированные массивы в JavaScript являются массива-подобными объектами, предоставляющими механизм доступа к сырым двоичным данным. Как вы уже можете знать, массив {{jsxref("Array")}} растет и обрезается динамически, и может содержать элементы любого типа JavaScript. Благодаря оптимизациям JavaScript движков, массивы остаются быстрыми. Однако, со временем, веб-приложения становятся все более и более мощными, появляется необходимость работы с аудио- и видео-данными, требуется доступ к сырым данным WebSocket, и так далее. Становится очевидным, что возможность быстрой и эффективной работы с двоичными данными в JavaScript будет очень полезной, для чего типизированные массивы и предназначены.

    +

    Типизированные массивы в JavaScript являются массива-подобными объектами, предоставляющими механизм доступа к сырым двоичным данным. Как вы уже можете знать, массив {{jsxref("Array")}} растёт и обрезается динамически, и может содержать элементы любого типа JavaScript. Благодаря оптимизациям JavaScript движков, массивы остаются быстрыми. Однако, со временем, веб-приложения становятся все более и более мощными, появляется необходимость работы с аудио- и видео-данными, требуется доступ к сырым данным WebSocket, и так далее. Становится очевидным, что возможность быстрой и эффективной работы с двоичными данными в JavaScript будет очень полезной, для чего типизированные массивы и предназначены.

    -

    Не следует путать типизированные массивы с обычными массивами: так, например, вызов {{jsxref("Array.isArray()")}} для типизированного массива вернет false. Более того, не все методы, доступные для обычных массивов поддерживаются типизированными массивами (например, push и pop).

    +

    Не следует путать типизированные массивы с обычными массивами: так, например, вызов {{jsxref("Array.isArray()")}} для типизированного массива вернёт false. Более того, не все методы, доступные для обычных массивов поддерживаются типизированными массивами (например, push и pop).

    Буферы и представления: архитектура типизированных массивов

    -

    Для достижения максимальной гибкости и производительности, реализация типизированных массивов в JavaScript разделена на буферы и представления. Буфер (ArrayBuffer) –– это объект, представляющий из себя набор данных. Он не имеет формата и не предоставляет возможности доступа к своему содержимому. Для доступа к памяти буфера вам нужно использовать представление. Представление предоставляет контекст: тип данных, начальную позицию в буфере и количество элементов. Это позволяет представить данные в виде типизированного массива.

    +

    Для достижения максимальной гибкости и производительности, реализация типизированных массивов в JavaScript разделена на буферы и представления. Буфер (ArrayBuffer) –– это объект, представляющий из себя набор данных. Он не имеет формата и не предоставляет возможности доступа к своему содержимому. Для доступа к памяти буфера вам нужно использовать представление. Представление предоставляет контекст: тип данных, начальную позицию в буфере и количество элементов. Это позволяет представить данные в виде типизированного массива.

    Typed arrays in an ArrayBuffer

    ArrayBuffer

    -

    Объект ArrayBuffer –– это набор бинарных данных с фиксированной длинной. Вы не можете манипулировать содержимым ArrayBuffer напрямую. Вместо этого, необходимо создать типизированное представление DataView, которое будет отображать буфер в определенном формате, и даст доступ на запись и чтение его содержимого.

    +

    Объект ArrayBuffer –– это набор бинарных данных с фиксированной длинной. Вы не можете манипулировать содержимым ArrayBuffer напрямую. Вместо этого, необходимо создать типизированное представление DataView, которое будет отображать буфер в определённом формате, и даст доступ на запись и чтение его содержимого.

    Типизированные представления

    -

    Название типизированного представления массива говорит само за себя. Оно представляет массив в распространенных числовых форматах, таких как  Int8Uint32Float64 и так далее. Среди прочих, существует специальное представление Uint8ClampedArray. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при Обработке данных изображения в Canvas.

    +

    Название типизированного представления массива говорит само за себя. Оно представляет массив в распространённых числовых форматах, таких как  Int8Uint32Float64 и так далее. Среди прочих, существует специальное представление Uint8ClampedArray. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при Обработке данных изображения в Canvas.

    {{page("/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", "Объект TypedArray")}}

    @@ -74,7 +74,7 @@ translation_of: Web/JavaScript/Typed_arrays

    Множество представлений для одних и тех же данных

    -

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

    +

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

    var int16View = new Int16Array(buffer);
     
    @@ -83,7 +83,7 @@ for (var i = 0; i < int16View.length; i++) {
     }
     
    -

    Здесь мы создаем 16-битное целочисленное представление, которое ссылается на тот же самый буфер, что и 32-битное представление, и затем выводим все 16-битные элементы этого представления. Мы получим следующий вывод: 0, 0, 2, 0, 4, 0, 6, 0.

    +

    Здесь мы создаём 16-битное целочисленное представление, которое ссылается на тот же самый буфер, что и 32-битное представление, и затем выводим все 16-битные элементы этого представления. Мы получим следующий вывод: 0, 0, 2, 0, 4, 0, 6, 0.

    Можно пойти дальше. Оцените этот код:

    @@ -115,9 +115,9 @@ var idView = new Uint32Array(buffer, 0, 1); var usernameView = new Uint8Array(buffer, 4, 16); var amountDueView = new Float32Array(buffer, 20, 1);
    -

    Теперь получить или изменить значение поля amountDue, к примеру, можно путем обращения к amountDueView[0].

    +

    Теперь получить или изменить значение поля amountDue, к примеру, можно путём обращения к amountDueView[0].

    -
    Примечание: Выравнивание данных в языке C является платформозависимым. Принимайте меры по вычислению правильных отступов в данных с учетом выравнивания.
    +
    Примечание: Выравнивание данных в языке C является платформозависимым. Принимайте меры по вычислению правильных отступов в данных с учётом выравнивания.

    Преобразование в обычные массивы

    -- cgit v1.2.3-54-g00ecf