aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:42:52 -0500
commit074785cea106179cb3305637055ab0a009ca74f2 (patch)
treee6ae371cccd642aa2b67f39752a2cdf1fd4eb040 /files/ru/web/javascript
parentda78a9e329e272dedb2400b79a3bdeebff387d47 (diff)
downloadtranslated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.gz
translated-content-074785cea106179cb3305637055ab0a009ca74f2.tar.bz2
translated-content-074785cea106179cb3305637055ab0a009ca74f2.zip
initial commit
Diffstat (limited to 'files/ru/web/javascript')
-rw-r--r--files/ru/web/javascript/a_re-introduction_to_javascript/index.html900
-rw-r--r--files/ru/web/javascript/closures/index.html345
-rw-r--r--files/ru/web/javascript/data_structures/index.html310
-rw-r--r--files/ru/web/javascript/enumerability_and_ownership_of_properties/index.html243
-rw-r--r--files/ru/web/javascript/equality_comparisons_and_sameness/index.html424
-rw-r--r--files/ru/web/javascript/eventloop/index.html111
-rw-r--r--files/ru/web/javascript/guide/about/index.html158
-rw-r--r--files/ru/web/javascript/guide/control_flow_and_error_handling/index.html371
-rw-r--r--files/ru/web/javascript/guide/details_of_the_object_model/index.html723
-rw-r--r--files/ru/web/javascript/guide/expressions_and_operators/index.html937
-rw-r--r--files/ru/web/javascript/guide/functions/index.html669
-rw-r--r--files/ru/web/javascript/guide/grammar_and_types/index.html642
-rw-r--r--files/ru/web/javascript/guide/index.html131
-rw-r--r--files/ru/web/javascript/guide/indexed_collections/index.html441
-rw-r--r--files/ru/web/javascript/guide/ispolzovanie_promisov/index.html321
-rw-r--r--files/ru/web/javascript/guide/iterators_and_generators/index.html159
-rw-r--r--files/ru/web/javascript/guide/javascript_overview/index.html141
-rw-r--r--files/ru/web/javascript/guide/keyed_collections/index.html172
-rw-r--r--files/ru/web/javascript/guide/liveconnect_overview/index.html795
-rw-r--r--files/ru/web/javascript/guide/meta_programming/index.html265
-rw-r--r--files/ru/web/javascript/guide/modules/index.html451
-rw-r--r--files/ru/web/javascript/guide/numbers_and_dates/index.html378
-rw-r--r--files/ru/web/javascript/guide/predefined_core_objects/index.html922
-rw-r--r--files/ru/web/javascript/guide/regular_expressions/assertions/index.html60
-rw-r--r--files/ru/web/javascript/guide/regular_expressions/character_classes/index.html221
-rw-r--r--files/ru/web/javascript/guide/regular_expressions/index.html659
-rw-r--r--files/ru/web/javascript/guide/text_formatting/index.html281
-rw-r--r--files/ru/web/javascript/guide/working_with_objects/index.html492
-rw-r--r--files/ru/web/javascript/guide/введение_в_javascript/index.html159
-rw-r--r--files/ru/web/javascript/guide/об_этом_руководстве/index.html68
-rw-r--r--files/ru/web/javascript/guide/циклы_и_итерации/index.html362
-rw-r--r--files/ru/web/javascript/index.html151
-rw-r--r--files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html301
-rw-r--r--files/ru/web/javascript/introduction_to_object-oriented_javascript/index.html355
-rw-r--r--files/ru/web/javascript/javascript_technologies_overview/index.html85
-rw-r--r--files/ru/web/javascript/javascript_шеллы/index.html44
-rw-r--r--files/ru/web/javascript/language_resources/index.html82
-rw-r--r--files/ru/web/javascript/memory_management/index.html178
-rw-r--r--files/ru/web/javascript/new_in_javascript/1.5/index.html37
-rw-r--r--files/ru/web/javascript/new_in_javascript/1.6/index.html32
-rw-r--r--files/ru/web/javascript/new_in_javascript/1.8.1/index.html31
-rw-r--r--files/ru/web/javascript/new_in_javascript/1.8.5/index.html122
-rw-r--r--files/ru/web/javascript/new_in_javascript/1.8/index.html38
-rw-r--r--files/ru/web/javascript/new_in_javascript/ecmascript_5_support_in_mozilla/index.html46
-rw-r--r--files/ru/web/javascript/new_in_javascript/ecmascript_6_support_in_mozilla/index.html222
-rw-r--r--files/ru/web/javascript/new_in_javascript/index.html80
-rw-r--r--files/ru/web/javascript/reference/classes/class_fields/index.html350
-rw-r--r--files/ru/web/javascript/reference/classes/constructor/index.html205
-rw-r--r--files/ru/web/javascript/reference/classes/extends/index.html179
-rw-r--r--files/ru/web/javascript/reference/classes/index.html414
-rw-r--r--files/ru/web/javascript/reference/classes/static/index.html129
-rw-r--r--files/ru/web/javascript/reference/classes/приватные_поля_класса/index.html205
-rw-r--r--files/ru/web/javascript/reference/deprecated_and_obsolete_features/index.html290
-rw-r--r--files/ru/web/javascript/reference/errors/already_has_pragma/index.html44
-rw-r--r--files/ru/web/javascript/reference/errors/array_sort_argument/index.html45
-rw-r--r--files/ru/web/javascript/reference/errors/bad_octal/index.html53
-rw-r--r--files/ru/web/javascript/reference/errors/bad_radix/index.html61
-rw-r--r--files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html102
-rw-r--r--files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html56
-rw-r--r--files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html67
-rw-r--r--files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html60
-rw-r--r--files/ru/web/javascript/reference/errors/cant_access_property/index.html58
-rw-r--r--files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html52
-rw-r--r--files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html65
-rw-r--r--files/ru/web/javascript/reference/errors/cant_delete/index.html60
-rw-r--r--files/ru/web/javascript/reference/errors/cant_redefine_property/index.html49
-rw-r--r--files/ru/web/javascript/reference/errors/cyclic_object_value/index.html70
-rw-r--r--files/ru/web/javascript/reference/errors/dead_object/index.html48
-rw-r--r--files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html68
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html76
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html76
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_octal/index.html70
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html113
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html103
-rw-r--r--files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html90
-rw-r--r--files/ru/web/javascript/reference/errors/equal_as_assign/index.html51
-rw-r--r--files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html163
-rw-r--r--files/ru/web/javascript/reference/errors/getter_only/index.html81
-rw-r--r--files/ru/web/javascript/reference/errors/identifier_after_number/index.html58
-rw-r--r--files/ru/web/javascript/reference/errors/illegal_character/index.html70
-rw-r--r--files/ru/web/javascript/reference/errors/in_operator_no_object/index.html71
-rw-r--r--files/ru/web/javascript/reference/errors/index.html25
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_array_length/index.html76
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html54
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html87
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_date/index.html54
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html73
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html63
-rw-r--r--files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html61
-rw-r--r--files/ru/web/javascript/reference/errors/is_not_iterable/index.html100
-rw-r--r--files/ru/web/javascript/reference/errors/json_bad_parse/index.html111
-rw-r--r--files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html61
-rw-r--r--files/ru/web/javascript/reference/errors/malformed_uri/index.html61
-rw-r--r--files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html56
-rw-r--r--files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html72
-rw-r--r--files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html66
-rw-r--r--files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html51
-rw-r--r--files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html75
-rw-r--r--files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html54
-rw-r--r--files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html63
-rw-r--r--files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html38
-rw-r--r--files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html70
-rw-r--r--files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html82
-rw-r--r--files/ru/web/javascript/reference/errors/more_arguments_needed/index.html48
-rw-r--r--files/ru/web/javascript/reference/errors/negative_repetition_count/index.html40
-rw-r--r--files/ru/web/javascript/reference/errors/no_non-null_object/index.html65
-rw-r--r--files/ru/web/javascript/reference/errors/no_properties/index.html41
-rw-r--r--files/ru/web/javascript/reference/errors/no_variable_name/index.html83
-rw-r--r--files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html84
-rw-r--r--files/ru/web/javascript/reference/errors/not_a_codepoint/index.html50
-rw-r--r--files/ru/web/javascript/reference/errors/not_a_constructor/index.html96
-rw-r--r--files/ru/web/javascript/reference/errors/not_a_function/index.html84
-rw-r--r--files/ru/web/javascript/reference/errors/not_defined/index.html66
-rw-r--r--files/ru/web/javascript/reference/errors/precision_range/index.html96
-rw-r--r--files/ru/web/javascript/reference/errors/property_access_denied/index.html47
-rw-r--r--files/ru/web/javascript/reference/errors/read-only/index.html82
-rw-r--r--files/ru/web/javascript/reference/errors/redeclared_parameter/index.html61
-rw-r--r--files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html89
-rw-r--r--files/ru/web/javascript/reference/errors/reserved_identifier/index.html76
-rw-r--r--files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html45
-rw-r--r--files/ru/web/javascript/reference/errors/stmt_after_return/index.html84
-rw-r--r--files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html126
-rw-r--r--files/ru/web/javascript/reference/errors/too_much_recursion/index.html54
-rw-r--r--files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html78
-rw-r--r--files/ru/web/javascript/reference/errors/undeclared_var/index.html66
-rw-r--r--files/ru/web/javascript/reference/errors/undefined_prop/index.html57
-rw-r--r--files/ru/web/javascript/reference/errors/unexpected_token/index.html74
-rw-r--r--files/ru/web/javascript/reference/errors/unexpected_type/index.html63
-rw-r--r--files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html111
-rw-r--r--files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html64
-rw-r--r--files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html60
-rw-r--r--files/ru/web/javascript/reference/functions/arguments/callee/index.html141
-rw-r--r--files/ru/web/javascript/reference/functions/arguments/caller/index.html100
-rw-r--r--files/ru/web/javascript/reference/functions/arguments/index.html241
-rw-r--r--files/ru/web/javascript/reference/functions/arguments/length/index.html117
-rw-r--r--files/ru/web/javascript/reference/functions/arrow_functions/index.html378
-rw-r--r--files/ru/web/javascript/reference/functions/default_parameters/index.html217
-rw-r--r--files/ru/web/javascript/reference/functions/get/index.html180
-rw-r--r--files/ru/web/javascript/reference/functions/index.html483
-rw-r--r--files/ru/web/javascript/reference/functions/rest_parameters/index.html209
-rw-r--r--files/ru/web/javascript/reference/functions/set/index.html134
-rw-r--r--files/ru/web/javascript/reference/functions/определиние_методов/index.html191
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/@@iterator/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/@@species/index.html78
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/@@unscopables/index.html76
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/concat/index.html135
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/copywithin/index.html216
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/entries/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/every/index.html195
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/fill/index.html159
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/filter/index.html302
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/find/index.html167
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/findindex/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/flat/index.html160
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/flatmap/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/foreach/index.html388
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/from/index.html216
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/includes/index.html171
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/index.html452
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/indexof/index.html175
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/isarray/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/join/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/keys/index.html90
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html167
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/length/index.html146
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/map/index.html284
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/observe/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/of/index.html99
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/pop/index.html99
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/prototype/index.html171
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/push/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/reduce/index.html314
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/reduceright/index.html290
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/reverse/index.html96
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/shift/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/slice/index.html242
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/some/index.html215
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/sort/index.html234
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/splice/index.html142
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/tolocalestring/index.html134
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/tosource/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/tostring/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/unshift/index.html89
-rw-r--r--files/ru/web/javascript/reference/global_objects/array/values/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/arraybuffer/index.html145
-rw-r--r--files/ru/web/javascript/reference/global_objects/arraybuffer/isview/index.html88
-rw-r--r--files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/asyncfunction/index.html166
-rw-r--r--files/ru/web/javascript/reference/global_objects/asyncfunction/prototype/index.html55
-rw-r--r--files/ru/web/javascript/reference/global_objects/atomics/add/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/atomics/index.html168
-rw-r--r--files/ru/web/javascript/reference/global_objects/atomics/sub/index.html128
-rw-r--r--files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html79
-rw-r--r--files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html72
-rw-r--r--files/ru/web/javascript/reference/global_objects/bigint/index.html294
-rw-r--r--files/ru/web/javascript/reference/global_objects/boolean/index.html200
-rw-r--r--files/ru/web/javascript/reference/global_objects/boolean/prototype/index.html112
-rw-r--r--files/ru/web/javascript/reference/global_objects/boolean/tosource/index.html92
-rw-r--r--files/ru/web/javascript/reference/global_objects/boolean/tostring/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/boolean/valueof/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/dataview/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/dataview/setint16/index.html80
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getdate/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getday/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getfullyear/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/gethours/index.html103
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getmilliseconds/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getminutes/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getmonth/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getseconds/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/gettime/index.html100
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html106
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcdate/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcday/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcfullyear/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutchours/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcminutes/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcmonth/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getutcseconds/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/getyear/index.html123
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/index.html232
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/now/index.html78
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/parse/index.html217
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/prototype/index.html228
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setdate/index.html84
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setfullyear/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/sethours/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setmilliseconds/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setminutes/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setmonth/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setseconds/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/settime/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcdate/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcfullyear/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutchours/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcminutes/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcmonth/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setutcseconds/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/setyear/index.html87
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/todatestring/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/togmtstring/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/toisostring/index.html143
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tojson/index.html107
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tolocaledatestring/index.html226
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tolocaleformat/index.html73
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tolocalestring/index.html233
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tolocaletimestring/index.html203
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tosource/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/tostring/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/totimestring/index.html77
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/utc/index.html123
-rw-r--r--files/ru/web/javascript/reference/global_objects/date/valueof/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/decodeuri/index.html124
-rw-r--r--files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html107
-rw-r--r--files/ru/web/javascript/reference/global_objects/encodeuri/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html157
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/columnnumber/index.html78
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/filename/index.html80
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/index.html208
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/linenumber/index.html92
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/message/index.html107
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/name/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/prototype/index.html154
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/stack/index.html147
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/tosource/index.html88
-rw-r--r--files/ru/web/javascript/reference/global_objects/error/tostring/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/escape/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/eval/index.html213
-rw-r--r--files/ru/web/javascript/reference/global_objects/evalerror/index.html146
-rw-r--r--files/ru/web/javascript/reference/global_objects/evalerror/prototype/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/float32array/index.html202
-rw-r--r--files/ru/web/javascript/reference/global_objects/float64array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/apply/index.html252
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/arguments/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/arity/index.html30
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/bind/index.html311
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/call/index.html175
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/caller/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/displayname/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/index.html200
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/isgenerator/index.html83
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/length/index.html145
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/name/index.html219
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/prototype/index.html151
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/tosource/index.html87
-rw-r--r--files/ru/web/javascript/reference/global_objects/function/tostring/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/generator/index.html187
-rw-r--r--files/ru/web/javascript/reference/global_objects/generator/next/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/generator/return/index.html95
-rw-r--r--files/ru/web/javascript/reference/global_objects/generator/throw/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/generatorfunction/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/generatorfunction/prototype/index.html58
-rw-r--r--files/ru/web/javascript/reference/global_objects/globalthis/index.html88
-rw-r--r--files/ru/web/javascript/reference/global_objects/index.html166
-rw-r--r--files/ru/web/javascript/reference/global_objects/infinity/index.html98
-rw-r--r--files/ru/web/javascript/reference/global_objects/int16array/index.html201
-rw-r--r--files/ru/web/javascript/reference/global_objects/int32array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/int8array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/internalerror/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/internalerror/prototype/index.html99
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/collator/compare/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/collator/index.html187
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/collator/prototype/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html123
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html169
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/index.html276
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html73
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/listformat/index.html104
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/numberformat/format/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/numberformat/index.html189
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/numberformat/prototype/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/isfinite/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/isnan/index.html133
-rw-r--r--files/ru/web/javascript/reference/global_objects/iterator/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/json/index.html230
-rw-r--r--files/ru/web/javascript/reference/global_objects/json/parse/index.html150
-rw-r--r--files/ru/web/javascript/reference/global_objects/json/stringify/index.html189
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/@@species/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/clear/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/delete/index.html79
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/entries/index.html127
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/foreach/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/get/index.html68
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/has/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/index.html288
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/keys/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/prototype/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/set/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/size/index.html112
-rw-r--r--files/ru/web/javascript/reference/global_objects/map/values/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/abs/index.html100
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/acos/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/acosh/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/asin/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/asinh/index.html135
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/atan/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/atan2/index.html134
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/atanh/index.html137
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/cbrt/index.html134
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/ceil/index.html207
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/clz32/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/cos/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/cosh/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/e/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/exp/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/expm1/index.html132
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/floor/index.html200
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/fround/index.html128
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/hypot/index.html149
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/imul/index.html130
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/index.html198
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/ln10/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/ln2/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log/index.html129
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log10/index.html137
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log10e/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log1p/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log2/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/log2e/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/max/index.html137
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/min/index.html147
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/pi/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/pow/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/random/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/round/index.html214
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sign/index.html141
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sin/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sinh/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sqrt/index.html143
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sqrt1_2/index.html112
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/sqrt2/index.html112
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/tan/index.html124
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/tanh/index.html153
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/trunc/index.html137
-rw-r--r--files/ru/web/javascript/reference/global_objects/math/метод_math.max()_/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/nan/index.html103
-rw-r--r--files/ru/web/javascript/reference/global_objects/null/index.html106
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/epsilon/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/index.html181
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/isfinite/index.html130
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/isinteger/index.html95
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/isnan/index.html96
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/issafeinteger/index.html95
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.html65
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/max_value/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/min_safe_integer/index.html105
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/min_value/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/nan/index.html97
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/negative_infinity/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/parsefloat/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/parseint/index.html82
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/positive_infinity/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/prototype/index.html123
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/toexponential/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/tofixed/index.html143
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/tointeger/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/tolocalestring/index.html164
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/toprecision/index.html150
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/tosource/index.html104
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/tostring/index.html148
-rw-r--r--files/ru/web/javascript/reference/global_objects/number/valueof/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/__definegetter__/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/__definesetter__/index.html132
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/__lookupgetter__/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/__lookupsetter__/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/assign/index.html216
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/constructor/index.html173
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/count/index.html83
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/create/index.html240
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/defineproperties/index.html236
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html399
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/entries/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/eval/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/freeze/index.html165
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/fromentries/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html47
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html148
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getownpropertynames/index.html161
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/getprototypeof/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/hasownproperty/index.html145
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/index.html216
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/is/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/isextensible/index.html134
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/isfrozen/index.html142
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/isprototypeof/index.html159
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/issealed/index.html147
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/keys/index.html153
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html195
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/observe/index.html142
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/parent/index.html75
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/preventextensions/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/propertyisenumerable/index.html173
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/proto/index.html151
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/prototype/index.html204
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/seal/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/setprototypeof/index.html256
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/tolocalestring/index.html103
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/tosource/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/tostring/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/unobserve/index.html97
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/unwatch/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/valueof/index.html141
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/values/index.html98
-rw-r--r--files/ru/web/javascript/reference/global_objects/object/watch/index.html168
-rw-r--r--files/ru/web/javascript/reference/global_objects/parallelarray/index.html52
-rw-r--r--files/ru/web/javascript/reference/global_objects/parsefloat/index.html136
-rw-r--r--files/ru/web/javascript/reference/global_objects/parseint/index.html202
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/all/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html60
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/any/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/catch/index.html157
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/finally/index.html98
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/index.html267
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/prototype/index.html66
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/race/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/reject/index.html76
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/resolve/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/promise/then/index.html158
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/handler/index.html134
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html179
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/index.html482
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/proxy/apply/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/proxy/get/index.html127
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/proxy/index.html125
-rw-r--r--files/ru/web/javascript/reference/global_objects/proxy/revocable/index.html91
-rw-r--r--files/ru/web/javascript/reference/global_objects/rangeerror/index.html151
-rw-r--r--files/ru/web/javascript/reference/global_objects/rangeerror/prototype/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/referenceerror/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/referenceerror/prototype/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/apply/index.html101
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/construct/index.html151
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/defineproperty/index.html98
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/deleteproperty/index.html92
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/get/index.html99
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/index.html153
-rw-r--r--files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html89
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/@@search/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/exec/index.html228
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/flags/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/global/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/ignorecase/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/index.html665
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/input/index.html55
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/lastindex/index.html130
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html54
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/multiline/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/n/index.html64
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/prototype/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/source/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/sticky/index.html139
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/test/index.html143
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/tosource/index.html106
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/tostring/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html70
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/add/index.html76
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/clear/index.html74
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/delete/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/entries/index.html71
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/foreach/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/has/index.html91
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/index.html242
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/prototype/index.html80
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/set/index.html72
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/size/index.html68
-rw-r--r--files/ru/web/javascript/reference/global_objects/set/values/index.html72
-rw-r--r--files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html209
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/@@iterator/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/anchor/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/big/index.html112
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/blink/index.html117
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/bold/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/charat/index.html270
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/charcodeat/index.html205
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/codepointat/index.html174
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/concat/index.html121
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/endswith/index.html145
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/fixed/index.html108
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/fontcolor/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/fontsize/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/fromcharcode/index.html138
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/fromcodepoint/index.html213
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/includes/index.html127
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/index.html301
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/indexof/index.html194
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/italics/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/lastindexof/index.html155
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/length/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/link/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/localecompare/index.html196
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/match/index.html177
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/matchall/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/normalize/index.html174
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/padend/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/padstart/index.html92
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/prototype/index.html229
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/quote/index.html124
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/raw/index.html153
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/repeat/index.html124
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/replace/index.html289
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/replaceall/index.html167
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/search/index.html149
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/slice/index.html173
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/small/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/split/index.html229
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/startswith/index.html81
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/strike/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/sub/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/substr/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/substring/index.html194
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/sup/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/tolocalelowercase/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html110
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/tolowercase/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/tosource/index.html91
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/tostring/index.html111
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/touppercase/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/trim/index.html135
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/trimleft/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/trimright/index.html93
-rw-r--r--files/ru/web/javascript/reference/global_objects/string/valueof/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html66
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/for/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html71
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/index.html227
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html148
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html135
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html87
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/match/index.html113
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html106
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/replace/index.html99
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/search/index.html54
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/species/index.html116
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/split/index.html53
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html92
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html89
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html89
-rw-r--r--files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html94
-rw-r--r--files/ru/web/javascript/reference/global_objects/syntaxerror/index.html174
-rw-r--r--files/ru/web/javascript/reference/global_objects/syntaxerror/prototype/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/@@species/index.html130
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html119
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/index.html258
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/join/index.html133
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/prototype/index.html128
-rw-r--r--files/ru/web/javascript/reference/global_objects/typedarray/set/index.html140
-rw-r--r--files/ru/web/javascript/reference/global_objects/typeerror/index.html131
-rw-r--r--files/ru/web/javascript/reference/global_objects/typeerror/prototype/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/uint16array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/uint32array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/uint8array/index.html199
-rw-r--r--files/ru/web/javascript/reference/global_objects/uint8clampedarray/index.html256
-rw-r--r--files/ru/web/javascript/reference/global_objects/undefined/index.html143
-rw-r--r--files/ru/web/javascript/reference/global_objects/unescape/index.html126
-rw-r--r--files/ru/web/javascript/reference/global_objects/uneval/index.html73
-rw-r--r--files/ru/web/javascript/reference/global_objects/urierror/index.html163
-rw-r--r--files/ru/web/javascript/reference/global_objects/urierror/prototype/index.html122
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html91
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html114
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/get/index.html115
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/has/index.html118
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/index.html158
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html74
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakmap/set/index.html120
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakset/add/index.html77
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakset/delete/index.html123
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakset/has/index.html124
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakset/index.html109
-rw-r--r--files/ru/web/javascript/reference/global_objects/weakset/prototype/index.html141
-rw-r--r--files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html83
-rw-r--r--files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html79
-rw-r--r--files/ru/web/javascript/reference/global_objects/webassembly/index.html161
-rw-r--r--files/ru/web/javascript/reference/global_objects/webassembly/table/index.html104
-rw-r--r--files/ru/web/javascript/reference/index.html48
-rw-r--r--files/ru/web/javascript/reference/iteration_protocols/index.html316
-rw-r--r--files/ru/web/javascript/reference/lexical_grammar/index.html693
-rw-r--r--files/ru/web/javascript/reference/operators/addition/index.html80
-rw-r--r--files/ru/web/javascript/reference/operators/addition_assignment/index.html75
-rw-r--r--files/ru/web/javascript/reference/operators/arithmetic_operators/index.html290
-rw-r--r--files/ru/web/javascript/reference/operators/array_comprehensions/index.html241
-rw-r--r--files/ru/web/javascript/reference/operators/assignment_operators/index.html430
-rw-r--r--files/ru/web/javascript/reference/operators/async_function/index.html147
-rw-r--r--files/ru/web/javascript/reference/operators/await/index.html157
-rw-r--r--files/ru/web/javascript/reference/operators/bitwise_and/index.html111
-rw-r--r--files/ru/web/javascript/reference/operators/bitwise_operators/index.html625
-rw-r--r--files/ru/web/javascript/reference/operators/class/index.html152
-rw-r--r--files/ru/web/javascript/reference/operators/decrement/index.html80
-rw-r--r--files/ru/web/javascript/reference/operators/delete/index.html127
-rw-r--r--files/ru/web/javascript/reference/operators/destructuring_assignment/index.html339
-rw-r--r--files/ru/web/javascript/reference/operators/expression_closures/index.html118
-rw-r--r--files/ru/web/javascript/reference/operators/function/index.html143
-rw-r--r--files/ru/web/javascript/reference/operators/function_star_/index.html149
-rw-r--r--files/ru/web/javascript/reference/operators/generator_comprehensions/index.html229
-rw-r--r--files/ru/web/javascript/reference/operators/in/index.html136
-rw-r--r--files/ru/web/javascript/reference/operators/index.html291
-rw-r--r--files/ru/web/javascript/reference/operators/instanceof/index.html165
-rw-r--r--files/ru/web/javascript/reference/operators/new.target/index.html137
-rw-r--r--files/ru/web/javascript/reference/operators/new/index.html217
-rw-r--r--files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html144
-rw-r--r--files/ru/web/javascript/reference/operators/object_initializer/index.html431
-rw-r--r--files/ru/web/javascript/reference/operators/operator_precedence/index.html322
-rw-r--r--files/ru/web/javascript/reference/operators/optional_chaining/index.html176
-rw-r--r--files/ru/web/javascript/reference/operators/property_accessors/index.html203
-rw-r--r--files/ru/web/javascript/reference/operators/spread_syntax/index.html249
-rw-r--r--files/ru/web/javascript/reference/operators/super/index.html186
-rw-r--r--files/ru/web/javascript/reference/operators/this/index.html412
-rw-r--r--files/ru/web/javascript/reference/operators/typeof/index.html242
-rw-r--r--files/ru/web/javascript/reference/operators/void/index.html150
-rw-r--r--files/ru/web/javascript/reference/operators/yield/index.html94
-rw-r--r--files/ru/web/javascript/reference/operators/yield_star_/index.html227
-rw-r--r--files/ru/web/javascript/reference/operators/группировка/index.html91
-rw-r--r--files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html77
-rw-r--r--files/ru/web/javascript/reference/operators/логические_операторы/index.html299
-rw-r--r--files/ru/web/javascript/reference/operators/оператор_запятая/index.html103
-rw-r--r--files/ru/web/javascript/reference/operators/операторы_сравнения/index.html285
-rw-r--r--files/ru/web/javascript/reference/operators/присваивание/index.html66
-rw-r--r--files/ru/web/javascript/reference/operators/условный_оператор/index.html169
-rw-r--r--files/ru/web/javascript/reference/statements/async_function/index.html179
-rw-r--r--files/ru/web/javascript/reference/statements/break/index.html140
-rw-r--r--files/ru/web/javascript/reference/statements/class/index.html183
-rw-r--r--files/ru/web/javascript/reference/statements/const/index.html135
-rw-r--r--files/ru/web/javascript/reference/statements/continue/index.html200
-rw-r--r--files/ru/web/javascript/reference/statements/debugger/index.html124
-rw-r--r--files/ru/web/javascript/reference/statements/default/index.html116
-rw-r--r--files/ru/web/javascript/reference/statements/do...while/index.html94
-rw-r--r--files/ru/web/javascript/reference/statements/empty/index.html148
-rw-r--r--files/ru/web/javascript/reference/statements/export/index.html131
-rw-r--r--files/ru/web/javascript/reference/statements/for-await...of/index.html139
-rw-r--r--files/ru/web/javascript/reference/statements/for...in/index.html197
-rw-r--r--files/ru/web/javascript/reference/statements/for...of/index.html302
-rw-r--r--files/ru/web/javascript/reference/statements/for/index.html194
-rw-r--r--files/ru/web/javascript/reference/statements/for_each...in/index.html126
-rw-r--r--files/ru/web/javascript/reference/statements/function/index.html125
-rw-r--r--files/ru/web/javascript/reference/statements/function_star_/index.html202
-rw-r--r--files/ru/web/javascript/reference/statements/if...else/index.html213
-rw-r--r--files/ru/web/javascript/reference/statements/import.meta/index.html68
-rw-r--r--files/ru/web/javascript/reference/statements/import/index.html271
-rw-r--r--files/ru/web/javascript/reference/statements/index.html162
-rw-r--r--files/ru/web/javascript/reference/statements/label/index.html179
-rw-r--r--files/ru/web/javascript/reference/statements/let/index.html414
-rw-r--r--files/ru/web/javascript/reference/statements/return/index.html156
-rw-r--r--files/ru/web/javascript/reference/statements/switch/index.html184
-rw-r--r--files/ru/web/javascript/reference/statements/throw/index.html240
-rw-r--r--files/ru/web/javascript/reference/statements/try...catch/index.html422
-rw-r--r--files/ru/web/javascript/reference/statements/var/index.html221
-rw-r--r--files/ru/web/javascript/reference/statements/while/index.html143
-rw-r--r--files/ru/web/javascript/reference/statements/with/index.html177
-rw-r--r--files/ru/web/javascript/reference/statements/блок/index.html177
-rw-r--r--files/ru/web/javascript/reference/strict_mode/index.html367
-rw-r--r--files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html139
-rw-r--r--files/ru/web/javascript/reference/template_strings/index.html243
-rw-r--r--files/ru/web/javascript/reference/trailing_commas/index.html183
-rw-r--r--files/ru/web/javascript/reference/об/index.html50
-rw-r--r--files/ru/web/javascript/typed_arrays/index.html219
-rw-r--r--files/ru/web/javascript/о_javascript/index.html60
709 files changed, 106337 insertions, 0 deletions
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
new file mode 100644
index 0000000000..f2c82c85a0
--- /dev/null
+++ b/files/ru/web/javascript/a_re-introduction_to_javascript/index.html
@@ -0,0 +1,900 @@
+---
+title: Повторное введение в JavaScript (JS учебник)
+slug: Web/JavaScript/A_re-introduction_to_JavaScript
+translation_of: Web/JavaScript/A_re-introduction_to_JavaScript
+---
+<div>{{jsSidebar}}</div>
+
+<p>Почему повторное введение? Потому что {{Glossary("JavaScript")}} известен тем, что является <a href="http://javascript.crockford.com/javascript.html">самым неправильно понятым языком программирования в мире</a>. Его часто называют игрушкой, но под слоем обманчивой простоты ожидают мощные языковые возможности. В настоящее время JavaScript используется невероятным количеством высококлассных приложений, показывая, что углублённое знание этой технологии является важным навыком для любого веб или мобильного разработчика.</p>
+
+<p>Было бы полезно начать с истории языка. JavaScript был создан в 1995 Бренданом Айком, инженером в компании Netscape. Первый релиз состоялся вместе с выходом браузера Netscape 2 в начале 1996 года. Сначала язык назывался LiveScript, но затем был переименован в связи с маркетинговыми целями, чтобы сыграть на популярности языка Java компании Sun Microsystem — несмотря на это языки практически не имеют ничего общего друг с другом. Так было положено начало путаницы между этими языками.</p>
+
+<p>Чуть позже Microsoft выпустила очень похожий и практически совместимый язык JScript, который шёл вместе с IE3. Через пару месяцев Netscape отправил язык в <a href="http://www.ecma-international.org/">Ecma International</a>, Европейскую организацию занимающуюся стандартами, которая выпустила первую версию стандарта <a href="https://developer.mozilla.org/en/JavaScript/Language_Resources" title="en/ECMAScript">ECMAScript</a> в 1997. Стандарт получил значимое обновление в <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript edition 3</a> в 1999, и остается самым стабильным до сегодняшнего дня. Четвертая версия была отклонена, из-за проблем с усложнениями в языке. Многие вещи из четвертого издания послужили основой для стандарта ECMAScript 5 (декабрь 2009) и ECMAScript 6 (июнь 2015).</p>
+
+<div class="note">
+<p><strong>На заметку</strong>: Далее по тексту мы будем называть язык ECMAScript как "JavaScript".</p>
+</div>
+
+<p>В отличие от большинства языков, JavaScript не следует концепции ввода (input) и вывода (output). Он спроектирован таким образом, чтобы запускаться как язык сценариев, встроенный в среду исполнения. Самая популярная среда исполнения это браузер, однако интерпретаторы JavaScript присутствуют и в Adobe Acrobat, Photoshop, Yahoo!'s Widget engine, и даже в серверном окружении, например <a href="http://nodejs.org/" title="nodejs.org">node.js</a>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>JavaScript является объектно-ориентированным языком, имеющий типы и операторы, встроенные объекты и методы. Его синтаксис происходит от языков Java и C, поэтому много конструкций из этих языков применимы и к JavaScript. Одним из ключевых отличий JavaScript является отсутствие классов, вместо этого функциональность классов осуществляется прототипами объектов (смотрите ES6 {{jsxref("Classes")}}) . Другое главное отличие в том, что функции это объекты, в которых содержится исполняемый код и которые могут быть переданы куда-либо, как и любой другой объект.</p>
+
+<p>Начнём с основы любого языка: с типов данных. Программы на JavaScript оперируют значениями, и все эти значения принадлежат к определенному типу. Типы данных в JavaScript:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Number" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Number">Числа</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String">Строки</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Boolean">Логические типы</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Function">Функции</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Object">Объекты</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol">Символы</a> (новый тип из шестой редакции)</li>
+</ul>
+
+<p>Да, еще <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/undefined">Undefined</a> и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/null">Null</a>, которые немного обособлены. И <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Array">Массивы</a>, которые являются особым видом объектов. А также <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Date" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Date">Даты</a> и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp" title="en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp">Регулярные выражения</a>, тоже являющиеся объектами. И, если быть технически точным, функции это тоже особый вид объекта. Поэтому схема типов выглядит скорее так:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Number">Числа</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String">Строки</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Логические типы</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol">Символы</a> (новый тип из шестой редакции)</li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object">Объекты</a>
+ <ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Функции</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array">Массивы</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Date">Даты</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp">Регулярные выражения</a></li>
+ </ul>
+ </li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/null">Null</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/undefined">undefined</a></li>
+</ul>
+
+<p>Также есть несколько встроенных типов <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Error" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Error">Ошибок</a>. Чтобы было проще, рассмотрим подробнее первую схему.</p>
+
+<h2 id="Числа">Числа</h2>
+
+<p>Числа в JavaScript — это "64-битные значения двойной точности формата IEEE 754", согласно спецификации. Это имеет интересные последствия. В JavaScript нет такой вещи, как целое число, поэтому с арифметикой нужно быть начеку, если вы привыкли к вычислениям в языках C или Java. Взгляните на пример:</p>
+
+<pre class="brush: js notranslate">0.1 + 0.2 == 0.30000000000000004
+</pre>
+
+<p>На практике целые значения это 32-битные целые (и хранятся таким образом в некоторых браузерных реализациях), что может быть важно для побитовых операций.</p>
+
+<p>Поддерживаются стандартные <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators" title="en/Core_JavaScript_1.5_Reference/Operators/Arithmetic_Operators">арифметические операторы</a>, включая сложение, вычитание, остаток от деления и т.д. Есть ещё встроенный объект, который я забыл упомянуть, называемый <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Math">Math</a>, который содержит более продвинутые математические функции и константы:</p>
+
+<pre class="brush: js notranslate">Math.sin(3.5);
+var circumference = Math.PI * (r + r);
+</pre>
+
+<p>Вы можете преобразовать строку в целое число, используя встроенную функцию <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseInt" title="en/Core_JavaScript_1.5_Reference/Global_Functions/parseInt">parseInt()</a></code>. Её необязательный второй параметр — основание системы счисления, которое следует всегда явно указывать:</p>
+
+<pre class="brush: js notranslate">parseInt("123", 10); // 123
+parseInt("010", 10); // 10
+</pre>
+
+<p>Если вы не предоставите основание, то можете получить неожиданные результаты:</p>
+
+<pre class="brush: js notranslate">parseInt("010"); // 8
+parseInt("0x10"); // 16
+</pre>
+
+<p>Это случилось потому, что функция <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseInt">parseInt()</a></code> расценила строку как восьмеричную из-за начального 0, а шестнадцатеричную - из-за начального "0x".</p>
+
+<p>Если хотите преобразовать двоичное число в десятичное целое, просто смените основание:</p>
+
+<pre class="brush: js notranslate">parseInt("11", 2); // 3
+</pre>
+
+<p>Вы можете аналогично парсить дробные числа, используя встроенную функцию <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseFloat" title="en/JavaScript/Reference/Global Objects/parseFloat">parseFloat()</a></code>, которая использует всегда основание 10 в отличие от родственной <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/parseInt" title="en/JavaScript/Reference/Global Objects/parseInt"><code>parseInt()</code></a>.</p>
+
+<p>Также можно использовать унарный оператор <strong><code>+</code></strong> для преобразования значения в число:</p>
+
+<pre class="brush: js notranslate">+ "42"; // 42
++ "0x10"; // 16
+</pre>
+
+<p>Специальное значение <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a> (сокращение от "Not a Number") возвращается, если строка не является числом:</p>
+
+<pre class="brush: js notranslate">parseInt("hello", 10); // NaN
+</pre>
+
+<p><code>NaN</code> "заразителен": любая математическая операция над <code>NaN</code> возвращает <code>NaN</code>:</p>
+
+<pre class="brush: js notranslate">NaN + 5; // NaN
+</pre>
+
+<p>Проверить значение на <code>NaN</code> можно встроенной функцией <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/isNaN" title="en/Core_JavaScript_1.5_Reference/Global_Functions/isNaN">isNaN()</a></code>:</p>
+
+<pre class="brush: js notranslate">isNaN(NaN); // true
+</pre>
+
+<p>JavaScript также имеет специальные значения <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Infinity" title="en/Core_JavaScript_1.5_Reference/Global_Properties/Infinity">Infinity</a></code> (бесконечность) и<code> -Infinity</code>:</p>
+
+<pre class="brush: js notranslate">1 / 0; // Infinity
+-1 / 0; // -Infinity
+</pre>
+
+<p>Проверить значение на <code>Infinity</code>, <code>-Infinity</code> и <code>NaN</code> можно с помощью встроенной функции <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/isFinite" title="en/Core_JavaScript_1.5_Reference/Global_Functions/isFinite">isFinite()</a></code>:</p>
+
+<pre class="brush: js notranslate">isFinite(1/0); // false
+isFinite(-Infinity); // false
+isFinite(NaN); // false
+</pre>
+
+<div class="note"><strong>Примечание:</strong> функции <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/parseInt" title="en/JavaScript/Reference/Global Objects/parseInt"><code>parseInt()</code></a> и <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/parseFloat" title="en/JavaScript/Reference/Global Objects/parseFloat">parseFloat()</a></code> обрабатывают строку до тех пор, пока не будет встречен символ, не являющийся корректным для заданного числового формата, затем эти функции возвращают число, полученное в результате обработки вплоть до этого символа. А оператор "+" просто возвращает <code>NaN</code>, если в строке есть хоть один некорректный символ. Попробуйте сами в консоли преобразовать строку "10.2abc" каждым из методов, и различие станет ясным.</div>
+
+<h2 id="Строки">Строки</h2>
+
+<p>Строки в JavaScript - это последовательности <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types" title="en/Core_JavaScript_1.5_Guide/Unicode">символов Unicode</a> (в кодировке UTF-16). Для тех, кто имеет дело с интернационализацией, это должно стать хорошей новостью. Если быть более точным, то строка - это последовательность кодовых единиц, каждая из которых представлена 16-битовым числом, а каждый символ Unicode состоит из 1 или 2 кодовых единиц.</p>
+
+<p>Чтобы представить единственный символ, используйте строку, содержащую только этот символ.</p>
+
+<p>Чтобы выяснить длину строки (в кодовых единицах), используйте свойство <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/String/length" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String/length">length</a></code>:</p>
+
+<pre class="brush: js notranslate">"hello".length; // 5
+</pre>
+
+<p>Это уже первый шаг для работы с объектами! Мы уже говорили, что и строки можно использовать как объекты? У них тоже есть <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/String" title="en/Core_JavaScript_1.5_Reference/Global_Objects/String#Methods">методы</a>:</p>
+
+<pre class="brush: js notranslate">"hello".charAt(0); // h
+"hello, world".replace("hello", "goodbye"); // goodbye, world
+"hello".toUpperCase(); // HELLO
+</pre>
+
+<h2 id="Другие_типы">Другие типы</h2>
+
+<p>JavaScript дополнительно различает такие типы, как <code>null</code>, который указывает на преднамеренное отсутствующее значение, и <code>undefined</code>, указывающий на неинициализированное значение — то есть, значение, которое даже не было назначено. Мы поговорим о переменных позже, но в JavaScript можно объявить переменную без присвоения ей значения. В этом случае тип переменной будет <code>"undefined"</code>.</p>
+
+<p>Ещё в JavaScript есть логический (булевый) тип данных, который может принимать два возможных значения <span style="font-family: consolas,monaco,andale mono,monospace;">true</span> или <span style="font-family: consolas,monaco,andale mono,monospace;">false</span> (оба являются ключевыми словами). Любое значение может быть преобразовано в логическое значение в соответствии со следующими правилами:</p>
+
+<ol>
+ <li><code>false</code>, <code>0</code>, пустая строка (<code>""</code>), <code>NaN</code>, <code>null</code> и <code>undefined</code> преобразуются в <code>false.</code></li>
+ <li>Все остальные значения преобразуются в <code>true.</code></li>
+</ol>
+
+<p>Преобразование значений можно осуществить явно, используя функцию <code>Boolean()</code>:</p>
+
+<pre class="brush: js notranslate">Boolean(""); // false
+Boolean(234); // true
+</pre>
+
+<p>Этот метод используется редко, так как JavaScript может автоматически преобразовывать типы в тех случаях, когда ожидается булевое значение, например в операторе <code>if</code>. Из-за того, что любой тип данных может быть преобразован в булевое значение, иногда говорят, что данные "истинные" или "ложные".</p>
+
+<p>Для операций с логическими данными используются логические операторы: <code>&amp;&amp;</code> (логическое <em>И</em>), <code>||</code> (логическое <em>ИЛИ</em>), <code>!</code> (логическое <em>НЕ</em>).</p>
+
+<h2 id="Переменные">Переменные</h2>
+
+<p>Для объявления новых переменных в  JavaScript используются ключевые слова <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code>, <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code> или <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var" title="/en/JavaScript/Reference/Statements/var">var</a></code>.</p>
+
+<pre class="brush: js notranslate">let a;
+let name = "Simon";
+</pre>
+
+<p><strong><code>let</code>  </strong>позволяет объявлять переменные, которые доступны только в <em><strong>блоке</strong>,</em> в котором они объявлены:</p>
+
+<pre class="brush: js notranslate">// myLetVariable недоступна здесь
+
+for (let myLetVariable = 0; myLetVariable &lt; 5; myLetVariable++) {
+ // myLetVariable доступна только здесь
+}
+
+// myLetVariable недоступна здесь</pre>
+
+<p><code><strong>const</strong></code> позволяет создавать переменные, чьи значения не предполагают изменений. Переменная доступна из <em><strong>блока</strong></em>, в котором она объявлена.</p>
+
+<pre class="brush: js notranslate">const Pi = 3.14; // в переменную Pi записано значение.
+Pi = 1; // вызовет исключение, так как значение константы нельзя изменить.</pre>
+
+<p><code><strong>var</strong></code> наиболее общее средство объявления переменной. Оно не имеет ограничений, которые имеют два вышеописанных способа. Это потому, что это был изначально единственный способ объявления переменной в JavaScript. Переменная, объявленная с помощью <strong><code>var</code>, </strong>доступна в пределах <strong><em>функции</em></strong>, в которой она объявлена.</p>
+
+<pre class="brush: js notranslate">var a;
+var name = 'Simon';</pre>
+
+<p>Пример кода с переменной, объявленной с помощью <strong><code>var</code>:</strong></p>
+
+<pre class="brush: js notranslate">// myVarVariable доступна здесь
+
+for (var myVarVariable = 0; myVarVariable &lt; 5; myVarVariable++) {
+ // myVarVariable доступна для всей функции
+}
+
+// myVarVariable доступна и здесь</pre>
+
+<p>Если вы объявляете переменную без присвоения ей какого-либо значения, то её тип будет определён как <code>undefined</code>. </p>
+
+<p>Важной особенностью языка JavaScript является то, что блоки данных не имеют своей области видимости, она есть только у функций. Поэтому, если объявить переменную через <code>var</code> в блоке данных (например, внутри контролирующей структуры <code>if</code>), то она будет доступна всей функции. Следует отметить, что в новом стандарте ECMAScript Edition 6 появились инструкции <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code> и <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/const">const</a></code>, позволяющие объявлять переменные с областью видимости, ограниченной пределами блока.</p>
+
+<h2 id="Операторы">Операторы</h2>
+
+<p>JavaScript поддерживает такие операторы, как <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code> и <code>%</code>, который возвращает остаток от деления (<a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder_%28%29">не путать с модулем</a>). Значения присваиваются с помощью оператора <code>=</code>, или с помощью составных операторов <code>+=</code> и <code>-=</code>. Это сокращённая запись выражения <code><strong>x = x </strong><em>оператор</em><strong> y</strong></code>.</p>
+
+<pre class="brush: js notranslate">x += 5
+x = x + 5
+</pre>
+
+<p>Так же используются операторы инкремента (<code>++</code>) и декремента (<code>--</code>). Которые имеют префиксную и постфиксную форму записи.</p>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators" title="en/Core_JavaScript_1.5_Reference/Operators/String_Operators">Оператор <code>+</code></a> так же выполняет конкатенацию (объединение) строк:</p>
+
+<pre class="brush: js notranslate">"hello" + " world"; // "hello world"
+</pre>
+
+<p>При сложении строкового и числового значений происходит автоматическое преобразование в строку. Поначалу такое может запутать:</p>
+
+<pre class="brush: js notranslate">"3" + 4 + 5; // "345"
+3 + 4 + "5"; // "75"
+</pre>
+
+<p>Для приведения значения к строке просто прибавьте к нему пустую строку.</p>
+
+<p>Для <a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators" title="en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators">сравнения</a> в JavaScript используются следующие операторы: <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code> и <code>&gt;=</code>. Сравнивать можно не только числа, но и строки. Проверка на равенство немного сложнее. Для проверки используют двойной (<code>==</code>) или тройной (<code>===</code>) оператор присваивания. Двойной оператор <code>==</code> осуществляет автоматическое преобразование типов, что может приводить к интересным результатам:</p>
+
+<pre class="brush: js notranslate">123 == "123"; // true
+1 == true; // true</pre>
+
+<p>Если преобразование нежелательно, то используют оператор строгого равенства:</p>
+
+<pre class="brush: js notranslate">1 === true; // false
+123 === "123"; // false
+true === true; // true</pre>
+
+<p>Для проверки на неравенство используют операторы <code>!=</code> и <code>!==</code>.</p>
+
+<p>Отдельного внимания стоят <a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">побитовые операторы</a>, с которыми вы можете ознакомиться в соответствующем разделе.</p>
+
+<h2 id="Управляющие_структуры">Управляющие структуры</h2>
+
+<p>Управляющие структуры в JavaScript очень похожи на таковые в языках семейства C. Условные операторы выражены ключевыми словами <code>if</code> и <code>else</code>, которые можно составлять в цепочки:</p>
+
+<pre class="brush: js notranslate">var name = "kittens";
+if (name == "puppies") {
+ name += "!";
+} else if (name == "kittens") {
+ name += "!!";
+} else {
+ name = "!" + name;
+}
+name == "kittens!!"
+</pre>
+
+<p>В JavaScript есть три типа циклов: <code>while</code>, <code>do-while</code> и <code>for</code>. While используется для задания обычного цикла, а do-while  целесообразно применить в том случае, если вы хотите, чтобы цикл был выполнен хотя бы один раз:</p>
+
+<pre class="brush: js notranslate">while (true) {
+ // бесконечный цикл!
+}
+
+var input;
+do {
+ input = get_input();
+} while (inputIsNotValid(input))
+</pre>
+
+<p>Цикл <code>for</code> похож на такой же в языках C и Java: он позволяет задавать данные для контроля за выполнением цикла:</p>
+
+<pre class="brush: js notranslate">for (var i = 0; i &lt; 5; i++) {
+ // Выполнится 5 раз
+}
+</pre>
+
+<p>JavaScript также содержит две других известных конструкции: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for</code>...<code>of</code></a></p>
+
+<pre class="brush: js notranslate">for (let value of array) {
+ // операции с value
+}</pre>
+
+<p>и <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>for</code>...<code>in</code></a>:</p>
+
+<pre class="brush: js notranslate">for (let property in object) {
+ // операции над свойствами объекта
+}</pre>
+
+<p>Логические операторы <code>&amp;&amp;</code> и <code>||</code> используют "короткий цикл вычисления", это значит, что вычисление каждого последующего оператора зависит от предыдущего. Например, полезно проверить существует ли объект или нет, прежде чем пытаться получить доступ к его свойствам:</p>
+
+<pre class="brush: js notranslate">var name = o &amp;&amp; o.getName();
+</pre>
+
+<p>Таким способом удобно задавать значения по умолчанию:</p>
+
+<pre class="brush: js notranslate">var name = otherName || "default";
+</pre>
+
+<p>К условным операторам в JavaScript принадлежит также тернарный оператор "<code>?</code>" :</p>
+
+<pre class="brush: js notranslate">var allowed = (age &gt; 18) ? "yes" : "no";
+</pre>
+
+<p>Оператор <code>switch</code> используется при необходимости множественного сравнения:</p>
+
+<pre class="brush: js notranslate">switch(action) {
+ case 'draw':
+ drawit();
+ break;
+ case 'eat':
+ eatit();
+ break;
+ default:
+ donothing();
+}
+</pre>
+
+<p>Если в конце инструкции <code>case</code> не добавить останавливающую инструкцию <code>break</code>, то выполнение перейдёт к следующей инструкции <code>case</code>. Как правило, такое поведение нежелательно, но если вдруг вы решили его использовать, настоятельно рекомендуем писать соответствующий комментарий для облегчения поиска ошибок:</p>
+
+<pre class="brush: js notranslate">switch(a) {
+ case 1: // fallthrough
+ case 2:
+ eatit();
+ break;
+ default:
+ donothing();
+}
+</pre>
+
+<p>Вариант <code>default</code> опциональный. Допускается использование выражений как в условии <code>switch</code>, так и в <code>cases</code>. При проверке на равенство используется оператор строгого равенства <code>===</code>:</p>
+
+<pre class="brush: js notranslate">switch(1 + 3) {
+ case 2 + 2:
+ yay();
+ break;
+ default:
+ neverhappens();
+}
+</pre>
+
+<h2 id="Объекты">Объекты</h2>
+
+<p>Объекты в JavaScript представляют собой коллекции пар имя-значение (ключ-значение). Они похожи на:</p>
+
+<ul>
+ <li>Словари в Python.</li>
+ <li>Хеши в Perl и Ruby.</li>
+ <li>Таблицы хешей в C и C++.</li>
+ <li>HashMaps в Java.</li>
+ <li>Ассоциативные массивы в PHP.</li>
+</ul>
+
+<p>Именем свойства объекта в JavaScript выступает строка, а значением может быть любой тип данных JavaScript, даже другие объекты. Это позволяет создавать структуры данных любой сложности.</p>
+
+<p>Существует два основных способа создать объект:</p>
+
+<pre class="brush: js notranslate">var obj = new Object();
+</pre>
+
+<p>А также:</p>
+
+<pre class="brush: js notranslate">var obj = {};
+</pre>
+
+<p>Обе эти записи делают одно и то же. Вторая запись называется литералом объекта и более удобная. Такой способ является основой формата JSON, и при написании кода лучше использовать именно его.</p>
+
+<p>С помощью литерала объекта можно создавать не только пустые объекты, но и объекты с данными:</p>
+
+<pre class="brush: js notranslate">var obj = {
+ name: "Carrot",
+ "for": "Max",
+ details: {
+ color: "orange",
+ size: 12
+ }
+}
+</pre>
+
+<p>Доступ к свойствам объекта можно получить следующими способами:</p>
+
+<pre class="brush: js notranslate">obj.details.color; // orange
+obj['details']['size']; // 12</pre>
+
+<p>Эти два метода равнозначны. Первый метод используется, если мы точно знаем к какому методу нам нужно обратиться. Второй метод принимает в качестве имени свойства строку, и позволяет вычислять имя в процессе вычислений. Следует отметить, что последний метод мешает некоторым движкам и минимизаторам оптимизировать код. Если появится необходимость назначить в качестве имён свойств объекта <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords" title="en/Core_JavaScript_1.5_Reference/Reserved_Words">зарезервированные слова</a>, то данный метод тоже может пригодиться:</p>
+
+<pre class="brush: js notranslate">// Вызовет Syntax error, ведь 'for' это зарезервированное слово
+obj.for = "Simon";
+
+// А тут всё нормально
+obj["for"] = "Simon";
+
+</pre>
+
+<div class="note">
+<p><strong>На заметку:</strong> Стандарт EcmaScript 5 позволяет использовать зарезервированные слова в качестве имён свойств объекта без "оборачивания" их в кавычки. Подробнее в <a href="http://es5.github.io/#x7.6.1">спецификации ES5</a>.</p>
+</div>
+
+<p>Больше информации об объектах и прототипах: <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype">Object.prototype</a>.</p>
+
+<p>Для получения информации по прототипам объектов и цепям прототипов объектов смотрите <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">Inheritance and the prototype chain</a>.</p>
+
+<div class="blockIndicator note">
+<p>Начиная с ECMAScript 2015, ключи объектов могут быть определены переменными с  использованием квадратных скобок при создании: <code>{[phoneType]: 12345}</code> допустимо вместо  <code>var userPhone = {}; userPhone[phoneType] = 12345</code>.</p>
+</div>
+
+<h2 id="Массивы">Массивы</h2>
+
+<p>Массивы в JavaScript всего лишь частный случай объектов. Работают они практически одинаково (если именем свойства является число, то доступ к нему можно получить только через вызов в скобках []), только у массивов есть одно удивительное свойство '<code>length</code>' (длина). Оно возвращает число, равное самому большому индексу массива + 1.</p>
+
+<p>Создать массив можно по старинке:</p>
+
+<pre class="brush: js notranslate">var a = new Array();
+a[0] = "dog";
+a[1] = "cat";
+a[2] = "hen";
+a.length; // 3
+</pre>
+
+<p>Но гораздо удобнее использовать литерал массива:</p>
+
+<pre class="brush: js notranslate">var a = ["dog", "cat", "hen"];
+a.length; // 3
+</pre>
+
+<p>Запомните, свойство <code>array.length</code> не обязательно будет показывать количество элементов в массиве. Посмотрите пример:</p>
+
+<pre class="brush: js notranslate">var a = ["dog", "cat", "hen"];
+a[100] = "fox";
+a.length; // 101
+</pre>
+
+<p>Запомните — длина массива это его самый большой индекс плюс один.</p>
+
+<p>Если попытаться получить доступ к несуществующему элементу массива, то получите <code>undefined</code>:</p>
+
+<pre class="brush: js notranslate">typeof a[90]; // undefined
+</pre>
+
+<p>Для перебора элементов массива используйте такой способ:</p>
+
+<pre class="brush: js notranslate">for (var i = 0; i &lt; a.length; i++) {
+ // Сделать что-нибудь с элементом a[i]
+}
+</pre>
+
+<p>ES2015 представляет более краткий <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for</code>...<code>of</code></a> способ обхода по итерируемым объектам, в т.ч. массивам:</p>
+
+<pre class="notranslate"><code>for (const currentValue of a) {
+ // С</code>делать что-нибудь с<code> currentValue
+}</code>
+</pre>
+
+<p>Перебрать элементы массива также можно с помощью цикла <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in" title="en/Core_JavaScript_1.5_Reference/Statements/for...in">for...in</a></code>. Но, если вдруг будет изменено какое-либо свойство <code>Array.prototype</code>, то оно тоже будет участвовать в выборке. Не используйте данный метод.</p>
+
+<p>И самый новый способ перебора свойств массива был добавлен в ECMAScript 5 — это метод <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach">forEach()</a>:</p>
+
+<pre class="brush: js notranslate">["dog", "cat", "hen"].forEach(function(currentValue, index, array) {
+// Сделать что-нибудь с currentValue или array[index]
+});</pre>
+
+<p>Для добавления данных в массив используйте метод <code>push()</code>:</p>
+
+<pre class="brush: js notranslate">a.push(item);</pre>
+
+<p>У массивов есть ещё множество полезных методов. С их полным списком вы можете ознакомиться <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array">по ссылке</a>.</p>
+
+<table style="height: 124px; width: 598px;">
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>a.toString()</code></td>
+ <td>Возвращает строковое представление массива, где все элементы разделены запятыми.</td>
+ </tr>
+ <tr>
+ <td><code>a.toLocaleString()</code></td>
+ <td>Возвращает строковое представление массива в соответствии с выбранной локалью.</td>
+ </tr>
+ <tr>
+ <td><code>a.concat(item1[, item2[, ...[, itemN]]])​</code></td>
+ <td>Возвращает новый массив с добавлением указанных элементов.</td>
+ </tr>
+ <tr>
+ <td><code>a.join(sep)</code></td>
+ <td>Преобразует массив в строку, где в качестве разделителя используется параметр <code>sep</code></td>
+ </tr>
+ <tr>
+ <td><code>a.pop()</code></td>
+ <td>Удаляет последний элемент массива и возвращает его.</td>
+ </tr>
+ <tr>
+ <td><code>a.push(item1, ..., itemN)</code></td>
+ <td>Добавляет один или более элементов в конец массива.</td>
+ </tr>
+ <tr>
+ <td><code>a.reverse()</code></td>
+ <td>Меняет порядок элементов массива на обратный.</td>
+ </tr>
+ <tr>
+ <td><code>a.shift()</code></td>
+ <td>Удаляет первый элемент массива и возвращает его.</td>
+ </tr>
+ <tr>
+ <td><code>a.slice(start[, end])</code></td>
+ <td>Возвращает новый массив.</td>
+ </tr>
+ <tr>
+ <td><code>a.sort([cmpfn])</code></td>
+ <td>Сортирует данные в массиве.</td>
+ </tr>
+ <tr>
+ <td><code>a.splice(start, delcount[, item1[, ...[, itemN]]])</code></td>
+ <td>Позволяет вырезать из массива его часть и добавлять на это место новые элементы.</td>
+ </tr>
+ <tr>
+ <td><code>a.unshift(item1[, item2[, ...[, itemN]]])</code></td>
+ <td>Добавляет элементы в начало массива.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Функции">Функции</h2>
+
+<p>Наряду с объектами функции также являются ключевыми компонентами языка JavaScript. Базовые функции очень просты:</p>
+
+<pre class="brush: js notranslate">function add(x, y) {
+ var total = x + y;
+ return total;
+}
+</pre>
+
+<p>В этом примере показано практически всё, что нужно знать о функциях. Функции в JavaScript могут принимать ноль или более параметров. Тело функции может содержать любые выражения и определять свои собственные переменные, которые будут для этой функции локальными. Инструкция <code>return</code> используется для возврата значения и остановки выполнения функции. Если инструкции return в функции нет (или есть, но не указано возвращаемое значение), то JavaScript возвратит <code>undefined</code>.</p>
+
+<p>Можно вызвать функцию, вообще не передавая ей параметры. В таком случае будет считаться, что их значения равны <code>undefined</code>:</p>
+
+<pre class="brush: js notranslate">add(); // NaN
+// Нельзя проводить сложение undefined и undefined</pre>
+
+<p>Можно передать больше аргументов, чем ожидает функция:</p>
+
+<pre class="brush: js notranslate">add(2, 3, 4); // 5
+// используются только первые два аргумента, "4" игнорируется</pre>
+
+<p>Это может показаться бессмысленным, но на самом деле функции могут получить доступ к "лишним" аргументам с помощью псевдомассива <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments" title="En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments"><code>arguments</code></a>, в нём содержатся значения всех аргументов, переданных функции. Давайте напишем функцию, которая принимает неограниченное количество аргументов:</p>
+
+<pre class="brush: js notranslate">function add() {
+ var sum = 0;
+ for (var i = 0, j = arguments.length; i &lt; j; i++) {
+ sum += arguments[i];
+ }
+ return sum;
+}
+
+add(2, 3, 4, 5); // 14
+</pre>
+
+<p>Или создадим функцию для вычисления среднего значения:</p>
+
+<pre class="brush: js notranslate">function avg() {
+ var sum = 0;
+ for (var i = 0, j = arguments.length; i &lt; j; i++) {
+ sum += arguments[i];
+ }
+ return sum / arguments.length;
+}
+avg(2, 3, 4, 5); // 3.5
+</pre>
+
+<p>Это довольно  полезно, но при этом кажется излишне подробным. Для уменьшения количества кода взглянем на замену использования массива аргументов способом  <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">Rest parameter syntax</a>. В этом случае мы можем передавать в функцию любое количество аргументов, сохраняя код минималистичным. <strong>Rest parameter operator</strong> используется в списке параметров функции в формате: <strong>...variable</strong> и включает в себя целый список аргументов, с которыми функция будет вызвана. Мы будем также использовать замену цикла <strong>for</strong>  циклом <strong>for...of</strong> для получения значений, которые будет содержать наша переменная.</p>
+
+<pre class="brush: js notranslate">function avg(...args) {
+ var sum = 0;
+ for (let value of args) {
+ sum += value;
+ }
+ return sum / args.length;
+}
+
+avg(2, 3, 4, 5); // 3.5</pre>
+
+<div class="blockIndicator note">
+<p>В вышенаписанном коде переменная <strong>args</strong> содержит все значения, которые были переданы в функцию.<br>
+ <br>
+ Важно отметить, что где бы ни был  размещен <em>rest parameter operator</em> в объявлении функции, он будет содержать все аргументы  <em>после</em> его объявления, не раньше. например: <em>function</em> <em>avg(</em><strong>firstValue, </strong><em>...args)</em><strong> </strong>будет хранить первое переданное значение в переменной <strong>firstValue </strong>и оставшиеся в <strong>args</strong>. Это еще одно полезное свойство языка, однако оно ведет нас к новой проблеме.  <code>avg()</code> функция принимает список аргументов, разделенный запятыми. Но что если вы хотите найти среднее значение в массиве? Вы можете переписать функцию следующим образом:</p>
+</div>
+
+<pre class="brush: js notranslate">function avgArray(arr) {
+ var sum = 0;
+ for (var i = 0, j = arr.length; i &lt; j; i++) {
+ sum += arr[i];
+ }
+ return sum / arr.length;
+}
+
+avgArray([2, 3, 4, 5]); // 3.5</pre>
+
+<p>На тот случай, если вы хотите использовать первый вариант функции, а не переписывать её заново, то в JavaScript есть возможность вызывать функцию с произвольным массивом аргументов. Для этого используется метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Function/apply">apply()</a>:</code></p>
+
+<pre class="brush: js notranslate">avg.apply(null, [2, 3, 4, 5]); // 3.5
+</pre>
+
+<p>Вторым аргументом метода <code>apply()</code> передаётся массив, который будет передан функции в качестве аргументов. О первом аргументе мы поговорим позже. Наличие у функций методов также говорит о том, что на самом деле они являются объектами.</p>
+
+<div class="blockIndicator note">
+<p>Этот же результат можно получить, используя <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread operator</a> в вызове функции.</p>
+
+<p>For instance: <code>avg(...numbers)</code></p>
+</div>
+
+<p>В JavaScript можно создавать анонимные функции:</p>
+
+<pre class="brush: js notranslate">var avg = function() {
+ var sum = 0;
+ for (var i = 0, j = arguments.length; i &lt; j; i++) {
+ sum += arguments[i];
+ }
+ return sum / arguments.length;
+}
+</pre>
+
+<p>Данная запись семантически равнозначна записи <code>function</code> <code>avg()</code>. Это даёт возможность использовать разные интересные трюки. Вот посмотрите, как можно "спрятать" локальные переменные в функции:</p>
+
+<pre class="brush: js notranslate">var a = 1;
+var b = 2;
+(function() {
+ var b = 3;
+ a += b;
+})();
+a; // 4
+b; // 2
+</pre>
+
+<p>В JavaScript есть возможность рекурсивного вызова функции. Это может оказаться полезным при работе с иерархическими (древовидными) структурами данных (например такие, которые встречаются при работе с <a href="/ru/DOM" title="en/DOM">DOM</a>).</p>
+
+<pre class="brush: js notranslate">function countChars(elm) {
+ if (elm.nodeType == 3) { // TEXT_NODE
+ return elm.nodeValue.length;
+ }
+ var count = 0;
+ for (var i = 0, child; child = elm.childNodes[i]; i++) {
+ count += countChars(child);
+ }
+ return count;
+}
+</pre>
+
+<p>Тут мы сталкиваемся с проблемой: как вызвать функцию рекурсивно, если у неё нет имени? Для этого в JavaScript есть именованные функциональные выражения <a href="https://developer.mozilla.org/en-US/docs/Glossary/IIFE">IIFEs (Immediately Invoked Function Expressions)</a>. Вот пример использования именованной самовызывающейся функции:</p>
+
+<pre class="brush: js notranslate">var charsInBody = (function counter(elm) {
+ if (elm.nodeType == 3) { // TEXT_NODE
+ return elm.nodeValue.length;
+ }
+ var count = 0;
+ for (var i = 0, child; child = elm.childNodes[i]; i++) {
+ count += counter(child);
+ }
+ return count;
+})(document.body);
+</pre>
+
+<p>Имя функции в примере доступно только внутри самой функции. Это улучшает оптимизацию и читаемость кода.</p>
+
+<h2 id="Собственные_объекты">Собственные объекты</h2>
+
+<div class="note"><strong>На заметку:</strong> Для более подробной информации по объектно-ориентированному программированию в JavaScript смотрит <a href="/ru/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript" title="https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript">Введение в объектно-ориентированный JavaScript</a>.</div>
+
+<p>В классическом Объектно-Ориентированном Программировании (ООП) объекты — это коллекции данных и методов, которые этими данными оперируют. JavaScript - это язык, основанный на прототипах, и в его определении нет понятия классов, таких, как в языках C++ или Java. (Иногда это может запутать программистов, знакомых с языками, в которых есть классы.) Вместо классов JavaScript использует функции. Давайте представим объект с личными данными, содержащий поля с именем и фамилией. Есть два типа отображения имён: "Имя Фамилия" или "Фамилия, Имя". С помощью объектов и функций можно сделать следующее:</p>
+
+<div class="blockIndicator warning">
+<pre class="brush: js notranslate">function makePerson(first, last) {
+ return {
+ first: first,
+ last: last
+ }
+}
+
+function personFullName(person) {
+ return person.first + ' ' + person.last;
+}
+
+function personFullNameReversed(person) {
+ return person.last + ', ' + person.first
+}
+
+s = makePerson("Simon", "Willison");
+personFullName(s); // Simon Willison
+personFullNameReversed(s); // Willison, Simon
+</pre>
+</div>
+
+<p>Работает, но сам код никуда не годится. С таким подходом у вас будут десятки функций, засоряющих глобальный объект. Это можно исправить, прикрепив функцию к объекту. Это просто, ведь все функции и есть объекты:</p>
+
+<pre class="brush: js notranslate">function makePerson(first, last) {
+ return {
+ first: first,
+ last: last,
+ fullName: function() {
+ return this.first + ' ' + this.last;
+ },
+ fullNameReversed: function() {
+ return this.last + ', ' + this.first;
+ }
+ }
+}
+s = makePerson("Simon", "Willison")
+s.fullName(); // Simon Willison
+s.fullNameReversed(); // Willison, Simon
+</pre>
+
+<p>А вот кое-что новенькое: ключевое слово '<code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this" title="en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/this_Operator">this</a></code>'. Когда '<code>this</code>' используется внутри функции, оно ссылается на текущий объект. Значение ключевого слова зависит от способа вызова функции. Если вызвать функцию с обращением к объекту через <a href="/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors" title="en/Core_JavaScript_1.5_Reference/Operators/Member_Operators">точку или квадратные скобки</a>, то '<code>this</code>' получится равным данному объекту. В ином случае '<code>this</code>' будет ссылаться на глобальный объект. Это часто приводит к ошибкам. Например:</p>
+
+<pre class="brush: js notranslate">s = makePerson("Simon", "Willison")
+var fullName = s.fullName;
+fullName(); // undefined undefined
+</pre>
+
+<p>При вызове <code>fullName()</code>, '<code>this</code>' получает ссылку на глобальный объект. А так как в глобальном объекте не определены переменные <code>first</code> и <code>last</code>, то имеем два <code>undefined</code>.</p>
+
+<p>Используя особенность ключевого слова '<code>this</code>', можно улучшить код функции <code>makePerson</code>:</p>
+
+<pre class="brush: js notranslate">function Person(first, last) {
+ this.first = first;
+ this.last = last;
+ this.fullName = function() {
+ return this.first + ' ' + this.last;
+ };
+ this.fullNameReversed = function() {
+ return this.last + ', ' + this.first;
+ };
+}
+var s = new Person("Simon", "Willison");
+</pre>
+
+<p>В примере мы использовали новое ключевое слово: '<code><a href="/ru/docs/Web/JavaScript/Reference/Operators/new" title="en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/new_Operator">new</a></code>'. Оно тесно связано с '<a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a>'. Данное ключевое слово создаёт новый пустой объект, а потом вызывает указанную функцию, а <code>this</code> получает ссылку на этот новый объект. Функции, которые предназначены для вызова с '<code>new</code>' называются конструкторами. Существует соглашение, согласно которому все функции-конструкторы записываются с заглавной буквы.</p>
+
+<p>Мы доработали наш код в предыдущем примере, но всё равно остался один неприятный момент с самостоятельным вызовом  <code>fullName()</code>.</p>
+
+<p>Каждый раз, когда с помощью конструктора создаётся новый объект, мы заново создаём и две новые функции. Гораздо удобнее создать эти функции отдельно и дать доступ к ним конструктору:</p>
+
+<pre class="brush: js notranslate">function personFullName() {
+ return this.first + ' ' + this.last;
+}
+function personFullNameReversed() {
+ return this.last + ', ' + this.first;
+}
+function Person(first, last) {
+ this.first = first;
+ this.last = last;
+ this.fullName = personFullName;
+ this.fullNameReversed = personFullNameReversed;
+}
+</pre>
+
+<p>Уже лучше: мы создали функции-методы только один раз, а при новом вызове функции-конструктора просто ссылаемся на них. Можно сделать ещё лучше? Конечно:</p>
+
+<pre class="brush: js notranslate">function Person(first, last) {
+ this.first = first;
+ this.last = last;
+}
+<code>Person.prototype.fullName = function fullName() {</code>
+ return this.first + ' ' + this.last;
+}
+<code>Person.prototype.fullNameReversed = function fullNameReversed() {</code>
+ return this.last + ', ' + this.first;
+}
+</pre>
+
+<p><code>Person.prototype</code> это объект, доступ к которому есть у всех экземпляров класса <code>Person</code>. Он создаёт особую цепочку прототипов. Каждый раз, когда вы пытаетесь получить доступ к несуществующему свойству объекта <code>Person</code>, JavaScript проверяет, существует ли свойство в <code>Person.prototype</code>. В результате все, что передано в <code>Person.prototype</code>, становится доступным и всем экземплярам этого конструктора через <code>this</code> объект.</p>
+
+<p>Это очень мощный инструмент. JavaScript позволяет изменять прототипы в любое время, это значит, что можно добавлять новые методы к существующим объектам во время выполнения программы:</p>
+
+<pre class="brush: js notranslate">s = new Person("Simon", "Willison");
+s.firstNameCaps();
+// TypeError on line 1: s.firstNameCaps is not a function
+
+Person.prototype.firstNameCaps = function() {
+ return this.first.toUpperCase()
+}
+s.firstNameCaps(); // "SIMON"
+</pre>
+
+<p>Занимательно то, что добавлять свойства в прототип можно и для встроенных объектов JavaScript. Давайте добавим новый метод <code>reversed </code>классу <code>String</code>, этот метод будет возвращать строку задом наперёд:</p>
+
+<pre class="brush: js notranslate">var s = "Simon";
+s.reversed()<code>; // TypeError on line 1: s.reversed is not a function</code>
+
+String.prototype.reversed = function <code>reversed</code>() {
+ var r = "";
+ for (var i = this.length - 1; i &gt;= 0; i--) {
+ r += this[i];
+ }
+ return r;
+}
+s.reversed(); // "nomiS"
+</pre>
+
+<p>Данный метод будет работать даже на литералах строки!</p>
+
+<pre class="brush: js notranslate">"This can now be reversed".reversed();
+// desrever eb won nac sihT
+</pre>
+
+<p>Как уже упоминалось, prototype формирует часть цепочки. Конечным объектом этой цепочки прототипов является <code>Object.prototype</code>, методы которого включают и <code>toString()</code> — тот метод, который вызывается тогда, когда надо получить строковое отображение объекта. Вот что можно сделать с нашими объектами <code>Person</code>:</p>
+
+<pre class="brush: js notranslate">var s = new Person("Simon", "Willison");
+s.toString(); // [object Object]
+
+Person.prototype.toString = function() {
+ return '&lt;Person: ' + this.fullName() + '&gt;';
+}
+
+s.toString(); // "&lt;Person: Simon Willison&gt;"</pre>
+
+<p>Помните, мы вызывали <code>avg.apply()</code> с первым аргументом равным null? Теперь мы можем сделать так: первым аргументом, переданным методу <code>apply()</code> будет объект, который примет значение '<code>this</code>'. Вот к примеру упрощённая реализация '<code>new</code>':</p>
+
+<pre class="brush: js notranslate">function trivialNew(constructor, ...args) {
+ var o = {}; // Создаём новый объект
+ constructor.apply(o, args);
+ return o;
+}
+</pre>
+
+<p>Это не точная копия <code>new</code>, так как она не устанавливает цепочку прототипов (это сложно ). Метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">apply()</a></code> применяется не очень часто, но знать его важно. В примере выше, запись <code>...args</code> (включая многоточие) называется "<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">rest arguments</a>"— она включает в себя все оставшиеся аргументы.</p>
+
+<p>Вызов</p>
+
+<pre class="brush: js notranslate">var bill = trivialNew(Person, 'William', 'Orange');</pre>
+
+<p>практически полностью эквивалентен этому:</p>
+
+<pre class="brush: js notranslate">var bill = new Person('William', 'Orange');</pre>
+
+<p>В JavaScript метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">apply()</a></code> имеет похожий метод <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/call" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Function/call"><code>call()</code></a>, который тоже позволяет устанавливать '<code>this</code>', но принимает список, а не массив аргументов.</p>
+
+<pre class="brush: js notranslate">function lastNameCaps() {
+ return this.last.toUpperCase();
+}
+var s = new Person("Simon", "Willison");
+lastNameCaps.call(s);
+// Аналогично записи:
+s.lastNameCaps = lastNameCaps;
+s.lastNameCaps(); <code>// WILLISON</code></pre>
+
+<h2 id="Вложенные_функции">Вложенные функции</h2>
+
+<p>Объявлять новые функции можно и внутри других функций. Мы использовали этот приём чуть выше, создавая функцию <code>makePerson()</code>. Главная особенность вложенных функций в том, что они получают доступ к переменным, объявленным в их функции-родителе:</p>
+
+<pre class="brush: js notranslate">function parentFunc() {
+ var a = 1;
+
+ function nestedFunc() {
+ var b = 4; // parentFunc can't use this
+ return a + b;
+ }
+ return nestedFunc(); // 5
+}</pre>
+
+<p>Это очень полезное свойство, которое делает сопровождение кода более удобным. Если ваша функция в своей работе использует другие функции, которые больше нигде не используются, то можно просто вложить вспомогательные функции в основную. Это сократит количество функций в глобальном объекте, что довольно неплохо.</p>
+
+<p>Ещё это отличный способ сократить количество глобальных переменных. Так при написании кода у нас часто будет возникать искушение понасоздавать глобальных переменных, которые будут доступны разным функциям. Всё это усложняет код, делает его менее читаемым. Вложенные функции имеют доступ к переменным своей функции-родителя, и мы можем использовать это для группировки множества функций вместе (естественно в разумных пределах), что позволит держать наш глобальный объект в чистоте и порядке.</p>
+
+<h2 id="Замыкания_Closures"><a href="/ru/docs/Web/JavaScript/Closures">Замыкания</a> (Closures)</h2>
+
+<p>Мы подошли к одному из самых мощных и непонятных инструментов JavaScript. Давайте разберёмся.</p>
+
+<pre class="brush: js notranslate">function makeAdder(a) {
+ return function(b) {
+ return a + b;
+ };
+}
+
+var x = makeAdder(5);
+var y = makeAdder(20);
+x(6); // ?
+y(7); // ?
+</pre>
+
+<p>Функция <code>makeAdder</code> создаёт новую функцию, которая прибавляет полученное значение к значению, которые было получено при создании функции.</p>
+
+<p>Такой же фокус мы наблюдали в предыдущем примере, когда внутренние функции получали доступ к переменным той функции, в которой были объявлены. Только в нашем примере основная функция возвращает вложенную. Поначалу может показаться, что локальные переменные при этом перестанут существовать. Но они продолжают существовать — иначе код попросту не сработал бы. Вдобавок ко всему у нас есть две разные "копии" функции <code>makeAdder</code>, присвоенные разным переменным (одна копия, в которой <code>а</code> - это 5, а во второй <code>а</code> - это 20). Вот что имеем в результате вызова:</p>
+
+<pre class="brush: js notranslate">x(6); // возвратит 11
+y(7); // возвратит 27
+</pre>
+
+<p>И вот что произошло: когда JavaScript выполняет функцию, создаётся объект 'scope', который содержит в себе все локальные переменные, объявленные внутри этой функции. Он инициализируется любым значением, переданным функции в качестве параметра. 'Scope' подобен глобальному объекту, который содержит все глобальные переменные и функции, кроме нескольких важных отличий: при каждом вызове функции создаётся новый объект 'scope' и, в отличие от глобального, к объекту 'scope' нельзя получить прямой доступ из вашего кода. И нет способа пройтись по свойствам данного объекта.</p>
+
+<p>Так что при вызове функции <code>makeAdder</code> создаётся новый объект 'scope' с единственным свойством: <code>a</code>, которому присваивается значение, переданное функции в качестве аргумента.  Потом <code>makeAdder</code> возвращает новую анонимную функцию. В любом другом случае 'сборщик мусора' удалил бы объект scope, но возвращаемая функция ссылается на этот объект. В итоге объект scope не удаляется до тех пор, пока существует хотя бы одна ссылка на него.</p>
+
+<p>Все объекты scope соединяются в цепочку областей видимости, которая похожа на цепочку прототипов в объектной системе JavaScript'а.</p>
+
+<p><strong>Замыкание</strong> это связка из функции и объекта scope, созданного при её вызове. <a href="http://stackoverflow.com/questions/111102/how-do-javascript-closures-work">Подробнее о замыканиях здесь</a>.</p>
diff --git a/files/ru/web/javascript/closures/index.html b/files/ru/web/javascript/closures/index.html
new file mode 100644
index 0000000000..0febcbb623
--- /dev/null
+++ b/files/ru/web/javascript/closures/index.html
@@ -0,0 +1,345 @@
+---
+title: Замыкания
+slug: Web/JavaScript/Closures
+tags:
+ - ES5
+ - Замыкание
+translation_of: Web/JavaScript/Closures
+---
+<p>{{jsSidebar("Intermediate")}}</p>
+
+<p class="summary">Замыкание — это комбинация функции и лексического окружения, в котором эта функция была определена. Другими словами, замыкание дает вам доступ к <a href="/ru/docs/Glossary/Scope">Scope</a> внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз при создании функции, во время ее создания.</p>
+
+<h2 id="Лексическая_область_видимости" style="margin-bottom: 20px; line-height: 30px; font-size: 2.14285714285714rem;">Лексическая область видимости</h2>
+
+<p>Рассмотрим следующий пример:</p>
+
+<div>
+<pre class="brush: js notranslate">function init() {
+    var name = "Mozilla"; // name - локальная переменная, созданная в init
+    function displayName() { // displayName() - внутренняя функция, замыкание
+        alert (name); // displayName() использует переменную, объявленную в родительской функции
+    }
+    displayName();
+}
+init();</pre>
+</div>
+
+<p><code style="font-size: 14px;">init()</code><span style="line-height: 1.572;"> создаёт локальную переменную </span><code style="font-size: 14px;">name</code><span style="line-height: 1.572;"> и определяет функцию </span><code style="font-size: 14px;">displayName()</code><span style="line-height: 1.572;">. </span><code style="font-size: 14px;">displayName()</code><span style="line-height: 1.572;"> — это внутренняя функция </span><span style="line-height: 1.572;">— она определена внутри </span><code style="font-size: 14px;">init()</code><span style="line-height: 1.572;"> и доступна только внутри тела функции </span><code style="font-size: 14px;">init()</code><span style="line-height: 1.572;">. Обратите внимание, что функция</span> <code style="font-size: 14px;">displayName()</code><span style="line-height: 1.572;"> не имеет никаких собственных локальных переменных. Однако, поскольку внутренние функции имеют доступ к переменным внешних функций, </span><code style="font-size: 14px;">displayName()</code><span style="line-height: 1.572;"> может иметь доступ к переменной </span><code style="font-size: 14px;">name</code><span style="line-height: 1.572;">, объявленной в родительской функции </span><code style="font-size: 14px;">init()</code><span style="line-height: 1.572;">.</span></p>
+
+<p>{{JSFiddleEmbed("https://jsfiddle.net/78dg25ax/", "js,result", 250)}}</p>
+
+<p><a href="http://jsfiddle.net/xAFs9/3/" title="http://jsfiddle.net/xAFs9/">Выполните</a> этот код и обратите внимание, что команда <code>alert()</code>  внутри <code>displayName()</code> благополучно выводит на экран содержимое переменной <code>name</code> объявленной в родительской функции. Это пример так называемой лексической области видимости <em>(lexical</em> <em>scoping)</em>: в JavaScript область действия переменной определяется по её расположению в коде (это очевидно <em>лексически</em>), и вложенные функции имеют доступ к переменным, объявленным вовне. Этот механизм и называется Lexical scoping (область действия, ограниченная лексически).</p>
+
+<h2 id="Замыкание">Замыкание</h2>
+
+<p>Рассмотрим следующий пример:</p>
+
+<pre class="brush: js notranslate">function makeFunc() {
+ var name = "Mozilla";
+ function displayName() {
+ alert(name);
+ }
+ return displayName;
+};
+
+var myFunc = makeFunc();
+myFunc();
+</pre>
+
+<p>Если выполнить этот код, то результат будет такой же, как и выполнение <code>init()</code> из предыдущего примера: строка "Mozilla" будет показана в JavaScript alert диалоге. Что отличает этот код и представляет для нас интерес, так это то, что внутренняя функция <code>displayName()</code> была возвращена из внешней до того, как была выполнена.</p>
+
+<p>На первый взгляд, кажется неочевидным, что этот код правильный, но он работает. В некоторых языках программирования локальные переменные-функции существуют только во время выполнения этой функции. После завершения выполнения <code>makeFunc()</code> можно ожидать, что переменная <em>name</em> больше не будет доступна. Однако, поскольку код продолжает нормально работать, очевидно, что это не так в случае JavaScript.</p>
+
+<p>Причина в том, что функции в JavaScript формируют так называемые <em>замыкания</em>. <em>Замыкание </em>— это комбинация функции и лексического окружения, в котором эта функция была объявлена. Это окружение состоит из произвольного количества локальных переменных, которые были в области действия функции во время создания замыкания. В рассмотренном примере <code>myFunc</code> — это ссылка на экземпляр функции <code>displayName</code>, созданной в результате выполнения <code>makeFunc</code>. Экземпляр функции <code>displayName</code> в свою очередь сохраняет ссылку на своё лексическое окружение, в котором есть переменная <code>name</code>.  По этой причине, когда происходит вызов функции <code>myFunc</code>, переменная <code>name</code> остаётся доступной для использования и сохраненный в ней текст "Mozilla" передаётся в <code>alert</code>.</p>
+
+<p>А вот немного более интересный пример — функция <code>makeAdder</code>:</p>
+
+<pre class="brush: js notranslate">function makeAdder(x) {
+ return function(y) {
+ return x + y;
+ };
+};
+
+var add5 = makeAdder(5);
+var add10 = makeAdder(10);
+
+console.log(add5(2)); // 7
+console.log(add10(2)); // 12
+</pre>
+
+<p>Здесь мы определили функцию <code>makeAdder(x)</code>, которая получает единственный аргумент <code>x</code> и возвращает новую функцию. Эта функция получает единственный аргумент <code>y</code> и возвращает сумму <code>x</code> и <code>y</code>.</p>
+
+<p>По существу <code>makeAdder</code> — это фабрика функций: она создает функции, которые могут прибавлять определённое значение к своему аргументу. В примере выше мы используем нашу фабричную функцию для создания двух новых функций — одна прибавляет 5 к своему аргументу, вторая прибавляет 10.</p>
+
+<p><code>add5</code> и <code>add10</code> — это примеры замыканий. Эти функции делят одно определение тела функции, но при этом они сохраняют различные окружения. В окружении функции <code>add5</code> <code>x</code> — это 5, в то время как в окружении <code>add10</code> <code>x</code> — это 10.</p>
+
+<h2 id="Замыкания_на_практике">Замыкания на практике</h2>
+
+<p>Замыкания полезны тем, что позволяют связать данные (лексическое окружение) с функцией, которая работает с этими данными. Очевидна параллель с объектно-ориентированным программированием, где объекты позволяют нам связать некоторые данные (свойства объекта) с одним или несколькими методами.</p>
+
+<p>Следовательно, замыкания можно использовать везде, где вы обычно использовали объект с одним единственным методом.</p>
+
+<p>Такие ситуации повсеместно встречаются в web-разработке. Большое количество front-end кода, который мы пишем на JavaScript, основанно на обработке событий. Мы описываем какое-то поведение, а потом связываем его с событием, которое создается пользователем (например, клик мышкой или нажатие клавиши). При этом наш код обычно привязывается к событию в виде обратного/ответного вызова (callback): <em>callback функция - функция выполняемая в ответ на возникновение события</em>.</p>
+
+<p>Давайте рассмотрим практический пример: допустим, мы хотим добавить на страницу несколько кнопок, которые будут менять размер текста. Как вариант, мы можем указать свойство font-size на элементе body в пикселах, а затем устанавливать размер прочих элементов страницы (таких, как заголовки) с использованием относительных единиц em:</p>
+
+<pre class="brush: css notranslate">body {
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 12px;
+}
+
+h1 {
+ font-size: 1.5em;
+}
+
+h2 {
+ font-size: 1.2em;
+}
+</pre>
+
+<p>Тогда наши кнопки будут менять свойство font-size элемента body, а остальные элементы страницы просто получат это новое значение и отмасштабируют размер текста благодаря использованию относительных единиц.</p>
+
+<p>Используем следующий JavaScript:</p>
+
+<pre class="brush: js notranslate">function makeSizer(size) {
+ return function() {
+ document.body.style.fontSize = size + 'px';
+ };
+};
+
+var size12 = makeSizer(12);
+var size14 = makeSizer(14);
+var size16 = makeSizer(16);
+</pre>
+
+<p>Теперь <code>size12</code>, <code>size14</code>, и <code>size16</code> - это функции, которые меняют размер текста в элементе body на значения 12, 14, и 16 пикселов, соответственно. После чего мы цепляем эти функции на кнопки примерно так:</p>
+
+<pre class="brush: js notranslate">document.getElementById('size-12').onclick = size12;
+document.getElementById('size-14').onclick = size14;
+document.getElementById('size-16').onclick = size16;
+</pre>
+
+<pre class="brush: html notranslate">&lt;a href="#" id="size-12"&gt;12&lt;/a&gt;
+&lt;a href="#" id="size-14"&gt;14&lt;/a&gt;
+&lt;a href="#" id="size-16"&gt;16&lt;/a&gt;
+</pre>
+
+<p>{{JSFiddleEmbed("https://jsfiddle.net/vnkuZ/7726/","","200")}}</p>
+
+<h2 id="Эмуляция_частных_private_методов_с_помощью_замыканий">Эмуляция частных (private) методов с помощью замыканий</h2>
+
+<p>Языки вроде Java позволяют нам объявлять частные (private) методы . Это значит, что они могут быть вызваны только методами того же класса, в котором объявлены.</p>
+
+<p>JavaScript не имеет встроенной возможности сделать такое, но это можно эмулировать с помощью замыкания. Частные методы полезны не только тем, что ограничивают доступ к коду, это также мощное средство глобальной организации пространства имен, позволяющее не засорять публичный интерфейс вашего кода внутренними методами классов.</p>
+
+<p>Код ниже иллюстрирует, как можно использовать замыкания для определения публичных функций, которые имеют доступ к закрытым от пользователя (private) функциям и переменным. Такая манера программирования называется <a class="external" href="http://www.google.com/search?q=javascript+module+pattern" title="http://www.google.com/search?q=javascript+module+pattern">модульное программирование</a>: </p>
+
+<pre class="brush: js notranslate">var Counter = (function() {
+ var privateCounter = 0;
+ function changeBy(val) {
+ privateCounter += val;
+ }
+ return {
+ increment: function() {
+ changeBy(1);
+ },
+ decrement: function() {
+ changeBy(-1);
+ },
+ value: function() {
+ return privateCounter;
+ }
+ };
+})();
+
+alert(Counter.value()); /* Alerts 0 */
+Counter.increment();
+Counter.increment();
+alert(Counter.value()); /* Alerts 2 */
+Counter.decrement();
+alert(Counter.value()); /* Alerts 1 */
+</pre>
+
+<p>Тут много чего поменялось. В предыдущем примере каждое замыкание имело свой собственный контекст исполнения (окружение). Здесь мы создаем единое окружение для трех функций: <code>Counter.increment</code>, <code>Counter.decrement</code>, и <code>Counter.value</code>.</p>
+
+<p>Единое окружение создается в теле анонимной функции, которая исполняется в момент описания. Это окружение содержит два приватных элемента: переменную <code>privateCounter</code> и функцию <code>changeBy(val)</code>. Ни один из этих элементов не доступен напрямую, за пределами этой самой анонимной функции. Вместо этого они могут и должны использоваться тремя публичными функциями, которые возвращаются анонимным блоком кода (anonymous wrapper), выполняемым в той же анонимной функции.</p>
+
+<p>Эти три публичные функции являются замыканиями, использующими общий контекст исполнения (окружение). Благодаря механизму lexical scoping в Javascript, все они имеют доступ к переменной <code>privateCounter</code> и функции <code>changeBy</code>.</p>
+
+<p>Заметьте, мы описываем анонимную фунцию, создающую счётчик, и тут же запускаем ее, присваивая результат исполнения переменной <code>Counter</code>. Но мы также можем не запускать эту функцию сразу, а сохранить её в отдельной переменной, чтобы использовать для дальнейшего создания нескольких счётчиков вот так:</p>
+
+<pre class="brush: js notranslate">var makeCounter = function() {
+ var privateCounter = 0;
+ function changeBy(val) {
+ privateCounter += val;
+ }
+ return {
+ increment: function() {
+ changeBy(1);
+ },
+ decrement: function() {
+ changeBy(-1);
+ },
+ value: function() {
+ return privateCounter;
+ }
+ }
+};
+
+var Counter1 = makeCounter();
+var Counter2 = makeCounter();
+alert(Counter1.value()); /* Alerts 0 */
+Counter1.increment();
+Counter1.increment();
+alert(Counter1.value()); /* Alerts 2 */
+Counter1.decrement();
+alert(Counter1.value()); /* Alerts 1 */
+alert(Counter2.value()); /* Alerts 0 */
+</pre>
+
+<p>Заметьте, что счетчики работают независимо друг от друга. Это происходит потому, что у каждого из них в момент создания функцией <code><span style="font-family: consolas,monaco,andale mono,monospace;">makeCounter()</span></code> также создавался свой отдельный контекст исполнения (окружение). То есть приватная переменная <code>privateCounter </code>в каждом из счетчиков это действительно отдельная, самостоятельная переменная.</p>
+
+<p>Используя замыкания подобным образом, вы получаете ряд преимуществ, обычно ассоциируемых с объектно-ориентированным программированием, таких как изоляция и инкапсуляция.</p>
+
+<h2 id="Создание_замыканий_в_цикле_Очень_частая_ошибка">Создание замыканий в цикле: Очень частая ошибка</h2>
+
+<p>До того, как в версии ECMAScript 6 ввели ключевое слово <a href="/en-US/docs/JavaScript/Reference/Statements/let" title="let"><code>let</code></a>, постоянно возникала следующая проблема при создании замыканий внутри цикла. Рассмотрим пример:</p>
+
+<pre class="brush: html notranslate">&lt;p id="help"&gt;Helpful notes will appear here&lt;/p&gt;
+&lt;p&gt;E-mail: &lt;input type="text" id="email" name="email"&gt;&lt;/p&gt;
+&lt;p&gt;Name: &lt;input type="text" id="name" name="name"&gt;&lt;/p&gt;
+&lt;p&gt;Age: &lt;input type="text" id="age" name="age"&gt;&lt;/p&gt;
+</pre>
+
+<pre class="brush: js notranslate">function showHelp(help) {
+ document.getElementById('help').innerHTML = help;
+}
+
+function setupHelp() {
+ var helpText = [
+ {'id': 'email', 'help': 'Ваш адрес e-mail'},
+ {'id': 'name', 'help': 'Ваше полное имя'},
+ {'id': 'age', 'help': 'Ваш возраст (Вам должно быть больше 16)'}
+ ];
+
+ for (var i = 0; i &lt; helpText.length; i++) {
+ var item = helpText[i];
+ document.getElementById(item.id).onfocus = function() {
+ showHelp(item.help);
+ }
+ }
+}
+
+setupHelp();
+</pre>
+
+<p>{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/13026/", "", 200)}}</p>
+
+<p>Массив <code>helpText</code> описывает три подсказки для трех полей ввода. Цикл пробегает эти описания по очереди и для каждого из полей ввода определяет, что при возникновении события <code>onfocus</code> для этого элемента должна вызываться функция, показывающая соответствующую подсказку.</p>
+
+<p>Если вы запустите этот код, то увидите, что он работает не так, как мы ожидаем интуитивно. Какое поле вы бы ни выбрали, в качестве подсказки всегда будет высвечиваться сообщение о возрасте. </p>
+
+<p>Проблема в том, что функции, присвоенные как обработчики события <code>onfocus</code>, являются замыканиями. Они состоят из описания функции и контекста исполнения (окружения), унаследованного от  функции <code>setupHelp</code>. Было создано три замыкания, но все они были созданы с одним и тем же контекстом исполнения. К моменту возникновения события <code>onfocus</code> цикл уже давно отработал, а значит, переменная <code>item</code> (одна и та же для всех трех замыканий) указывает на последний элемент массива, который как раз в поле возраста.</p>
+
+<p>В качестве решения в этом случае можно предложить использование функции, фабричной функции (function factory), как уже было описано выше в примерах:</p>
+
+<pre class="brush: js notranslate">function showHelp(help) {
+ document.getElementById('help').innerHTML = help;
+}
+
+function makeHelpCallback(help) {
+ return function() {
+ showHelp(help);
+ };
+}
+
+function setupHelp() {
+ var helpText = [
+ {'id': 'email', 'help': 'Ваш адрес e-mail'},
+ {'id': 'name', 'help': 'Ваше полное имя'},
+ {'id': 'age', 'help': 'Ваш возраст (Вам должно быть больше 16)'}
+ ];
+
+ for (var i = 0; i &lt; helpText.length; i++) {
+ var item = helpText[i];
+ document.getElementById(item.id).onfocus = makeHelpCallback(item.help);
+ }
+}
+
+setupHelp();
+</pre>
+
+<p>{{JSFiddleEmbed("https://jsfiddle.net/v7gjv/13024/", "", 200)}}</p>
+
+<p>Вот это работает как следует. Вместо того, чтобы делить на всех одно окружение, функция <code>makeHelpCallback</code> создает каждому из замыканий свое собственное, в котором переменная <code>item</code> указывает на правильный элемент массива <code>helpText</code>.</p>
+
+<h2 id="Соображения_по_производительности">Соображения по производительности</h2>
+
+<p>Не нужно без необходимости создавать функции внутри функций в тех случаях, когда замыкания не нужны. Использование этой техники увеличивает требования к производительности как в части скорости, так и в части потребления памяти.</p>
+
+<p>Как пример, при написании нового класса есть смысл помещать все методы в прототип его объекта, а не описывать их в тексте конструктора. Если сделать по-другому, то при каждом создании объекта для него будет создан свой экземпляр каждого из методов, вместо того, чтобы наследовать их из прототипа.</p>
+
+<p>Давайте рассмотрим не очень практичный, но показательный пример:</p>
+
+<pre class="brush: js notranslate">function MyObject(name, message) {
+ this.name = name.toString();
+ this.message = message.toString();
+ this.getName = function() {
+ return this.name;
+ };
+
+ this.getMessage = function() {
+ return this.message;
+ };
+}
+</pre>
+
+<p>Поскольку вышеприведенный код никак не использует преимущества замыканий, его можно переписать следующим образом:</p>
+
+<pre class="brush: js notranslate">function MyObject(name, message) {
+ this.name = name.toString();
+ this.message = message.toString();
+}
+MyObject.prototype = {
+ getName: function() {
+ return this.name;
+ },
+ getMessage: function() {
+ return this.message;
+ }
+};
+</pre>
+
+<p>Методы вынесены в прототип. Тем не менее, переопределять прототип — само по себе является плохой привычкой, поэтому давайте перепишем всё так, чтобы новые методы просто добавились к уже существующему прототипу.</p>
+
+<pre class="brush: js notranslate">function MyObject(name, message) {
+ this.name = name.toString();
+ this.message = message.toString();
+}
+MyObject.prototype.getName = function() {
+ return this.name;
+};
+MyObject.prototype.getMessage = function() {
+ return this.message;
+};
+</pre>
+
+<p>Код выше можно сделать аккуратнее:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">MyObject<span class="punctuation token" style="color: #999999;">(</span></span>name<span class="punctuation token" style="color: #999999;">,</span> message<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>name <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> name<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">toString<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>message <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> message<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">toString<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+<span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>getName <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>name<span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>getMessage <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>message<span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">call<span class="punctuation token" style="color: #999999;">(</span></span>MyObject<span class="punctuation token" style="color: #999999;">.</span>prototype<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>В обоих примерах выше методы определяются один раз — в прототипе. И все объекты, использующие данный прототип, будут использовать это определение без дополнительного расхода вычислительных ресурсов. Смотрите подробное описание в статье <a href="/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">Подробнее об объектной модели</a>.</p>
+
+<div>{{PreviousNext("Web/JavaScript/Equality_comparisons_and_sameness")}}</div>
diff --git a/files/ru/web/javascript/data_structures/index.html b/files/ru/web/javascript/data_structures/index.html
new file mode 100644
index 0000000000..e02cffe0f7
--- /dev/null
+++ b/files/ru/web/javascript/data_structures/index.html
@@ -0,0 +1,310 @@
+---
+title: Типы данных JavaScript и структуры данных
+slug: Web/JavaScript/Data_structures
+tags:
+ - JavaScript
+ - Типы данных
+ - Учебник
+translation_of: Web/JavaScript/Data_structures
+---
+<div>{{jsSidebar("More")}}</div>
+
+<p>Все языки программирования содержат встроенные типы данных, но они часто отличаются друг от друга в разных языках. Эта статья — попытка описать встроенные структуры (типы) данных, доступные в JavaScript, и их свойства. На их основе строятся другие структуры данных. Когда это возможно, то мы будем сравнивать типы данных в разных языках.</p>
+
+<h2 id="Динамическая_типизация">Динамическая типизация</h2>
+
+<p>JavaScript является <em>слабо типизированным</em> или <em>динамическим</em> языком. Это значит, что вам не нужно определять тип переменной заранее. Тип определится автоматически во время выполнения программы. Также это значит, что вы можете использовать одну переменную для хранения данных различных типов:</p>
+
+<pre class="brush: js notranslate">var foo = 42; // сейчас foo типа Number
+foo = "bar"; // а теперь foo типа String
+foo = true; // foo становится типа Boolean
+</pre>
+
+<h2 id="Типы_данных">Типы данных</h2>
+
+<p>Стандарт ECMAScript определяет 9 типов:</p>
+
+<ul>
+ <li>6 типов данных являющихся примитивами:
+ <ul>
+ <li>{{Glossary("Undefined")}} (Неопределенный тип)  : <code>typeof instance === "undefined"</code></li>
+ <li>{{Glossary("Boolean")}} (Булев, Логический тип) : <code>typeof instance === "boolean"</code></li>
+ <li>{{Glossary("Number")}} (Число) : <code>typeof instance === "number"</code></li>
+ <li>{{Glossary("String")}} (Строка) : <code>typeof instance === "string"</code></li>
+ <li>{{Glossary("BigInt")}}  : <code>typeof instance === "bigint"</code></li>
+ <li>{{Glossary("Symbol")}} (в ECMAScript 6)  : <code>typeof instance === "symbol"</code></li>
+ </ul>
+ </li>
+ <li>{{Glossary("Null")}} (Null тип ) : <code>typeof instance === "object"</code>. Специальный примитив, используемый не только для данных но и в качестве указателя на финальную точку в <a href="/ru/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">Цепочке Прототипов</a>;</li>
+ <li>{{Glossary("Object")}} (Объект) : <code>typeof instance === "object"</code>. Простая структура, используемая не только для хранения данных, но и для создания других структур, где любая структура создаётся с использованием ключевого слова <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/new">new</a></code>: new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Map">Map</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Set">Set</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/WeakMap">WeakMap</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/WeakSet">WeakSet</a>, new <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</a> и множество других структур;</li>
+ <li>и {{Glossary("Function")}} : <code>typeof instance === "function"</code>. Специальный случай, упрощающий определение типа для Функций, несмотря на то, что все функции конструктивно унаследованы от Object.</li>
+</ul>
+
+<p>И здесь нам необходимо сделать предостережение относительно использования оператора <code>typeof</code> для определения типа структур, т.к. все структуры будут возвращать <code>"object"</code> при его использовании, так как назначение <code>typeof</code> -- проверка типа данных, но не структур. Если проверить тип структуры всё же необходимо, то в этом случае желательно использовать оператор <a href="/ru/docs/Web/JavaScript/Reference/Operators/instanceof">instanceof</a>, так как именно он отвечает на вопрос о том, какой конструктор был использован для создания структуры.</p>
+
+<h2 id="Примитивные_значения">Примитивные значения</h2>
+
+<p>Все типы данных в JavaScript, кроме объектов, являются иммутабельными (значения не могут быть модифицированы, а только перезаписаны новым полным значением). Например, в отличии от C, где строку можно посимвольно корректировать, в JavaScript строки пересоздаются только полностью. Значения таких типов называются «примитивными значениями».</p>
+
+<h3 id="Булевый_тип_данных">Булевый тип данных</h3>
+
+<p>Булевый тип представляет логическую сущность и имеет два значения: <code>true (истина)</code> и <code>false (ложь)</code>. Смотрите {{Glossary("Boolean")}} и {{jsxref("Boolean")}} для получения подробностей.</p>
+
+<h3 id="Null">Null</h3>
+
+<p>Этот тип данных имеет всего одно значение: <code>null</code>. Смотрите {{jsxref("null")}} и {{Glossary("Null")}} для получения подробностей.</p>
+
+<h3 id="Undefined">Undefined</h3>
+
+<p>Переменная, которой не было присвоено значение, будет иметь значение <code>undefined</code>. Смотрите {{jsxref("undefined")}} и {{Glossary("undefined")}} для получения подробностей.</p>
+
+<h3 id="Числа">Числа</h3>
+
+<p>В соответствии со стандартом ECMAScript, существует только один числовой тип, который представляет собой <a href="https://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE_%D0%B4%D0%B2%D0%BE%D0%B9%D0%BD%D0%BE%D0%B9_%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8">64-битное число двойной точности согласно стандарту IEEE 754</a>. Другими словами, <strong>специального типа для целых чисел в JavaScript нет</strong>. Это означает, что при числовых операциях вы можете получить неточное (округлённое) значение. В дополнение к возможности представлять числа с плавающей запятой, есть несколько символических значений: <code>+Infinity</code> (положительная бесконечность), <code>-Infinity</code> (отрицательная бесконечность), и <code>NaN</code> (не число).</p>
+
+<p>Для получения самого большого или самого меньшего доступного значения в пределах <code>+/-Infinity</code>, можно использовать константы {{jsxref("Number.MAX_VALUE")}} или {{jsxref("Number.MIN_VALUE")}}. А начиная с ECMAScript 2015, вы также можете проверить, находится ли число в безопасном для целых чисел диапазоне, используя метод {{jsxref("Number.isSafeInteger()")}}, либо константы {{jsxref("Number.MAX_SAFE_INTEGER")}} и {{jsxref("Number.MIN_SAFE_INTEGER")}}. За пределами этого диапазона операции с целыми числами будут небезопасными, и возвращать приближённые значения.</p>
+
+<p>Ноль в JavaScript имеет два представления: -0 и +0. («0» это синоним +0). На практике это имеет малозаметный эффект. Например, выражение <code>+0 === -0</code> является истинным. Однако, это может проявиться при делении на ноль:</p>
+
+<pre class="brush: js notranslate"><code>&gt; 42 / +0
+Infinity
+&gt; 42 / -0
+-Infinity</code></pre>
+
+<p>Хотя число в большинстве случаев представляет только своё значение, JavaScript предоставляет <a href="/ru/JavaScript/Reference/Operators/Bitwise_Operators" title="en/JavaScript/Reference/Operators/Bitwise_Operators">несколько бинарных операций</a>. Они могут использоваться для того, чтобы представлять число как несколько булевых значений, с помощью <a class="external" href="https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D0%B0%D1%8F_%D0%BC%D0%B0%D1%81%D0%BA%D0%B0">битовой маски</a>. Это считается плохой практикой, так как JavaScript предлагает другие способы представления булевых значений (например, массив элементов с булевыми значениями или объект, содержащий набор булевых свойств). Кроме того, битовые маски часто делают код более трудным для чтения, понимания и дальнейшей поддержки. Эта техника может быть необходима в условиях технических ограничений, таких как объём локального хранилища данных, или в такой экстремальной ситуации, когда каждый бит передаваемый по сети на счету. Данный подход следует использовать как крайнюю меру, когда не остаётся других путей для необходимой оптимизации.</p>
+
+<h3 id="Текстовые_строки">Текстовые строки</h3>
+
+<p>В JavaScript для представления текстовых данных служит тип {{jsxref("Global_Objects/String", "String")}}. Он представляет собой цепочку «элементов» 16-битных беззнаковых целочисленных значений. Каждый такой элемент занимает свою позицию в строке. Первый элемент имеет индекс 0, следующий — 1, и так далее. Длина строки — это количество элементов в ней.</p>
+
+<p>В отличие от языков подобных C, строки в JavaScript являются иммутабельными. Это означает, что после того, как строковое значение создано, его нельзя модифицировать. Остаётся лишь создать новую строку путём совершения некой операции над исходной строкой. Например:</p>
+
+<ul>
+ <li>Получить часть исходной строки выборкой отдельных символов, либо применением метода {{jsxref("String.substr()")}}.</li>
+ <li>Объединить две строки в одну, применив оператор (<code>+</code>) или метод {{jsxref("String.concat()")}}.</li>
+</ul>
+
+<h4 id="Избегайте_повсеместного_использования_строк_в_своем_коде!">Избегайте повсеместного использования строк в своем коде!</h4>
+
+<p>Иногда может показаться соблазнительным использование строк для представления сложных структур данных. Это даст небольшие краткосрочные выгоды:</p>
+
+<ul>
+ <li>Легко соединять данные в кучу сложением строк.</li>
+ <li>Легко отлаживать (данные выглядят «как есть», в читаемом текстовом виде).</li>
+ <li>Строки — это распространённый формат данных, используемый разнообразными API (<a href="/ru/docs/Web/API/HTMLInputElement" title="HTMLInputElement">поля ввода</a>, значения <a href="/ru/docs/Storage" title="Storage">локального хранилища</a>, {{ domxref("XMLHttpRequest") }} возвращает ответ в виде строки, и т. д.) и использовать только строки может показаться заманчивым.</li>
+</ul>
+
+<p>Несмотря на то, что в строке можно выразить данные любой сложности, делать это — не самая лучшая идея. Например, используя разделитель, строку можно использовать как список элементов (массив JavaScript будет более подходящим решением). К сожалению, если такой сепаратор встретится в значении одного из элементов, такой список будет сломан. Выходом может стать добавление символа экранирования, и т. д. Всё это потребует добавления множества ненужных правил, и станет обременительным при поддержке.</p>
+
+<p>Используйте строки только для текстовых данных. Для составных структур преобразуйте строки в подобающие конструкции.</p>
+
+<h3 id="Тип_данных_Символ_Symbol">Тип данных Символ (Symbol)</h3>
+
+<p>Символы являются нововведением JavaScript начиная с ECMAScript 2015. Символ — это <strong>уникальное</strong> и <strong>иммутабельное</strong> примитивное значение, которое может быть использовано как ключ для свойства объекта (смотрите ниже). В некоторых языках программирования символы называются атомами. Их также можно сравнить с именованными значениями перечисления (enum) в языке C. Подробнее смотрите {{Glossary("Symbol")}} и {{jsxref("Symbol")}}.</p>
+
+<h3 id="Тип_данных_Большое_целое_BigInt">Тип данных Большое целое (BigInt)</h3>
+
+<p><code>BigInt</code><font><font> является встроенным объектом, который предоставляет способ представления целых чисел, которые больше 2 </font></font><sup><font><font>53</font></font></sup><font><font>, что является наибольшим числом, которое JavaScript может надежно представить с помощью </font></font><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number" title="JavaScript-объект Number - это объект-оболочка, позволяющий работать с числовыми значениями. Объект Number создается с помощью конструктора Number (). Номер объекта типа примитива создается с помощью функции Number ().">Number</a></code><font><font> примитива.</font></font></p>
+
+<pre class="brush: js notranslate"><code>&gt; let bigInt = 19241924124n;
+&gt; console.log(bigInt);
+19241924124n
+&gt; console.log(typeof bigInt);
+</code>"bigint"</pre>
+
+<h2 id="Объекты">Объекты</h2>
+
+<p>В компьютерной терминологии, объект — это значение в памяти, на которое возможно сослаться с помощью {{Glossary("Identifier", "идентификатора")}}.</p>
+
+<h3 id="Свойства">Свойства</h3>
+
+<p>В JavaScript объект может расцениваться как набор свойств. <a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Object_literals">Литеральная инициализация объекта</a> задаёт определённое количество начальных свойств, и в процессе работы приложения поля могут добавляться и удаляться. Значения свойств могут иметь любой тип, включая другие объекты, что позволяет строить сложные, разветвлённые иерархии данных. Каждое свойство объекта идентифицируется ключом, в качестве которого может выступать значение с типом Строка или Символ.</p>
+
+<p>Есть два типа свойств: свойство-значение и свойство-акцессор (свойство, обёрнутое в геттер и сеттер). Они отличаются определенными атрибутами.</p>
+
+<h4 id="Свойство-значение">Свойство-значение</h4>
+
+<p>Ассоциирует ключ со значением, и имеет следующие атрибуты:</p>
+
+<table>
+ <caption>Атрибуты свойства-значения</caption>
+ <tbody>
+ <tr>
+ <th>Атрибут</th>
+ <th>Тип</th>
+ <th>Описание</th>
+ <th>Значение по умолчанию</th>
+ </tr>
+ <tr>
+ <td>[[Value]]</td>
+ <td>Любой тип JavaScript</td>
+ <td>Значение, возвращаемое при обращении к свойству.</td>
+ <td>undefined</td>
+ </tr>
+ <tr>
+ <td>[[Writable]]</td>
+ <td>Boolean</td>
+ <td>Если <code>false</code>, то [[Value]] свойства не может быть изменено.</td>
+ <td>false</td>
+ </tr>
+ <tr>
+ <td>[[Enumerable]]</td>
+ <td>Boolean</td>
+ <td>Если <code>true</code>, свойство будет перечислено в цикле <a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a>. Смотрите подробнее <a href="/ru/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">Перечисляемость и владение свойствами</a>.</td>
+ <td>false</td>
+ </tr>
+ <tr>
+ <td>[[Configurable]]</td>
+ <td>Boolean</td>
+ <td>Если <code>false</code>, то свойство не может быть удалено, а его атрибуты, кроме [[Value]] и [[Writable]] не могут быть изменены.</td>
+ <td>false</td>
+ </tr>
+ </tbody>
+</table>
+
+<table>
+ <caption>Устаревшие атрибуты (присутствуют в ECMAScript 3, но переименованы в ECMAScript 5)</caption>
+ <tbody>
+ <tr>
+ <th>Атрибут</th>
+ <th>Тип</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>Read-only</td>
+ <td>Boolean</td>
+ <td>Зарезервировано по атрибуту [[Writable]] ES5.</td>
+ </tr>
+ <tr>
+ <td>DontEnum</td>
+ <td>Boolean</td>
+ <td>Зарезервировано по атрибуту [[Enumerable]] ES5.</td>
+ </tr>
+ <tr>
+ <td>DontDelete</td>
+ <td>Boolean</td>
+ <td>Зарезервировано по атрибуту [[Configurable]] ES5.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Свойство-акцессор">Свойство-акцессор</h4>
+
+<p>Ассоциирует ключ с одной из двух функций-акцессоров (геттер и сеттер) для получения или изменения значения свойства, и имеет следующий атрибуты:</p>
+
+<table>
+ <caption>Атрибуты свойства-акцессора</caption>
+ <tbody>
+ <tr>
+ <th>Атрибут</th>
+ <th>Тип</th>
+ <th>Описание</th>
+ <th>Значение по умолчанию</th>
+ </tr>
+ <tr>
+ <td>[[Get]]</td>
+ <td>Function или undefined</td>
+ <td>Функция вызывается без параметров и возвращает значение свойства каждый раз, когда происходит чтение свойства. Смотрите также <a href="/ru/docs/Web/JavaScript/Reference/Operators/get"><code>get</code></a>.</td>
+ <td>undefined</td>
+ </tr>
+ <tr>
+ <td>[[Set]]</td>
+ <td>Function или undefined</td>
+ <td>Функция вызывается с одним аргументом, содержащим присваиваемое значение, каждый раз, когда происходит попытка присвоить свойству новое значение. Смотрите также <a href="/ru/docs/Web/JavaScript/Reference/Operators/set"><code>set</code></a>.</td>
+ <td>undefined</td>
+ </tr>
+ <tr>
+ <td>[[Enumerable]]</td>
+ <td>Boolean</td>
+ <td>Если <code>true</code>, свойство будет перечислено в цикле <a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a>.</td>
+ <td>false</td>
+ </tr>
+ <tr>
+ <td>[[Configurable]]</td>
+ <td>Boolean</td>
+ <td>Если <code>false</code>, то свойство не может быть удалено, и не может быть преобразовано в свойство-значение.</td>
+ <td>false</td>
+ </tr>
+ </tbody>
+</table>
+
+<div class="note">
+<p><strong>Примечание: </strong>Атрибуты обычно используются движком JavaScript, поэтому вы не можете обратиться к ним напрямую (смотрите подробнее <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty()</a>). Вот почему в таблицах выше они помещены в двойные квадратные скобки вместо одиночных.</p>
+</div>
+
+<h3 id="«Обычные»_объекты_и_функции">«Обычные» объекты и функции</h3>
+
+<p>Объект JavaScript — это таблица соотношений между ключами и значениями. Ключи — это строки (или {{jsxref("Symbol")}}), а значения могут быть любыми. Это делает объекты полностью отвечающими определению <a href="https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0">хеш-таблицы</a>.</p>
+
+<p>Функции — это обычные объекты, имеющие дополнительную возможность быть вызванными для исполнения.</p>
+
+<h3 id="Даты">Даты</h3>
+
+<p>Для работы с датами служит встроенный глобальный объект <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Date"><code>Date</code></a>.</p>
+
+<h3 id="Массивы_общие_и_типизированные">Массивы общие и типизированные</h3>
+
+<p><a href="/ru/docs/JavaScript/Reference/Global_Objects/Array" title="Array">Массив</a> — это обычный объект с дополнительной связью между целочисленными ключами его свойств и специальным свойством length. Вдобавок ко всему, массивы наследуют <code>Array.prototype</code>, предоставляющий исчерпывающий набор методов для манипуляции массивами. Например, метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf" title="en/JavaScript/Reference/Global_Objects/Array/indexOf">indexOf</a></code> (служит для поиска значения в массиве), <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Array/push" title="en/JavaScript/Reference/Global_Objects/Array/push">push</a></code> (добавляет элемент в конец массива) и т. д. Всё это делает массив идеальным кандидатом для представления списков и перечислений.</p>
+
+<p><a href="/ru/docs/Web/JavaScript/Typed_arrays">Типизированный массив</a> является новинкой ECMAScript Edition 6 и является массивоподобным представлением для лежащего в его основе бинарного буфера памяти. Следующая таблица поможет вам найти соответствующие типы языка C:</p>
+
+<p>{{page("/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", "Объекты_TypedArray", "", 0, 3)}}</p>
+
+<h3 id="Коллекции_Maps_Sets_WeakMaps_WeakSets">Коллекции: Maps, Sets, WeakMaps, WeakSets</h3>
+
+<p>Эти наборы данных используют ссылку на объект в качестве ключа, и введены в JavaScript с приходом ECMAScript Edition 6. {{jsxref("Set")}} и {{jsxref("WeakSet")}} являют собой набор уникальных объектов, в то время как {{jsxref("Map")}} и {{jsxref("WeakMap")}} ассоциируют с объектом (выступающим в качестве ключа) некоторое значение. Разница между Map и WeakMap заключается в том, что только у Map ключи являются перечисляемыми. Это позволяет оптимизировать сборку мусора для WeakMap.</p>
+
+<p>Можно было бы написать собственную реализацию Map и Set на чистом ECMAScript 5. Однако, так как объекты нельзя сравнивать на больше или меньше, то производительность поиска в самодельной реализации будет вынужденно линейной. Нативная реализация (включая WeakMap) имеет производительность логарифмически близкую к константе.</p>
+
+<p>Обычно, для привязки некоторых данных к узлу DOM, приходится устанавливать свойства этому узлу непосредственно, либо использовать его атрибуты <code>data-*</code>. Обратной стороной такого подхода является то, что эти данные будут доступны любому скрипту, работающему в том же контексте. Maps и WeakMaps дают возможность приватной привязки данных к объекту.</p>
+
+<h3 id="Структурированные_данные_JSON">Структурированные данные: JSON</h3>
+
+<p>JSON (JavaScript Object Notation) — это легковесный формат обмена данными, происходящий от JavaScript, но используемый во множестве языков программирования. JSON строит универсальные структуры данных. Смотрите {{Glossary("JSON")}} и {{jsxref("JSON")}} для детального изучения.</p>
+
+<h3 id="Больше_объектов_и_стандартная_библиотека">Больше объектов и стандартная библиотека</h3>
+
+<p>JavaScript имеет стандартную библиотеку встроенных объектов. Пожалуйста, обратитесь к <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects">справочнику</a>, чтобы найти описание всех объектов доступных для работы.</p>
+
+<h2 id="Определение_типов_оператором_typeof">Определение типов оператором <code>typeof</code></h2>
+
+<p>Оператор <code>typeof</code> может помочь определить тип вашей переменной. Смотрите <a href="/ru/docs/Web/JavaScript/Reference/Operators/typeof">страницу документации</a>, где приведены его детали и случаи использования.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table>
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-8', 'Типы')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-ecmascript-data-types-and-values', 'Типы данных и значения ECMAScript')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-ecmascript-data-types-and-values', 'Типы данных и значения ECMAScript')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://github.com/nzakas/computer-science-in-javascript/">Nicholas Zakas, коллекция некоторых классических структур данных и алгоритмов, написанных на JavaScript.</a></li>
+ <li><a href="https://github.com/monmohan/DataStructures_In_Javascript" title="https://github.com/monmohan/DataStructures_In_Javascript">Реализация некоторых структур данных для JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/enumerability_and_ownership_of_properties/index.html b/files/ru/web/javascript/enumerability_and_ownership_of_properties/index.html
new file mode 100644
index 0000000000..1f529830a9
--- /dev/null
+++ b/files/ru/web/javascript/enumerability_and_ownership_of_properties/index.html
@@ -0,0 +1,243 @@
+---
+title: Enumerability and ownership of properties
+slug: Web/JavaScript/Enumerability_and_ownership_of_properties
+translation_of: Web/JavaScript/Enumerability_and_ownership_of_properties
+---
+<div>{{JsSidebar("More")}}</div>
+
+<p>В языке JavaScript свойства объектов могут быть перечисляемыми или неперечисляемыми (встречается вариант перевода: счётные или несчётные). Если внутреннему флагу [[Enumerable]] свойства присвоить значение true, то данное свойство становится перечисляемым. Это происходит по умолчанию для свойств, созданных простым присваиванием или через инициализацию свойств (свойства, определённые через <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a> получают по умолчанию значение флага [[Enumerable]] равным false). Перечисляемые свойства участвуют в итерации в цикле <a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a>, если только имя свойства не <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol">Символ</a>. Принадлежность свойства определяется тем, принадлежит ли оно непосредственно объекту или получено из цепочки прототипов. Также можно получить весь список свойств объекта. Ниже, в таблице, указаны возможные способы нахождения, получения и итерации свойств объектов. Некоторые из них нельзя использовать без дополнительного кода, примеры которого приведены после таблицы.</p>
+
+<table>
+ <caption>Перечисляемость и принадлежность свойств - встроенные методы определения, получения и итерации</caption>
+ <tbody>
+ <tr>
+ <th>Назначение</th>
+ <th>Свойства объекта</th>
+ <th>Свойства объекта и его прототипов</th>
+ <th>Свойства из цепочки прототипов</th>
+ </tr>
+ <tr>
+ <td>Определение</td>
+ <td>
+ <table>
+ <thead>
+ <tr>
+ <th scope="col">Перечисляемые</th>
+ <th scope="col">Неперечисляемые</th>
+ <th scope="col">Перечисляемые и Неперечисляемые</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></code></td>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty">hasOwnProperty</a></code> и !<code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></code></td>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty">hasOwnProperty</a></code></td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>Недоступно без дополнительного кода</td>
+ <td>Недоступно без дополнительного кода</td>
+ </tr>
+ <tr>
+ <td>Получение</td>
+ <td>
+ <table>
+ <thead>
+ <tr>
+ <th scope="col">Перечисляемые</th>
+ <th scope="col">Неперечисляемые</th>
+ <th scope="col">Перечисляемые и Неперечисляемые</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/keys" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys">Object.keys</a></code></td>
+ <td>Получить <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a></code>, выбрать свойства, не удовлетворяющие <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></code></td>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a></code></td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>Недоступно без дополнительного кода</td>
+ <td>Недоступно без дополнительного кода</td>
+ </tr>
+ <tr>
+ <td>Итерация</td>
+ <td>
+ <table>
+ <thead>
+ <tr>
+ <th scope="col">Перечисляемые</th>
+ <th scope="col">Неперечисляемые</th>
+ <th scope="col">Перечисляемые и Неперечисляемые</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Итерация по массиву <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/keys" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys">Object.keys</a></code></td>
+ <td>Итерация по <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a></code>, с выбранными свойствами, не удовлетворяющими <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></code></td>
+ <td>Итерация по <code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a></code></td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>
+ <table>
+ <thead>
+ <tr>
+ <th scope="col">Перечисляемые</th>
+ <th scope="col">Неперечисляемые</th>
+ <th scope="col">Перечисляемые и Неперечисляемые</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/ru/docs/JavaScript/Reference/Statements/for...in" title="/en-US/docs/JavaScript/Reference/Statements/for...in">for..in</a></code></td>
+ <td>Недоступно без дополнительного кода</td>
+ <td>Недоступно без дополнительного кода</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>Недоступно без дополнительного кода</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Доступ_к_свойствам_по_их_перечисляемостипринадлежности">Доступ к свойствам по их перечисляемости/принадлежности</h2>
+
+<p>Хотим заметить, что данный алгоритм эффективен не для всех классов.</p>
+
+<ul>
+ <li>Определение свойства:    <code>SimplePropertyRetriever.theGetMethodYouWant(obj).indexOf(prop) &gt; -1</code></li>
+ <li>Итерация:   <code>SimplePropertyRetriever.theGetMethodYouWant(obj).forEach(function (value, prop) {});</code> (or use<code> filter()</code>, <code>map()</code>, etc.)</li>
+</ul>
+
+<pre class="brush: js">var SimplePropertyRetriever = {
+ getOwnEnumerables: function (obj) {
+ return this._getPropertyNames(obj, true, false, this._enumerable);
+ // Или можно использовать for..in, отфильтрованный по hasOwnProperty или проще: return Object.keys(obj);
+ },
+ getOwnNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, true, false, this._notEnumerable);
+ },
+ getOwnEnumerablesAndNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, true, false, this._enumerableAndNotEnumerable);
+ // Или можно использовать: return Object.getOwnPropertyNames(obj);
+ },
+ getPrototypeEnumerables: function (obj) {
+ return this._getPropertyNames(obj, false, true, this._enumerable);
+ },
+ getPrototypeNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, false, true, this._notEnumerable);
+ },
+ getPrototypeEnumerablesAndNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, false, true, this._enumerableAndNotEnumerable);
+ },
+ getOwnAndPrototypeEnumerables: function (obj) {
+ return this._getPropertyNames(obj, true, true, this._enumerable);
+ // Или можно использовать for..in
+ },
+ getOwnAndPrototypeNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, true, true, this._notEnumerable);
+ },
+ getOwnAndPrototypeEnumerablesAndNonenumerables: function (obj) {
+ return this._getPropertyNames(obj, true, true, this._enumerableAndNotEnumerable);
+ },
+ // Private static property checker callbacks
+ _enumerable : function (obj, prop) {
+ return obj.propertyIsEnumerable(prop);
+ },
+ _notEnumerable : function (obj, prop) {
+ return !obj.propertyIsEnumerable(prop);
+ },
+ _enumerableAndNotEnumerable : function (obj, prop) {
+ return true;
+ },
+ // По мотивам http://stackoverflow.com/a/8024294/271577
+ _getPropertyNames : function getAllPropertyNames(obj, iterateSelfBool, iteratePrototypeBool, includePropCb) {
+ var props = [];
+
+ do {
+ if (iterateSelfBool) {
+ Object.getOwnPropertyNames(obj).forEach(function (prop) {
+ if (props.indexOf(prop) === -1 &amp;&amp; includePropCb(obj, prop)) {
+ props.push(prop);
+ }
+ });
+ }
+ if (!iteratePrototypeBool) {
+ break;
+ }
+ iterateSelfBool = true;
+ } while (obj = Object.getPrototypeOf(obj));
+
+ return props;
+ }
+};</pre>
+
+<h2 id="Определяемость_свойств">Определяемость свойств</h2>
+
+<table>
+ <thead>
+ <tr>
+ <th scope="row"> </th>
+ <th scope="col"><code>in</code></th>
+ <th scope="col"><code>for..in</code></th>
+ <th scope="col"><code>hasOwnProperty</code></th>
+ <th scope="col"><code>propertyIsEnumerable</code></th>
+ <th scope="col"><code>in Object.keys</code></th>
+ <th scope="col"><code>in Object.getOwnPropertyNames</code></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Перечисляемые</th>
+ <td>true</td>
+ <td>true</td>
+ <td>true</td>
+ <td>true</td>
+ <td>true</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <th scope="row">Неперечисляемые</th>
+ <td>true</td>
+ <td>false</td>
+ <td>true</td>
+ <td>false</td>
+ <td>false</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <th scope="row">Унаследованные Перечисляемые</th>
+ <td>true</td>
+ <td>true</td>
+ <td>false</td>
+ <td>false</td>
+ <td>false</td>
+ <td>false</td>
+ </tr>
+ <tr>
+ <th scope="row">Унаследованные Неперечисляемые</th>
+ <td>true</td>
+ <td>false</td>
+ <td>false</td>
+ <td>false</td>
+ <td>false</td>
+ <td>false</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Operators/in" title="/en-US/docs/JavaScript/Reference/Operators/in">in</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Statements/for...in" title="/en-US/docs/JavaScript/Reference/Statements/for...in">for..in</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty">hasOwnProperty</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable">propertyIsEnumerable</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames">getOwnPropertyNames</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/keys" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys">Object.keys</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/equality_comparisons_and_sameness/index.html b/files/ru/web/javascript/equality_comparisons_and_sameness/index.html
new file mode 100644
index 0000000000..fc1ad66e6a
--- /dev/null
+++ b/files/ru/web/javascript/equality_comparisons_and_sameness/index.html
@@ -0,0 +1,424 @@
+---
+title: Операторы сравнения
+slug: Web/JavaScript/Equality_comparisons_and_sameness
+tags:
+ - Равенство
+ - Сравнение
+ - Средний
+translation_of: Web/JavaScript/Equality_comparisons_and_sameness
+---
+<div>{{jsSidebar("Intermediate")}}</div>
+
+<div class="summary">
+<p>JavaScript предоставляет три оператора сравнения величин:</p>
+
+<ul>
+ <li>равенство ("двойное равно") использует <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality">==</a>,</li>
+ <li>строгое равенство (или "тройное равно" или "идентично") использует <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity">===</a>,</li>
+ <li>и <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is"><code>Object.is</code></a> (новшество из ECMAScript 6).</li>
+</ul>
+
+<p>Выбор оператора зависит от типа сравнения, которое необходимо произвести.</p>
+</div>
+
+<p class="syntaxbox">В общих чертах, двойное равно перед сравнением величин производит приведение типов; тройное равно сравнивает величины без приведения (если величины разных типов, вернет <code>false</code>, даже не сравнивая); ну и <code>Object.is</code> ведет себя так же, как и тройное равно, но со специальной обработкой для <code>NaN</code>, <code>-0</code> и <code>+0</code>, возвращая <code>false</code> при сравнении  <code>-0</code> и <code>+0</code>, и <code>true</code> для операции <code>Object.is(NaN, NaN)</code>. (В то время как двойное или тройное равенство вернут <code>false</code> согласно стандарту IEEE 754.) Следует отметить, что все эти различия в сравнениях применимы лишь для примитивов. Для любых не примитивных объектов <code>x</code> и <code>y</code>, которые имеют одинаковые структуры, но представляют собой два отдельных объекта (переменные <code>x</code> и <code>y</code> не ссылаются на один и тот же объект), все операторы сравнения вернут <code>false</code>.</p>
+
+<h2 id="Сравнение_с_использованием">Сравнение с использованием <code>==</code></h2>
+
+<p>Перед сравнением оператор равенства <em>приводит</em> обе величины к общему типу.  После приведений (одного или обоих операндов), конечное сравнение выполняется также как и для <code>===</code>.  Операция сравнения <em>симметрична</em>: <code>A == B</code> возвращает то же значение, что и  <code>B == A</code> для любых значений <code>A</code> и <code>B</code>.</p>
+
+<p>В следующей таблице  приведены результаты сравнения оператора равенства для различных значений:</p>
+
+<table class="standard-table" style="height: 438px; width: 825px;">
+ <thead>
+ <tr>
+ <th scope="row"><code> </code></th>
+ <th colspan="7" scope="col" style="text-align: center;"><code>Операнд B</code></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row"><code> </code></th>
+ <th><code> </code></th>
+ <th style="text-align: center;"><code>Undefined</code></th>
+ <th style="text-align: center;"><code>Null</code></th>
+ <th style="text-align: center;"><code>Number</code></th>
+ <th style="text-align: center;"><code>String</code></th>
+ <th style="text-align: center;"><code>Boolean</code></th>
+ <th style="text-align: center;"><code>Object</code></th>
+ </tr>
+ <tr>
+ <th colspan="1" rowspan="6" scope="row"><code>Операнд A</code></th>
+ <th>
+ <p><code>Undefined</code></p>
+ </th>
+ <td style="text-align: center;"><code><code>true</code></code></td>
+ <td style="text-align: center;"><code><code>true</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <th><code>Null</code></th>
+ <td style="text-align: center;"><code><code>true</code></code></td>
+ <td style="text-align: center;"><code><code>true</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <th><code>Number</code></th>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>A === B</code></code></td>
+ <td style="text-align: center;"><code><code>A === ToNumber(B)</code></code></td>
+ <td style="text-align: center;"><code><code>A === ToNumber(B)</code></code></td>
+ <td style="text-align: center;"><code><code>A == ToPrimitive(B)</code></code></td>
+ </tr>
+ <tr>
+ <th><code>String</code></th>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>ToNumber(A) === B</code></code></td>
+ <td style="text-align: center;"><code><code>A === B</code></code></td>
+ <td style="text-align: center;"><code><code>ToNumber(A) === ToNumber(B)</code></code></td>
+ <td style="text-align: center;"><code><code>A == ToPrimitive(B)</code></code></td>
+ </tr>
+ <tr>
+ <th><code>Boolean</code></th>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>ToNumber(A) === B</code></code></td>
+ <td style="text-align: center;"><code><code>ToNumber(A) === ToNumber(B)</code></code></td>
+ <td style="text-align: center;"><code><code>A === B</code></code></td>
+ <td style="text-align: center;"><code><code>ToNumber(A) == ToPrimitive(B)</code></code></td>
+ </tr>
+ <tr>
+ <th><code>Object</code></th>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>false</code></code></td>
+ <td style="text-align: center;"><code><code>ToPrimitive(A) == B</code></code></td>
+ <td style="text-align: center;"><code><code>ToPrimitive(A) == B</code></code></td>
+ <td style="text-align: center;"><code><code>ToPrimitive(A) == ToNumber(B)</code></code></td>
+ <td style="text-align: center;"><code><code>A === B</code></code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>В таблице выше, ToNumber(A) пытается перед сравнением привести свой аргумент к числу. Такое поведение эквивалентно <code>+A</code> (унарный оператор <code>+</code>).  Если ToPrimitive(A) получает <em>объект</em> в качестве аргумента, то производятся попытки привести его к примитиву, вызывая на нем методы <code>A.toString</code> и <code>A.valueOf</code>.</p>
+
+<p><span id="result_box" lang="ru"><span class="hps">Традиционно</span><span> (</span><span class="hps">и в соответствии с</span> <span class="hps">ECMAScript</span><span>)</span>, <span class="hps">ни один из объектов</span> <span class="hps">не равен</span> </span><code>undefined</code> или <code>null</code>.  Но большинство браузеров позволяет определенному классу объектов<span id="result_box" lang="ru"><span class="hps"> (в частности,</span> <span class="hps">объектам</span> <code><span class="hps">document.all</span></code> <span class="hps">для любой страницы</span><span>) <em>эмулировать</em> значение </span></span><code>undefined.</code>  Оператор равенства вернёт значение true для <code>null == A</code> и <code>undefined == A</code>, тогда, и только тогда, когда объект эмулирует значение <code>undefined</code>. Во всех остальных случаях объект не может быть равен <code>undefined</code> или <code>null</code>.</p>
+
+<pre class="brush: js">var num = 0;
+var obj = new String("0");
+var str = "0";
+var b = false;
+
+console.log(num == num); // true
+console.log(obj == obj); // true
+console.log(str == str); // true
+
+console.log(num == obj); // true
+console.log(num == str); // true
+console.log(obj == str); // true
+console.log(null == undefined); // true
+
+// оба false, кроме очень редких случаев
+console.log(obj == null);
+console.log(obj == undefined);
+</pre>
+
+<p>Некоторые разработчики считают, что лучше всегда употреблять оператор <em>строго</em> равенства, вместо сравнения с приведением типов. Результат строгого равенства легче предугадать, да и сравнивая значения, без их приведения, можно получить выигрыш в скорости<code>.</code></p>
+
+<h2 id="Строгое_равенство_с_использованием">Строгое равенство с использованием <code>===</code></h2>
+
+<p>Строгое равно проверяет на равенство две величины, при этом тип каждой из величин перед сравнением не изменяется (не приводится). Если значения имеют различающиеся типы, то они не могут быть равными. С другой стороны все не числовые переменные, принадлежащие одному типу, считаются равными между собой, если содержат одинаковые величины. Ну и, наконец, числовые переменные считаются равными, если они имеют одинаковые значения, либо одна из них <code>+0</code>, а вторая <code>-0</code>. В то же время, если хотя бы одна из числовых переменных содержит значение <code>NaN</code>, выражение вернет <code>false</code>.</p>
+
+<pre class="brush: js">var num = 0;
+var obj = new String("0");
+var str = "0";
+var b = false;
+
+console.log(num === num); // true
+console.log(obj === obj); // true
+console.log(str === str); // true
+
+console.log(num === obj); // false
+console.log(num === str); // false
+console.log(obj === str); // false
+console.log(null === undefined); // false
+console.log(obj === null); // false
+console.log(obj === undefined); // false
+</pre>
+
+<p>Практически всегда для сравнения следует использовать оператор строгого равенства. Для всех значений, за исключением числовых используется очевидная семантика: величина равна только сама себе. Как было сказано выше для числовых типов можно выделить два особых случая. Во-первых, сравнение <code>+0</code> и <code>-0</code>. Знак для нуля введен для упрощения некоторых вычислений с плавающей запятой, однако, с точки зрения математики, разницы между <code>+0</code> и <code>-0</code> не существует, поэтому оператор строгого равенства считает их равными. Во-вторых, сравнение величин <code>NaN</code>. <code>NaN</code> (Not a number) представляет из себя значение не определенной величины, которое применяется для не четко определенных математических задач (например <code>+∞ + -∞</code>). Для оператора строго равенства <code>NaN</code> не равен ни одной из величин, в том числе и самому себе (единственный случай, когда <code>(x!==x)</code> вернет true).</p>
+
+<h2 id="Равенство_одинаковых_величин">Равенство одинаковых величин</h2>
+
+<p>Равенство одинаковых величин определяет <em>функциональную идентичность</em> во всех контекстах сравниваемых величин. (Данный способ сравнения основывается на <a href="https://ru.wikipedia.org/wiki/Принцип_подстановки_Барбары_Лисков" title="http://en.wikipedia.org/wiki/Liskov_substitution_principle">принципе подстановки Барбары Лисков</a>.) Рассмотрим пример попытки изменения неизменяемого (immutable) свойства<code>:</code></p>
+
+<pre class="brush: js">// Добавление неизменяемого свойства NEGATIVE_ZERO (отрицательный ноль) в конструктор Number.
+Object.defineProperty(Number, "NEGATIVE_ZERO",
+ { value: -0, writable: false, configurable: false, enumerable: false });
+
+function attemptMutation(v)
+{
+ Object.defineProperty(Number, "NEGATIVE_ZERO", { value: v });
+}
+</pre>
+
+<p>При попытке изменения неизменяемого свойства, вызов <code>Object.defineProperty выбросит</code> исключение, однако, если новое свойство равняется старому, изменений не произойдет и исключение не будет выброшено. Если <code>v</code> содержит <code>-0</code>, изменений не произойдет, а значит, код отработает без выброса исключений. Однако, если же <code>v</code> содержит <code>+0</code>, <code>Number.NEGATIVE_ZERO</code> утратит свою неизменяемую величину. Именно для сравнения нового и текущего неизменяемых свойств используется сравнение одинаковых величин, представленное методом <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a></code>.</p>
+
+<h2 id="Спецификации_для_равенства_строгого_равенства_и_равенства_одинаковых_величин">Спецификации для равенства, строгого равенства и равенства одинаковых величин</h2>
+
+<p>В стандарте ES5, сравнение выполняемое оператором <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">==</a> описывается в секции <a href="http://ecma-international.org/ecma-262/5.1/#sec-11.9.3" title="http://ecma-international.org/ecma-262/5.1/#sec-11.9.3">11.9.3, The Abstract Equality Algorithm</a>. Описание оператора <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">===</a> находится в секции <a href="http://ecma-international.org/ecma-262/5.1/#sec-11.9.6" title="http://ecma-international.org/ecma-262/5.1/#sec-11.9.6">11.9.6, The Strict Equality Algorithm</a>. В секции <a href="http://ecma-international.org/ecma-262/5.1/#sec-9.12" title="http://ecma-international.org/ecma-262/5.1/#sec-9.12">9.12, The SameValue Algorithm</a> ES5  описывает операцию сравнение одинаковых величин для внутреннего движка  JS. Строгое равенство и равенство одинаковых величин, практически одинаковы, за исключением обработки <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">числовых типов</a>. ES6 предлагает использовать алгоритм сравнения одинаковых величин через вызов <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a></code>.</p>
+
+<h2 id="Как_понимать_все_эти_способы_сравнения"><code>Как понимать все эти способы сравнения?</code></h2>
+
+<p>До выхода редакции ES6 считалось, что оператор строгого равенства просто "улучшенная" версия оператора нестрогого равенства. Например, некоторые считали, что == просто улучшенная версия === потому, что первый оператор делает всё то же, что и второй, плюс приведение типов своих операндов. То есть 6 == "6". (Или же наоборот: оператор нестрогого равенства базовый, а оператор строгого равенства просто его улучшенная версия, ведь он добавляет ещё одно условие - требует, чтобы оба операнда были одного и того же типа. Какой вариант ближе вам, зависит только от вашей точки зрения на вещи.)</p>
+
+<p>Но эти точки зрения уже нельзя применить к новому методу сравнения <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a> из новой редакции ES6. Нельзя сказать, что <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a> более или менее строг относительно существующих способов сравнения, или что это нечто среднее между ними. Ниже в таблице показаны основные различия операторов сравнения. <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a> интересен тем, что различает -0 и +0, а также умеет сравнивать два нечисла <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a>.</p>
+
+<table class="standard-table">
+ <caption><code>Сравнительная таблица операторов сравнения</code></caption>
+ <thead>
+ <tr>
+ <th scope="col" style="text-align: center;"><code>x</code></th>
+ <th scope="col" style="text-align: center;"><code>y</code></th>
+ <th scope="col" style="width: 10em; text-align: center;"><code><code>==</code></code></th>
+ <th scope="col" style="width: 10em; text-align: center;"><code><code>===</code></code></th>
+ <th scope="col" style="width: 10em; text-align: center;"><code><code>Object.is</code></code></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><code>undefined</code></code></td>
+ <td><code><code>undefined</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>null</code></code></td>
+ <td><code><code>null</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>true</code></code></td>
+ <td><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>false</code></code></td>
+ <td><code><code>false</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>"foo"</code></code></td>
+ <td><code><code>"foo"</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>{ foo: "bar" }</code></code></td>
+ <td><code><code>x</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>0</code></code></td>
+ <td><code><code>0</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>+0</code></code></td>
+ <td><code><code>-0</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>0</code></code></td>
+ <td><code><code>false</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>""</code></code></td>
+ <td><code><code>false</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>""</code></code></td>
+ <td><code><code>0</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>"0"</code></code></td>
+ <td><code><code>0</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>"17"</code></code></td>
+ <td><code><code>17</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>[1,2]</code></code></td>
+ <td><code><code>"1,2"</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>new String("foo")</code></code></td>
+ <td><code><code>"foo"</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>null</code></code></td>
+ <td><code><code>undefined</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>null</code></code></td>
+ <td><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>undefined</code></code></td>
+ <td><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>{ foo: "bar" }</code></code></td>
+ <td><code><code>{ foo: "bar" }</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>new String("foo")</code></code></td>
+ <td><code><code>new String("foo")</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>0</code></code></td>
+ <td><code><code>null</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>0</code></code></td>
+ <td><code><code>NaN</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>"foo"</code></code></td>
+ <td><code><code>NaN</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ </tr>
+ <tr>
+ <td><code><code>NaN</code></code></td>
+ <td><code><code>NaN</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(255, 144, 144); text-align: center;"><code><code>false</code></code></td>
+ <td style="background-color: rgb(144, 255, 144); text-align: center;"><code><code>true</code></code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Когда_же_использовать_Object.is"><code>Когда же использовать <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a> ?</code></code></h2>
+
+<p>Особенность обработки <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a></code> нулей будет полезна в метапрограммировании, когда необходимо присвоить противоположное значение свойству через дескриптор <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code>. Если ваши задачи этого не требуют, то лучше воздержаться от использования <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is">Object.is</a></code>, отдав предпочтение <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">===</a></code>. Даже если в коде необходимо сравнивать два <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a></code>, обычно проще всего использовать существующий метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/isNaN" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN">isNaN</a></code>, чтобы последующие вычисления не влияли на сравнение нулей с разными знаками.</p>
+
+<p>Вот примеры операторов и методов, которые могут сделать различия между  <code>-0</code> и <code>+0</code> более явными, что непременно отразиться в вашем коде:</p>
+
+<dl>
+ <dt><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#-_.28Unary_Negation.29" title="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators"><code>- (унарный минус)</code></a></code></dt>
+</dl>
+
+<dl>
+ <dd>
+ <p>Очевидно, что применение унарного минуса к нулю даст <code>-0</code>. Но, иногда, это происходит совершенно незаметно. К примеру:</p>
+
+ <pre class="brush: js">let stoppingForce = obj.mass * -obj.velocity</pre>
+
+ <p>Если значением <code>obj.velocity</code> будет <code>0</code>, то результатом выражения будет <code>-0</code>, что в итоге отразится в переменной <code>stoppingForce</code>.</p>
+ </dd>
+</dl>
+
+<dl>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/atan2"><code>Math.atan2</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil"><code>Math.ceil</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/pow" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow"><code>Math.pow</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/round" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round"><code>Math.round</code></a></code></dt>
+</dl>
+
+<dl>
+ <dd>Есть вероятность, что данные методы могут возвратить <code>-0</code>, даже если его не передавали явно одним из параметров. Например, если методом <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/pow" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/pow">Math.pow</a></code> возвести <code>-<a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Infinity" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity">Infinity</a></code> в любую отрицательную степень. Ознакомьтесь с подробным описанием данных методов.</dd>
+</dl>
+
+<dl>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/floor" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor"><code>Math.floor</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/max" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max"><code>Math.max</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/min" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min"><code>Math.min</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/sin" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin"><code>Math.sin</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sqrt"><code>Math.sqrt</code></a></code></dt>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Math/tan" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/tan"><code>Math.tan</code></a></code></dt>
+</dl>
+
+<dl>
+ <dd>В некоторых случаях можно получить результат, равный <code>-0</code>, если вышеперечисленным методам одним из параметров передать <code>-0</code>. Например, <code>Math.min(-0, +0)</code> вернёт <code>-0</code>. Ознакомьтесь с подробным описанием данных методов.</dd>
+</dl>
+
+<dl>
+ <dt><code><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">~</a></code></code></dt>
+ <dt><code><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">&lt;&lt;</a></code></code></dt>
+ <dt><code><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators" title="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">&gt;&gt;</a></code></code></dt>
+ <dd>Каждый из этих операторов использует внутренний алгоритм <code>ToInt32</code>. В нём нет места для отрицательного нуля, потому значение <code>-0</code> не переживёт подобной операции. То есть и <code>Object.is(~~(-0), -0)</code>, и <code>Object.is(-0 &lt;&lt; 2 &gt;&gt; 2, -0)</code> возвратят <code>false</code>.</dd>
+</dl>
+
+<p>Из вышеперечисленного ясно, что использование <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is"><code>Object.is</code></a> иногда может быть проблемным. Естественно, если вам необходимо чётко различать <code>-0</code> и <code>+0</code>, то этот метод именно то, что нужно.</p>
+
+<h2 id="Смотрите_также"><code>Смотрите также</code></h2>
+
+<ul>
+ <li><code><a href="http://dorey.github.io/JavaScript-Equality-Table/">Таблица сравнений Javascript</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/eventloop/index.html b/files/ru/web/javascript/eventloop/index.html
new file mode 100644
index 0000000000..c0becda6c8
--- /dev/null
+++ b/files/ru/web/javascript/eventloop/index.html
@@ -0,0 +1,111 @@
+---
+title: Параллельная модель и цикл событий.
+slug: Web/JavaScript/EventLoop
+tags:
+ - Руководство
+translation_of: Web/JavaScript/EventLoop
+---
+<p>{{JsSidebar("Advanced")}}</p>
+
+<p>Параллелизм/Многопоточность в JavaScript работает за счёт цикла событий (<strong>event loop</strong>), который отвечает за выполнение кода, сбора и обработки событий и выполнения под-задач из очереди (<strong>queued sub-tasks</strong>). Эта модель весьма отличается от других языков программирования, таких как C и Java.</p>
+
+<h2 id="Концепция_жизненного_цикла">Концепция жизненного цикла</h2>
+
+<p>В следующей секции объясняется теоретическая модель. Современные JavaScript движки внедряют/имплементируют и существенно оптимизируют этот процесс.</p>
+
+<h3 id="Визуальное_представление">Визуальное представление</h3>
+
+<p style="text-align: center;"><img alt="Stack, heap, queue" src="/files/4617/default.svg" style="height: 270px; width: 294px;"></p>
+
+<p style="text-align: center;">Для лучшего <strong>визуального</strong> представления работы <strong>Event loop</strong>, Вы можете ознакомиться с данным видео: <a href="https://www.youtube.com/watch?v=8aGhZQkoFbQ&amp;t=389s">https://www.youtube.com/watch?v=8aGhZQkoFbQ&amp;t=389s</a></p>
+
+<h3 id="Стек">Стек</h3>
+
+<p>Вызов любой функции создает контекст выполнения (<a href="https://wiki.developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide/In_depth#JavaScript_execution_contexts">Execution Context</a>). При вызове вложенной функции создается новый контекст, а старый сохраняется в специальной структуре данных - стеке вызовов (Call Stack).</p>
+
+<pre class="brush: js">function f(b) {
+ var a = 12;
+ return a + b + 35;
+}
+
+function g(x) {
+ var m = 4;
+ return f(m * x);
+}
+
+g(21);
+</pre>
+
+<p>Когда вызывается функция <code>g</code>,  создаётся первый контекст выполнения, содержащий аргументы функции <code>g</code> и локальные переменные. Когда <code>g</code> вызывает <code>f</code>, создаётся второй контекст с аргументами <code>f</code> и её локальными переменными.  И этот контекст выполнения <code>f</code> помещается в стек вызовов выше первого. Когда <code>f</code> возвращает результат, верхний элемент из стека удаляется. Когда <code>g</code> возвращает результат, ее контекст также удалится, и стек становится пустым.</p>
+
+<h3 id="Куча">Куча</h3>
+
+<p>Объекты размещаются в <a href="https://ru.wikipedia.org/wiki/%D0%9A%D1%83%D1%87%D0%B0_(%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C)">куче</a>. Куча — это просто имя для обозначения большой неструктурированной области памяти.</p>
+
+<h3 id="Очередь">Очередь</h3>
+
+<p>Среда выполнения JavaScript содержит очередь задач. Эта очередь — список задач, подлежащих обработке. Каждая задача ассоциируется с некоторой функцией, которая будет вызвана, чтобы обработать эту задачу.</p>
+
+<p>Когда стек полностью освобождается, самая первая задача извлекается из очереди и обрабатывается. Обработка задачи состоит в вызове  ассоциированной с ней функции с параметрами, записанными в этой задаче. Как обычно, вызов функции создаёт новый контекст выполнения и заносится в стек вызовов.</p>
+
+<p>Обработка задачи заканчивается, когда стек снова становится пустым. Следующая задача извлекается из очереди и начинается её обработка.</p>
+
+<h2 id="Цикл_событий">Цикл событий</h2>
+
+<p>Модель событийного цикла (<code>event loop</code>) называется так потому, что отслеживает новые события в цикле:</p>
+
+<pre class="brush: js">while(queue.waitForMessage()){
+ queue.processNextMessage();
+}</pre>
+
+<p><code>queue.waitForMessage</code> ожидает поступления задач, если очередь пуста.</p>
+
+<h3 id="Запуск_до_завершения">Запуск до завершения</h3>
+
+<p>Каждая задача выполняется полностью, прежде чем начнет обрабатываться следующая. Благодаря этому мы точно знаем: когда выполняется текущая функция – она не может быть приостановлена и будет целиком завершена до начала выполнения другого кода (который может изменить данные, с которыми работает текущая функция). Это отличает JavaScript от такого языка программирования как C. Поскольку в С функция, запущенная в отдельном потоке, в любой момент может быть остановлена, чтобы выполнить какой-то другой код в другом потоке.</p>
+
+<p>У данного подхода есть и минусы. Если задача занимает слишком много времени, то веб-приложение не может обрабатывать действия пользователя в это время (например, скролл или клик). Браузер старается смягчить проблему и выводит сообщение <em>"скрипт выполняется слишком долго" ("a script is taking too long to run")</em> и предлагает остановить его. Хорошей практикой является создание задач, которые исполняются быстро, и если возможно, разбиение одной задачи на несколько мелких.</p>
+
+<h3 id="Добавление_событий_в_очередь">Добавление событий в очередь</h3>
+
+<p>В браузерах события добавляются в очередь в любое время, если событие произошло, а так же если у него есть обработчик. В случае, если обработчика нет – событие потеряно. Так, клик по элементу, имеющему обработчик события по событию <code>click </code>, добавит событие в очередь, а если обработчика нет – то и событие в очередь не попадет.</p>
+
+<p>Вызов <a href="/ru/docs/Web/API/WindowTimers/setTimeout" title="/en-US/docs/window.setTimeout">setTimeout</a> добавит событие в очередь по прошествии времени, указанного во втором аргументе вызова. Если очередь событий на тот момент будет пуста, то событие обработается сразу же, в противном случае событию функции <code>setTimeout</code> придется ожидать завершения обработки остальных событий в очереди. Именно поэтому второй аргумент <code>setTimeout</code> корректно считать не временем, через которое выполнится функция из первого аргумента, а минимальное время, через которое она сможет выполниться.</p>
+
+<h3 id="Нулевые_задержки">Нулевые задержки</h3>
+
+<p>Нулевая задержка не дает гарантии, что обработчик выполнится через ноль миллисекунд. Вызов {{domxref("WindowTimers.setTimeout", "setTimeout")}} с аргументом  0 (ноль) не завершится за указанное время. Выполнение зависит от количества ожидающих задач в очереди. Например, сообщение ''this is just a message'' из примера ниже будет выведено на консоль раньше, чем произойдет выполнение обработчика <em>сb1</em>. Это произойдет, потому что задержка – это минимальное время, которое требуется среде выполнения на обработку запроса.</p>
+
+<pre class="brush: js">(function () {
+
+ console.log('this is the start');
+
+ setTimeout(function cb() {
+ console.log('this is a msg from call back');
+ });
+
+ console.log('this is just a message');
+
+ setTimeout(function cb1() {
+ console.log('this is a msg from call back1');
+ }, 0);
+
+ console.log('this is the end');
+
+})();
+
+// "this is the start"
+// "this is just a message"
+// "this is the end"
+// "this is a msg from call back"
+// "this is a msg from call back1"</pre>
+
+<h3 id="Связь_нескольких_потоков_между_собой">Связь нескольких потоков между собой</h3>
+
+<p>Web Worker или кросс-доменный фрейм имеют свой собственный стек, кучу и очередь событий. Два отдельных событийных потока могут связываться друг с другом, только через отправку сообщений с помощью метода <code><a href="/en-US/docs/DOM/window.postMessage" title="/en-US/docs/DOM/window.postMessage">postMessage</a>. </code>Этот метод добавляет <code style="font-style: normal;">сообщение</code>  в очередь другого, если он конечно принимает их.</p>
+
+<h2 id="Никогда_не_блокируется">Никогда не блокируется</h2>
+
+<p>Очень интересное свойство цикла событий в JavaScript, что в отличие от множества других языков, поток выполнения никогда не блокируется. Обработка I/O обычно осуществляется с помощью событий и функций обратного вызова, поэтому даже когда приложение ожидает запрос от <a href="/ru/docs/IndexedDB" title="/en-US/docs/IndexedDB">IndexedDB</a> или ответ от <a href="/ru/docs/Web/API/XMLHttpRequest" title="/en-US/docs/DOM/XMLHttpRequest">XHR</a>, оно может обрабатывать другие процессы, например пользовательский ввод.</p>
+
+<p>Существуют хорошо известные исключения как <code style="font-style: normal;">alert</code> или синхронный XHR, но считается хорошей практикой избегать их использования.</p>
diff --git a/files/ru/web/javascript/guide/about/index.html b/files/ru/web/javascript/guide/about/index.html
new file mode 100644
index 0000000000..0f9c90fcc8
--- /dev/null
+++ b/files/ru/web/javascript/guide/about/index.html
@@ -0,0 +1,158 @@
+---
+title: Об этом учебнике
+slug: Web/JavaScript/Guide/About
+translation_of: Web/JavaScript/Guide/Introduction
+---
+<p>JavaScript это кросс-платформенный, объектно-ориентированный интерпретируемый язык программирования. В этом учебнике описано все, что вам нужно знать для того, чтобы начать ипользовать JavaScript.</p>
+
+<h2 id="Особенности_разных_версий_JavaScript">Особенности разных версий JavaScript</h2>
+
+<p> </p>
+
+<ul>
+ <li><a class="new" href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.2" rel="nofollow">/ru/docs/Web/JavaScript/New_in_JavaScript/1.2</a></li>
+ <li><a class="new" href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.3" rel="nofollow">/ru/docs/Web/JavaScript/New_in_JavaScript/1.3</a></li>
+ <li><a class="new" href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.4" rel="nofollow">/ru/docs/Web/JavaScript/New_in_JavaScript/1.4</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.5">Новое в JavaScript 1.5</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.6">Новое в JavaScript 1.6</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">Новое в JavaScript 1.7</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8">New in JavaScript 1.8</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8.1">Новое в JavaScript 1.8.1</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8.5">Новое в JavaScript 1.8.5</a></li>
+</ul>
+
+<p> </p>
+
+<h2 id="Что_вы_уже_должны_знать">Что вы уже должны знать</h2>
+
+<p>Этот учебник предполагает, что у вас уже имеются некоторые знания и опыт:</p>
+
+<p>Общее понимание, что такое Интернет и всемирная сеть WWW. Знание языка разметки гипертекста (<a href="/en/HTML" title="en/HTML">HTML</a>) также привествуется.</p>
+
+<p>Некоторый опыт программирования на C или Visual Basic будет полезен, но не является обязательным.</p>
+
+<h2 id="Версии_JavaScript">Версии JavaScript</h2>
+
+<table class="standard-table">
+ <caption>Таблица 1. Версии JavaScript и Navigator</caption>
+ <thead>
+ <tr>
+ <th scope="col">Версия JavaScript</th>
+ <th scope="col">Версия Navigator</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>JavaScript 1.0</td>
+ <td>Navigator 2.0</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.1</td>
+ <td>Navigator 3.0</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.2</td>
+ <td>Navigator 4.0-4.05</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.3</td>
+ <td>Navigator 4.06-4.7x</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.4</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.5</td>
+ <td>Navigator 6.0<br>
+ Mozilla (браузер с открытым исходным кодом)</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.6</td>
+ <td><a href="/en/Firefox_1.5_for_developers" title="en/Firefox_1.5_for_developers">Firefox 1.5</a>, другие, основанные на Mozilla 1.8 продукты</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.7</td>
+ <td><a href="/en/Firefox_2_for_developers" title="en/Firefox_2_for_developers">Firefox 2</a>, другие, основанные на Mozilla 1.8.1 продукты</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.8</td>
+ <td><a href="/en/Firefox_3_for_developers" title="en/Firefox_3_for_developers">Firefox 3</a>, другие, основанные на Mozilla 1.9 продукты</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Каждая версия Netscape Enterprise Server также поддерживает разные версии JavaScript. Чтобы помочь вам писать скрипты совместимые с разными версиями Enterprise Server, это руководство пользуется аббревиатурой, которая однозначно идентифицирует версию сервера, в которой реализована каждая функциональность.</p>
+
+<p><br>
+ <strong style="font-style: inherit; font-weight: 700; line-height: 1.5;"> Таблица 2. Аббревиатуры версий Netscape Enterprise Server</strong></p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Abbreviation</th>
+ <th scope="col">Enterprise Server version</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>NES 2.0</td>
+ <td>Netscape Enterprise Server 2.0</td>
+ </tr>
+ <tr>
+ <td>NES 3.0</td>
+ <td>Netscape Enterprise Server 3.0</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Где_найти_информацию_по_JavaScript">Где найти информацию по JavaScript</h2>
+
+<p>Документация JavaScript включает в себя следующие материалы:</p>
+
+<ul>
+ <li><a href="/ru/JavaScript/Guide" title="en/Core_JavaScript_1.5_Guide">Учебник JavaScript</a> (тот учебник, который вы сейчас читаете) содержит информацию о языке JavaScript и его объектах.</li>
+ <li><a href="/en/JavaScript/Reference" title="en/JavaScript/Reference">JavaScript Reference</a> содержит справочный материал по языку JavaScript.</li>
+</ul>
+
+<p>Если вы новичок в JavaScript, то начните с <a href="/en/JavaScript/Guide" title="en/Core_JavaScript_1.5_Guide">Учебника </a><a href="/en/JavaScript/Guide" title="en/Core_JavaScript_1.5_Guide">JavaScript</a>. Как только вы усвоили фундаментальные основы, вы можете начать пользоваться <a href="/en/JavaScript/Reference" title="en/JavaScript/Reference">Справочником JavaScript</a>, чтобы получить больше информации об определенных объектах, выражениях и операторах.</p>
+
+<h2 id="Советы_изучающим_JavaScript">Советы изучающим JavaScript</h2>
+
+<p>Начать изучать JavaScript очень легко: все что вам нужно - это современный веб браузер. Этот учебник включает описание некоторых особенностей JavaScript, которые доступны только в самых последних версиях Firefox (и других браузерах основанных на движке Gecko), так что лучше всего воспользоваться самой последней версией Firefox.</p>
+
+<h3 id="Интерактивный_интерпретатор.">Интерактивный интерпретатор.</h3>
+
+<p>Интерактивная строка ввода JavaScript окажет бесценную услугу в изучении языка, так как позволит пробовать все вещи сразу же, вам не потребуется сохранять изменения в файле и обновлять страницу каждый раз. Консоль ошибок Firefox, доступна через меню Инструменты, предлагает простой способ попробовать выполнить JavaScript выражения: просто введите строку с кодом и нажмите кнопку "Evaluate".</p>
+
+<p><img alt="Image:ErrorConsole.png" class="internal" src="/@api/deki/files/192/=ErrorConsole.png"></p>
+
+<h3 id="Firebug">Firebug</h3>
+
+<p>Более продвинутое средство доступно в <a class="external" href="http://www.getfirebug.com/">Firebug</a>. Firebug это расширение Firefox. Хотя в последних версиях Firefox средства отладки становятся более совершенными и такой нужды Firebug уже нет. Выражения которые вы вводите интерпретируются как объекты и связываются c другими частями в Firebug. Например, вы можете сложить 5 плюс 5, заменить буквы в строке со строчных на прописные, получить кликабельную ссылку на документ, или получить ссылку на элемент в документе:</p>
+
+<p><img alt="" class="internal" src="/@api/deki/files/5188/=FirebugCommandLine.PNG" style="height: 281px; width: 728px;"></p>
+
+<p>Нажав на кнопке со стрелкой в нижнем правом углу вы можете открыть многострочный редактор скриптов.</p>
+
+<p>Firebug также имеет в составе продвинутый инспектор DOM, дебаггер JavaScript, инструменты профилирования и многие другие полезные утилиты. JavaScript код выполняемый на веб странице может вызвать функцию <code>console.log()</code>, которая выведет свой аргумент на консоль Firebug.</p>
+
+<p>Множество примеров в этом учебнике используют функцию <code>alert()</code>, чтобы вывести сообщение во время выполнения скрипта.</p>
+
+<h2 id="Принятые_соглашения_в_документе">Принятые соглашения в документе</h2>
+
+<p>JavaScript приложения выполняются на разных операционных системах; информация в этом учебнике актуальна в любом случае. Пути к директориям или файлам даны в формате Windows (обратный слеш как разделитель). Для версии Юникс, пути точно такие же, за исключением того, что используеся обычный слеш вместо обратного, а также соотвественно корневая директория начинается с '/' а не 'c:/' как это в Windows.</p>
+
+<p>Этот учебник использует единый локатор ресурсов (URL-ы) следующей формы:</p>
+
+<p><code>http://<em>server</em>.<em>domain</em>/<em>path</em>/<em>file</em>.html</code></p>
+
+<p>В этих URL-ах, <em>server</em> - это имя сервера на котором запущено ваше приложение, например <code>research1</code> или <code>www</code>; <em>domain</em> - это имя Internet домена, например <code>netscape.com</code> или <code>uiuc.edu</code>; <em>path</em> - структура директорий на сервере; и <em>file</em><code>.html</code> - имя файла, который расположен на вашем сервере. В общем, элементы выделенные курсивом в URL-ах это метки-заполнители, а элементы выделенные нормальным моноширинным шрифтом точные неизменные значения (например, конфиругацию сервера вы можете изменить, как и сменить доменное имя, структура каталогов может поменяться, а вот протокол всегда один, и расширение файла для  вебстраниц тоже постоянно). Если ваш вебсервер поддерживает Secure Sockets Layer (SSL), то вы можете пользоваться  <code>https</code> вместо <code>http</code> в URL.</p>
+
+<p>Этот учебник пользуется следующим соглашением об использовании шрифтов:</p>
+
+<ul>
+ <li><code>Моноширинный шрифт </code>используется для примеров кода и их вывода, API и элементов языка (например, имена методов или имена свойств), имена файлов, имена директорий, путей, тегов HTML, и любого другого текста, который должен быть выведен на экран. (<code><em>Моноширинный курсивный шрифт</em></code> использован для меток-заменителей встроенных в код.)</li>
+ <li><em>Курсивное начертание </em>использовано для оглавлений, особого выделения, переменных и меток-заменителей, и слов использованых в буквальном смысле.</li>
+ <li><strong>Жирное начертание </strong>использовано для терминов из глоссария.</li>
+</ul>
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
new file mode 100644
index 0000000000..a7b952b323
--- /dev/null
+++ b/files/ru/web/javascript/guide/control_flow_and_error_handling/index.html
@@ -0,0 +1,371 @@
+---
+title: Порядок выполнения и обработка ошибок
+slug: Web/JavaScript/Guide/Control_flow_and_error_handling
+tags:
+ - Guide
+ - JavaScript
+translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}</p>
+
+<div class="summary">
+<p>JavaScript поддерживает компактный набор инструкций, особенно управляющих инструкций, которые вы можете использовать, чтобы реализовать интерактивность в вашем приложении. В данной главе дается обзор этих инструкций.</p>
+</div>
+
+<p>Более подробная информация об инструкциях, рассмотренных в данной главе, содержится в <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements">справочнике по JavaScript</a>. Точка с запятой ( <code>;</code> ) используется для разделения инструкций в коде.</p>
+
+<p>Любое выражение (expression) в JavaScript является также инструкцией (statement). Чтобы получить более подробную информацию о выражениях, прочитайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators">Выражения и операторы</a>.</p>
+
+<h2 id="Инструкция_block">Инструкция block</h2>
+
+<p>Инструкция block является фундаментальной и используется для группировки других инструкций. Блок ограничивается фигурными скобками:</p>
+
+<pre style="font-size: 14px; white-space: normal;">{ statement_1; statement_2; ... statement_n; }</pre>
+
+<p>Блок обычно используется с управляющими инструкциями (например, <code>if</code>, <code>for</code>, <code>while</code>).</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">while</span> <span class="punctuation token" style="color: #999999;">(</span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">&lt;</span> <span class="number token" style="color: #990055;">10</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{ </span>x<span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">++</span><span class="punctuation token" style="color: #999999;">;</span><span class="punctuation token"> </span><span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<p>В вышеприведенном примере <code>{ x++; }</code> является блоком.</p>
+
+<p><strong>Обратите внимание:</strong> в JavaScript <strong>отсутствует</strong> область видимости блока до ECMAScript2015. Переменные, объявленные внутри блока, имеют область видимости функции (или скрипта), в которой находится данный блок, вследствие чего они сохранят свои значения при выходе за пределы блока. Другими словами, блок не создает новую область видимости. "Автономные" (standalone) блоки в JavaScript могут продуцировать полностью отличающийся результат, от результата в языках C или Java. Например:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">1</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">{
+  </span><span class="keyword token" style="color: #0077aa;">var</span> x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">2</span><span class="punctuation token" style="color: #999999;">;
+</span><span class="punctuation token" style="color: #999999;">}</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>x<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // выведет 2</span></code></pre>
+
+<p>В вышеприведенном примере инструкция <code>var x</code> внутри блока находится в той же области видимости, что и инструкция <code>var x</code> перед блоком. В C или Java эквивалентный код выведет значение 1.</p>
+
+<p>Начиная с ECMAScript 6, оператор <code>let</code> позволяет объявить переменную в области видимости блока. Чтобы получить более подробную информацию, прочитайте {{jsxref("Statements/let", "let")}}.</p>
+
+<h2 id="Условные_инструкции">Условные инструкции</h2>
+
+<p>Условная инструкция — это набор команд, которые выполняются, если указанное условие является истинным. JavaScript поддерживает две условные инструкции: <code style="font-style: normal;">if...else</code> и <code style="font-style: normal;">switch</code>.</p>
+
+<h3 id="Инструкция_if...else">Инструкция if...else</h3>
+
+<p>Используйте оператор <code>if</code> для выполнения инструкции, если логическое условия истинно. Используйте опциональный <code>else</code>, для выполнения инструкции, если условие ложно. Оператор if выглядит так:</p>
+
+<pre class="brush: js notranslate">if (condition) {
+ statement_1;
+} else {
+ statement_2;
+}</pre>
+
+<p>  Здесь <code>condition</code> может быть любым выражением, вычисляемым как истинное (true) или ложное (false). Чтобы получить более подробную информацию о значениях <code>true </code>и <code>false</code>, прочитайте <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean#Description">Boolean</a>. Если условие оценивается как<code> true</code>, то выполняется <code>statement_1</code>, в противном случае -<code> statement_2</code>. Блоки <code>statement_1 </code>и<code> statement_2</code> могут быть любыми блоками, включая также вложенные инструкции <code>if</code>.</p>
+
+<p>Также вы можете объединить несколько инструкций, пользуясь <code>else if</code> для получения последовательности проверок условий:</p>
+
+<pre class="syntaxbox notranslate">if (condition_1) { statement_1;} else if (condition_2) { statement_2;} else if (condition_n) { statement_n; } else { statement_last;}</pre>
+
+<p>В случае нескольких условий только первое логическое условие, которое вычислится истинным (true), будет выполнено. Используйте блок ( <code>{ ... }</code> ) для группировки нескольких инструкций. Применение блоков является хорошей практикой, особенно когда используются вложенные инструкции <code>if</code>:</p>
+
+<pre style="font-size: 14px; white-space: normal;">if (condition) {
+  statement_1_runs_if_condition_is_true;
+  statement_2_runs_if_condition_is_true;
+} else {
+  statement_3_runs_if_condition_is_false;
+  statement_4_runs_if_condition_is_false;
+}</pre>
+
+<p>Нежелательно использовать простые присваивания в условном выражении, т.к. присваивание может быть спутано с равенством при быстром просмотре кода. Например, не используйте следующий код:</p>
+
+<pre class="brush: js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> y<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span><span class="punctuation token"> </span><span class="comment token" style="color: #708090;">/* ... */</span><span class="comment token"> </span><span class="punctuation token" style="color: #999999;">}</span>
+</code></pre>
+
+<p>Если вам нужно использовать присваивание в условном выражении, то распространенной практикой является заключение операции присваивания в дополнительные скобки. Например:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">( </span><span class="punctuation token" style="color: #999999;">(</span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> y<span class="punctuation token" style="color: #999999;">) </span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span><span class="punctuation token"> </span><span class="comment token" style="color: #708090;">/* ... */</span><span class="comment token"> </span><span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<h4 id="Ложные_значения">Ложные значения</h4>
+
+<p>Следующие значения являются {{Glossary("Falsy", "ложными")}}:</p>
+
+<ul>
+ <li><code>false</code></li>
+ <li><code>undefined</code></li>
+ <li><code>null</code></li>
+ <li><code>0</code></li>
+ <li><code>NaN</code></li>
+ <li>пустая строка ( <code>""</code> )</li>
+</ul>
+
+<p>Все остальные значения, включая все объекты, будут восприняты как истина при передаче в условное выражение.</p>
+
+<p>Не путайте примитивные логические значения <code>true</code> и <code>false</code> со значениями true и false объекта {{jsxref("Boolean")}}. Например:</p>
+
+<pre class="brush: js notranslate">var b = new Boolean(false);
+if (b) // это условие true
+if (b == true) // это условие false
+</pre>
+
+<p>В следующем примере функция <code>checkData</code> возвращает <code>true</code>, если число символов в объекте <code>Text</code> равно трем; в противном случае функция отображает окно alert и возвращает <code>false</code>.</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">checkData<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span>document<span class="punctuation token" style="color: #999999;">.</span>form1<span class="punctuation token" style="color: #999999;">.</span>threeChar<span class="punctuation token" style="color: #999999;">.</span>value<span class="punctuation token" style="color: #999999;">.</span>length <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">==</span> <span class="number token" style="color: #990055;">3</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">true</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">else</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">alert<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Enter exactly three characters. "</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span>
+ document<span class="punctuation token" style="color: #999999;">.</span>form1<span class="punctuation token" style="color: #999999;">.</span>threeChar<span class="punctuation token" style="color: #999999;">.</span>value <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">" is not valid."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">false</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span>
+<span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<h3 id="Инструкция_switch">Инструкция switch</h3>
+
+<p>Инструкция <code>switch</code> позволяет сравнить значение выражения с различными вариантами и при совпадении выполнить соответствующий код. Инструкция имеет следующий вид:</p>
+
+<pre class="notranslate">switch (expression) {
+ case label_1:
+ statements_1
+ [break;]
+ case label_2:
+ statements_2
+ [break;]
+ ...
+ default:
+ statements_default
+ [break;]
+}
+</pre>
+
+<p>Сначала производится поиск ветви <code>case</code> с меткой <code>label</code>, совпадающей со значением выражения <code>expression</code>. Если совпадение найдено, то соответствующий данной ветви код выполняется до оператора <code>break</code>, который прекращает выполнение <code>switch</code> и передает управление дальше. В противном случае управление передается необязательной ветви <code>default</code> и выполняется соответствующий ей код. Если ветвь <code>default</code> не найдена, то программа продолжит выполняться со строчки, следующей за инструкцией <code>switch</code>. По соглашению ветвь <code>default</code> является последней ветвью, но следовать этому соглашению необязательно.</p>
+
+<p>Если оператор <code>break</code> отсутствует, то после выполнения кода, который соответствует выбранной ветви, начнется выполнение кода, который следует за ней.</p>
+
+<p>В следующем примере если <code>fruittype</code> имеет значение <code>"Bananas"</code>, то будет выведено сообщение<code> "Bananas are $0.48 a pound."</code> и оператор <code>break</code> прекратит выполнение <code>switch</code>. Если бы оператор <code>break</code> отсутствовал, то был бы также выполнен код, соответствующий ветви <code>"Cherries"</code>, т.е. выведено сообщение <code>"Cherries are $3.00 a pound."</code>.</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">switch</span> <span class="punctuation token" style="color: #999999;">(</span>fruittype<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Oranges"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Oranges are $0.59 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Apples"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Apples are $0.32 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Bananas"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Bananas are $0.48 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Cherries"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Cherries are $3.00 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Mangoes"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Mangoes are $0.56 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">case</span> <span class="string token" style="color: #669900;">"Papayas"</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Mangoes and papayas are $2.79 a pound."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">break</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">default</span><span class="punctuation token" style="color: #999999;">:</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Sorry, we are out of "</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> fruittype <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">"."</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Is there anything else you'd like?"</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<h2 id="Инструкции_обработки_исключений">Инструкции обработки исключений</h2>
+
+<p>Инструкция <code>throw</code> используется, чтобы выбросить исключение, а инструкция <code>try...catch</code>, чтобы его обработать.</p>
+
+<h3 id="Типы_исключений">Типы исключений</h3>
+
+<p>Практически любой объект может быть выброшен как исключение. Тем не менее, не все выброшенные объекты создаются равными. Обычно числа или строки выбрасываются как исключения, но часто более эффективным является использование одного из типов исключений, специально созданных для этой цели:</p>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types">Исключения ECMAScript</a></li>
+ <li>{{domxref("DOMException")}} и {{domxref("DOMError")}}</li>
+</ul>
+
+<h3 id="Инструкция_throw">Инструкция throw</h3>
+
+<p>Используйте инструкцию <code>throw</code>, чтобы выбросить исключение. При выбросе исключения нужно указать выражение, содержащее значение, которое будет выброшено:</p>
+
+<pre style="font-size: 14px; white-space: normal;">throw expression;</pre>
+
+<p>Вы можете выбросить любое выражение, а не только выражения определенного типа. В следующем примере выбрасываются исключения различных типов:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">throw</span> <span class="string token" style="color: #669900;">"Error2"</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // string
+</span><span class="keyword token" style="color: #0077aa;">throw</span> <span class="number token" style="color: #990055;">42</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // number
+</span><span class="keyword token" style="color: #0077aa;">throw</span> <span class="keyword token" style="color: #0077aa;">true</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // boolean
+</span><span class="keyword token" style="color: #0077aa;">throw</span> <span class="punctuation token" style="color: #999999;">{ </span>toString<span class="punctuation token" style="color: #999999;">:</span> <span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span> <span class="keyword token" style="color: #0077aa;">return</span> <span class="string token" style="color: #669900;">"I'm an object!"</span><span class="punctuation token" style="color: #999999;">;</span> <span class="punctuation token" style="color: #999999;">}</span> <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// object</span></code></pre>
+
+<div class="note"><strong>Примечание:</strong> Вы можете выбросить объект как исключение. Вы можете обращаться к свойствам данного объекта в блоке <code>catch</code>.</div>
+
+<p class="note">В следующем примере объект <code>UserException</code> выбрасывается как исключение:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> UserException <span class="punctuation token" style="color: #999999;">(</span>message<span class="punctuation token" style="color: #999999;">) </span><span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>message <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">= </span>message<span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>name <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">= </span><span class="string token" style="color: #669900;">"UserException"</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+<span class="comment token" style="color: #708090;">
+</span>UserException<span class="punctuation token" style="color: #999999;">.</span>prototype<span class="punctuation token" style="color: #999999;">.</span>toString <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">function</span> <span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>name <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">': "'</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="keyword token" style="color: #0077aa;">this</span><span class="punctuation token" style="color: #999999;">.</span>message <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">'"'</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+<span class="comment token" style="color: #708090;">
+</span><span class="keyword token" style="color: #0077aa;">throw</span> <span class="keyword token" style="color: #0077aa;">new</span> <span class="class-name token">UserException</span><span class="punctuation token" style="color: #999999;">(</span><span class="string token" style="color: #669900;">"Value too high"</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<h3 id="Инструкция_try...catch">Инструкция try...catch</h3>
+
+<p>Инструкция <code>try...catch</code> состоит из блока <code>try</code>, который содержит одну или несколько инструкций, и блок <code>catch</code>, которые содержит инструкции, определяющие порядок действий при выбросе исключения в блоке <code>try</code>. Иными словами, если в блоке <code>try</code> будет выброшено исключение, то управление будет передано в блок <code>catch</code>. Если в блоке <code>try</code> не возникнет исключений, то блок <code>catch</code> будет пропущен. Блок <code>finally</code> будет выполнен после окончания работы блоков <code>try</code> и <code>catch</code>, вне зависимости от того, было ли выброшено исключение.</p>
+
+<p>В следующем примере вызывается функция <code>getMonthName</code>, которая возвращает название месяца по его номеру. Если месяца с указанным номером не существует, то функция выбросит исключение <code>"InvalidMonthNo"</code>, которое будет перехвачено в блоке <code>catch</code>:</p>
+
+<pre class="brush: js notranslate">function getMonthName(mo) {
+ mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec)
+ var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul",
+ "Aug","Sep","Oct","Nov","Dec"];
+ if (months[mo]) {
+ return months[mo];
+ } else {
+ throw "InvalidMonthNo"; //throw keyword is used here
+ }
+}
+
+try { // statements to try
+ monthName = getMonthName(myMonth); // function could throw exception
+}
+catch (e) {
+ monthName = "unknown";
+ logMyErrors(e); // pass exception object to error handler -&gt; your own
+}
+
+</pre>
+
+<h4 id="The_catch_Block" name="The_catch_Block">Блок <code>catch</code></h4>
+
+<p>Используйте блок <code>catch</code>, чтобы обработать исключения, сгенерированные в блоке <code>try</code>.</p>
+
+<pre style="font-size: 14px; white-space: normal;">catch (catchID) { statements }</pre>
+
+<p>JavaScript создает идентификатор <code>catchID</code>, которому присваивается перехваченное исключение, при входе в блок <code>catch</code>; данный идентификатор доступен только в пределах блока <code>catch</code> и уничтожается при выходе из него.</p>
+
+<p>В следующем примере выбрасывается исключение, которое перехватывается в блоке <code>catch</code>:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">throw</span> <span class="string token" style="color: #669900;">"myException"</span><span class="comment token" style="color: #708090;">
+</span><span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token"> </span><span class="keyword token" style="color: #0077aa;">catch</span> <span class="punctuation token" style="color: #999999;">(</span><span class="class-name token">e</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{
+  </span></code><code class="language-js" style="direction: ltr; white-space: pre;">console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">error<span class="punctuation token" style="color: #999999;">(</span></span>e<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">
+</span><span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<h4 id="Блок_finally">Блок <code>finally</code></h4>
+
+<p>Блок <code>finally</code> содержит код, который будет выполнен после окончания работы блоков <code>try</code> и <code>catch</code>, но до того, как будет выполнен код, который следует за инструкцией <code>try...catch</code>. Блок <code>finally</code> выполняется вне зависимости от того, было ли выброшено исключение. Блок <code>finally</code> выполняется даже в том случае, если исключение не перехватывается в блоке <code>catch</code>.</p>
+
+<p>В следующем примере открывается файл, затем в блоке <code>try</code> происходит вызов функции <code>writeMyFile</code>, который может выбросить исключение. Если возникает исключение, то оно обрабатывается в блоке <code>catch</code>. В любом случае файл будет закрыт функцией <code>closeMyFile</code>, вызов которой находится в блоке <code>finally</code>.</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="function token" style="color: #dd4a68;">openMyFile<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">writeMyFile<span class="punctuation token" style="color: #999999;">(</span></span>theData<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;">
+</span><span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">catch</span><span class="punctuation token" style="color: #999999;">(</span>e<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">handleError<span class="punctuation token" style="color: #999999;">(</span></span>e<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;">
+</span><span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">finally</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">closeMyFile<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;">
+</span><span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<p>Если блок <code>finally</code> возвращает значение, то данное значение становится возвращаемым значением всей связки <code>try-catch-finally</code>. Значения, возвращаемые блоками <code>try</code> и <code>catch</code>, будут проигнорированы.</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">f<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">0</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">throw</span> <span class="string token" style="color: #669900;">"bogus"</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">catch</span><span class="punctuation token" style="color: #999999;">(</span>e<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">1</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">true</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // приостанавливается до завершения блока `finally`</span><span class="comment token" style="color: #708090;">
+</span> console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">2</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // не выполняется
+</span> <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">finally</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">3</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">false</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // заменяет предыдущий `return`
+</span> console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">4</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // не выполняется
+</span> <span class="punctuation token" style="color: #999999;">}</span>
+ <span class="comment token" style="color: #708090;"> // `return false` выполняется сейчас
+</span> console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="number token" style="color: #990055;">5</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // не выполняется
+</span><span class="punctuation token" style="color: #999999;">}</span>
+<span class="function token" style="color: #dd4a68;">f<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // отображает 0, 1, 3 и возвращает `false`</span></code></pre>
+
+<p>Замена возвращаемых значений блоком <code>finally</code> распространяется в том числе и на исключения, которые выбрасываются или перевыбрасываются в блоке <code>catch</code>:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">f<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">throw</span> <span class="string token" style="color: #669900;">"bogus"</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">catch</span><span class="punctuation token" style="color: #999999;">(</span>e<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">'caught inner "bogus"'</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="keyword token" style="color: #0077aa;">throw</span> e<span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // приостанавливается до завершения блока `finally`</span><span class="comment token" style="color: #708090;">
+</span> <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">finally</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">false</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // заменяет предыдущий `throw`
+</span> <span class="punctuation token" style="color: #999999;">}</span>
+ <span class="comment token" style="color: #708090;"> // `return false` выполняется сейчас
+</span><span class="punctuation token" style="color: #999999;">}</span>
+
+<span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">f<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">catch</span><span class="punctuation token" style="color: #999999;">(</span>e<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="comment token" style="color: #708090;"> // Не выполняется, т.к. `throw` в `catch `заменяется на `return` в `finally`</span><span class="comment token" style="color: #708090;">
+</span> console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">'caught outer "bogus"'</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+<span class="comment token" style="color: #708090;">
+// В результате отображается сообщение </span><span class="comment token" style="color: #708090;">caught inner "bogus"
+// и возвращается значение `false`</span></code></pre>
+
+<h4 id="Nesting_try...catch_Statements" name="Nesting_try...catch_Statements">Вложенные инструкции <code>try...catch</code></h4>
+
+<p>Вы можете вкладывать инструкции <code>try...catch</code> друг в друга. Если внутренняя инструкция <code>try...catch</code> не имеет блока <code>catch</code>, то она должна иметь блок finally, кроме того исключение будет перехвачено во внешнем блоке <code>catch</code>. Для получения большей информации ознакомьтесь с вложенными <a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Nested_try-blocks">try-блоками</a>.</p>
+
+<h3 id="Использование_объекта_Error">Использование объекта Error</h3>
+
+<p>В зависимости от типа ошибки вы можете использовать свойства <code>name</code> и <code>message</code>, чтобы получить более подробную информацию. Свойство <code>name</code> содержит название ошибки (например, <code>DOMException</code> или <code>Error</code>), свойство <code>message</code> — описание ошибки.</p>
+
+<p>Если вы выбрасываете собственные исключения, то чтобы получить преимущество, которое предоставляют эти свойства (например, если ваш блок <code>catch</code> не делает различий между вашими исключениями и системными), используйте конструктор <code>Error</code>. Например:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> doSomethingErrorProne <span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">( </span><span class="function token" style="color: #dd4a68;">ourCodeMakesAMistake<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">) </span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">throw</span> <span class="punctuation token" style="color: #999999;">( </span><span class="keyword token" style="color: #0077aa;">new</span> <span class="class-name token">Error</span><span class="punctuation token" style="color: #999999;">(</span><span class="string token" style="color: #669900;">'The message'</span><span class="punctuation token" style="color: #999999;">) </span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">else</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">doSomethingToGetAJavascriptError<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span>
+<span class="punctuation token" style="color: #999999;">}
+</span>
+<span class="keyword token" style="color: #0077aa;">try</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">doSomethingErrorProne<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token"> </span><span class="keyword token" style="color: #0077aa;">catch</span> <span class="punctuation token" style="color: #999999;">(</span><span class="class-name token">e</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>e<span class="punctuation token" style="color: #999999;">.</span>name<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // 'Error'
+</span> console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>e<span class="punctuation token" style="color: #999999;">.</span>message<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // 'The message' или JavaScript error message
+</span><span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<h2 id="Объект_Promise">Объект Promise</h2>
+
+<p>Начиная с ECMAScript2015, JavaScript поддерживает объект {{jsxref("Promise")}}, который используется для отложенных и асинхронных операций.</p>
+
+<p>Объект <code>Promise</code> может находиться в следующих состояниях:</p>
+
+<ul>
+ <li><em>ожидание (pending)</em>: начальное состояние, не выполнено и не отклонено.</li>
+ <li><em>выполнено (fulfilled)</em>: операция завершена успешно.</li>
+ <li><em>отклонено (rejected)</em>: операция завершена с ошибкой.</li>
+ <li><em>заданный (settled)</em>: обещание выполнено или отклонено, но не находится в состоянии ожидания.</li>
+</ul>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/8633/promises.png" style="height: 297px; width: 801px;"></p>
+
+<h3 id="Загрузка_изображения_при_помощи_XHR">Загрузка изображения при помощи XHR</h3>
+
+<p>Простой пример использования объектов <code>Promise</code> и <code><a href="https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a></code> для загрузки изображения доступен в репозитории MDN <a href="https://github.com/mdn/js-examples/tree/master/promises-test">promise-test</a> на GitHub. Вы также можете <a href="https://mdn.github.io/js-examples/promises-test/">посмотреть его в действии</a>. Каждый шаг прокомментирован, что позволяет вам разобраться в архитектуре <code>Promise</code> и XHR. Здесь приводится версия без комментариев:</p>
+
+<pre class="brush: js language-js notranslate" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">imgLoad<span class="punctuation token" style="color: #999999;">(</span></span>url<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="keyword token" style="color: #0077aa;">new</span> <span class="class-name token">Promise</span><span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span>resolve<span class="punctuation token" style="color: #999999;">,</span> reject<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">var</span> request <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">new</span> <span class="class-name token">XMLHttpRequest</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ request<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">open<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">'GET'</span><span class="punctuation token" style="color: #999999;">,</span> url<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ request<span class="punctuation token" style="color: #999999;">.</span>responseType <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">'blob'</span><span class="punctuation token" style="color: #999999;">;</span>
+ request<span class="punctuation token" style="color: #999999;">.</span>onload <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span>request<span class="punctuation token" style="color: #999999;">.</span>status <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">===</span> <span class="number token" style="color: #990055;">200</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">resolve<span class="punctuation token" style="color: #999999;">(</span></span>request<span class="punctuation token" style="color: #999999;">.</span>response<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">else</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">reject<span class="punctuation token" style="color: #999999;">(</span></span><span class="function token" style="color: #dd4a68;">Error<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">'Image didn\'t load successfully; error code:'</span>
+ <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> request<span class="punctuation token" style="color: #999999;">.</span>statusText<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span>
+ <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+ request<span class="punctuation token" style="color: #999999;">.</span>onerror <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">reject<span class="punctuation token" style="color: #999999;">(</span></span><span class="function token" style="color: #dd4a68;">Error<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">'There was a network error.'</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+ request<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">send<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}</p>
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
new file mode 100644
index 0000000000..a5fda463eb
--- /dev/null
+++ b/files/ru/web/javascript/guide/details_of_the_object_model/index.html
@@ -0,0 +1,723 @@
+---
+title: Подробнее об объектной модели
+slug: Web/JavaScript/Guide/Details_of_the_Object_Model
+translation_of: Web/JavaScript/Guide/Details_of_the_Object_Model
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Ispolzovanie_promisov")}}</p>
+
+<p class="summary">JavaScript — это объектно-ориентированный язык, основанный на прототипировании, а не на классах. Из-за этого, менее очевидно то, каким образом JavaScript позволяет создавать иерархии объектов и обеспечивает наследование свойств и их значений. Эта глава является скромной попыткой прояснить ситуацию.</p>
+
+<p>Эта глава предполагает что читатель знаком с основами JavaScript, и имеет опыт использования функций для создания простейших объектов.</p>
+
+<h2 id="Языки_основанные_на_классах_против_Прототипно-ориентированных_языков">Языки, основанные на классах против Прототипно-ориентированных языков</h2>
+
+<p>Основанные на классах объектно-ориентированные языки программирования, такие как Java и C++, строятся на концепции двух отдельных сущностей: класс и экземпляр.</p>
+
+<ul>
+ <li><em>Класс</em> определяет все свойства (учитывая методы и все поля в  Java, или свойства в C++), которые характеризуют группу объектов. Класс это абстрактная вещь, а не какой-либо конкретный член множества объектов, которые он описывает. Например, класс <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code> может описывать множество всех сотрудников.</li>
+ <li><em>Экземпляр</em>, это воплощение класса в виде конкретного объекта. Например, <font face="Consolas, Liberation Mono, Courier, monospace"><code>Victoria</code> </font>может быть экземпляром класса <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code>, представляющий собой конкретного сотрудника. Экземпляр класса имеет ровно столько свойств, сколько и родительский класс (не больше и не меньше).</li>
+</ul>
+
+<p>Прототипно-ориентированный язык, например JavaScript, не реализует данное различие: он имеет только объекты. Языки, основанные на прототипах, имеют понятие <em>прототипа объекта — </em>это<em> </em>объект, используемый в качестве шаблона, с целью получить изначальные свойства для нового объекта. Любой объект может иметь собственные свойства, присвоенные либо во время создания, либо во время выполнения. В дополнение, любой объект может быть указан в качестве <em>прототипа </em>для другого объекта, это позволит второму объекту использовать свойства первого.</p>
+
+<h3 id="Определение_класса">Определение класса</h3>
+
+<p>В классо-ориентированных языках, вы можете <em>определить класс</em>. В этом определении вы можете указать специальные методы, называемые <em>конструкторами</em>, которые позволят создать экземпляр класса. Метод конструктор может задать начальные значения для свойств экземпляра и выполнять другие действия, в момент создания. Вы можете использовать оператор  <code>new</code>, совместно с методом конструктора, для создания экземпляров классов.</p>
+
+<p>JavaScript использует похожую модель, но не имеет определения класса отдельно от конструктора. Вместо этого, вы определяете функцию-конструктор для создания объектов с начальным набором свойств и значений. Любая функция в JavaScript может быть использована, как конструктор. Вы должны использовать оператор <code>new</code> для создания нового объекта.</p>
+
+<h3 id="Подклассы_и_наследование">Подклассы и наследование</h3>
+
+<p>В языках, основанных на классах, вы создаете иерархию классов через объявление классов. В объявлении класса вы можете указать, что новый класс является <em>подклассом</em> уже существующего класса. При этом, подкласс унаследует все свойства суперкласса и в дополнение сможет добавить свои свойства или переопределить унаследованные. Например, предположим, что класс <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code> включает два свойства: <code>name</code> и <code>dept</code>, а класс <code><span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span></code> является подклассом <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code> и добавляет свойство <code>reports</code>. В этом случае, экземпляр класса <code><span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span></code> будет иметь три свойства: <code>name</code>, <code>dept</code>, и <code>reports</code>.</p>
+
+<p>JavaScript реализует наследование, позволяя связать прототипный объект с любой функцией-конструктором. Итак, вы можете создать объект точь-в-точь, как в примере <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code> — <code><span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span></code>, но используя несколько иную технику. Для начала нужно определить функцию-конструктор <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code>, которая определяет свойства <code>name</code> и <code>dept</code>. Затем, определяем функцию-конструктор <code><span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span></code>, в которой в свою очередь, будет явно вызываться конструктор <span style="font-family: consolas,monaco,andale mono,monospace;"><code>Employee</code> и</span> определяться новое свойство <code>reports</code>. Наконец, присваиваем новый экземпляр <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code>, в качестве <code>prototype</code> для функции-конструктора <code><span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span></code>. Теперь, когда вы создадите нового <span style="font-family: consolas,monaco,andale mono,monospace;">Manager</span>, он унаследует свойства <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">name</span></font> и <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">dept</span></font> из объекта <code><span style="font-family: consolas,monaco,andale mono,monospace;">Employee</span></code>.</p>
+
+<h3 id="Добавление_и_удаление_свойств">Добавление и удаление свойств</h3>
+
+<p>В языках, основанных на классах, вы, как правило, создаете класс во время компиляции, а затем вы создаёте экземпляры класса либо во время компиляции, либо во время выполнения. Вы не можете изменить количество или тип свойств класса после определения класса. В JavaScript, однако, вы можете добавлять или удалять свойства любого объекта. Если вы добавляете свойство к объекту, который используется в качестве прототипа для множества объектов, то все эти объекты, для которых он является прототипом, также получат это свойство.</p>
+
+<h3 id="Подытожим_различия">Подытожим различия</h3>
+
+<p>Следующая таблица дает краткий обзор некоторых из этих различий. А оставшаяся часть этой главы описывает детали использования конструкторов и прототипов JavaScript для создания иерархии объектов и сравнивает это с тем, как вы могли бы сделать это в Java.</p>
+
+<table class="fullwidth-table">
+ <caption>Сравнение языков на основе классов (Java) и на базе прототипов (JavaScript)</caption>
+ <thead>
+ <tr>
+ <th scope="col">Основанные на классах (Java)</th>
+ <th scope="col">Основанные на базе прототипов (JavaScript)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Класс и экземпляр являются разными сущностями.</td>
+ <td>Все объекты могут наследовать свойства другого объекта.</td>
+ </tr>
+ <tr>
+ <td>Определяем класс с помощью определения класса; создаем экземпляр класса с помощью метода-конструктора.</td>
+ <td>Определение и создание объекта происходит с помощью функций-конcтрукторов.</td>
+ </tr>
+ <tr>
+ <td>Создание отдельного объекта с помощью оператора <code>new</code>.</td>
+ <td>Так же.</td>
+ </tr>
+ <tr>
+ <td>Иерархия объектов строится с помощью определения классов и их подклассов.</td>
+ <td>
+ <p>Построение иерархии объектов происходит путем присвоения объекта в качестве прототипа функции-конструктора.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>Наследование свойств в цепочке классов.</td>
+ <td>Наследование свойств в цепочке прототипов.</td>
+ </tr>
+ <tr>
+ <td>Определение класса определяет <em>все</em> свойства всех экземпляров класса. Нельзя динамически добавлять свойства во время выполнения.</td>
+ <td>Функция-конструктор или прототип задает <em>начальный</em> набор свойств. Можно добавить или удалить свойства динамически к отдельным объектам или всей совокупности объектов.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Пример_Сотрудник">Пример Сотрудник</h2>
+
+<p>Оставшаяся часть этой главы объясняет иерархию сотрудников, показанную на следующем рисунке:</p>
+
+<p><img alt="" class="internal" src="/@api/deki/files/4452/=figure8.1.png" style="height: 194px; width: 281px;"></p>
+
+<p><small><strong>Рисунок 8.1: Простая иерархия объектов</strong></small></p>
+
+<p>Этот пример использует следующие объекты:</p>
+
+<ul>
+ <li><code>Employee</code> имеет свойство <code>name</code> (значение которого по умолчанию пустая строка) и <code>dept</code> (значение которого по умолчанию "general").</li>
+ <li><code>Manager</code> основывается на <code>Employee</code>. Он добавляет свойство <code>reports</code> (значение которого по умолчанию пустой массив, предназначенный для хранения массива объектов <code>Employee</code>).</li>
+ <li><code>WorkerBee</code> так же основан на <code>Employee</code>. Он добавляет свойство <code>projects</code> (значение которого по умолчанию пустой массив, предназначенный для хранения строк).</li>
+ <li><code>SalesPerson</code> основан на <code>WorkerBee</code>. Он добавляет свойство <code>quota </code>(значение которого по умолчанию 100). Он также переопределяет свойство <code>dept</code>, со значением "sales", указывая, что все продавцы находятся в одном отделе.</li>
+ <li><code>Engineer</code> основан на <code>WorkerBee</code>. Он добавляет свойство <code>machine</code> (значение которого по умолчанию пустая строка), а так же определяет свойство <code>dept</code> значением "engineering".</li>
+</ul>
+
+<h2 id="Создание_иерархии">Создание иерархии</h2>
+
+<p>Известно несколько способов определить подходящие функции-конструкторы, которые реализуют иерархию <code>Employee</code>. Выбор способа определения в большей степени зависит от того, на что рассчитано ваше приложение.</p>
+
+<p>В этом разделе приведены очень простые (и сравнительно не гибкие) определения, для демонстрации того, как же работает наследование. В этих определениях, вы не можете указать значения свойствам при создании объекта. Свойства вновь созданного объекта попросту получают значения по умолчанию, которые можно изменить позднее.</p>
+
+<p>В реальном приложении, вы, вероятно, будете определять конструкторы, которые позволяют устанавливать нужные вам значения свойств во время создания объекта (см <a href="#Более_гибкие_конструкторы">Более гибкие конструкторы</a>). В данном же случае конструкторы упрощены сознательно для того, чтобы сфокусироваться на сути наследования.</p>
+
+<p>Следующие определения <code>Employee</code> для языков Java и JavaScript довольно похожи. Единственное отличие состоит в том, что вам необходимо указать тип каждого свойства в Java, но не в JavaScript (потому что Java является <a href="https://ru.wikipedia.org/wiki/Сильная_и_слабая_типизация">строго типизированным языком</a>, в то время как JavaScript слабо типизированный).</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function Employee() {
+ this.name = '';
+ this.dept = 'general';
+}
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class Employee {
+ public String name = "";
+ public String dept = "general";
+}
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Определения классов <code>Manager</code> и <code>WorkerBee</code> показывают разницу в определении вышестоящего объекта в цепочке наследования. В JavaScript вводится связующий объект (прототипный экземпляр), который присваивается в качестве значения свойству <code>prototype </code>функции-конструктора. Вы можете сделать это в любое время после того, как вы создали конструктор. В Java, необходимо указать суперкласс внутри определения класса. Вы не можете изменить суперкласс вне определения класса.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function Manager() {
+ Employee.call(this);
+ this.reports = [];
+}
+//создаем пустой бъект с прототипом от коструктора Employee
+//и используем этот объект как прототип для Manager
+Manager.prototype = Object.create(Employee.prototype);
+
+Manager.prototype.constructor = Manager;
+
+function WorkerBee() {
+ Employee.call(this);
+ this.projects = [];
+}
+WorkerBee.prototype = Object.create(Employee.prototype);
+WorkerBee.prototype.constructor = WorkerBee;
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class Manager extends Employee {
+ public Employee[] reports = new Employee[0];
+}
+
+public class WorkerBee extends Employee {
+ public String[] projects = new String[0];
+}
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Классы <code>Engineer</code> и <code>SalesPerson</code> создают объекты, которые происходят от <code>WorkerBee</code> и, следовательно, от <code>Employee</code>. Объект этих типов имеет свойства всех объектов, расположенных над ним в иерархии. Также, эти классы переопределяют наследуемое значение свойства <code>dept</code> своими значениями, характерными для этих объектов.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function SalesPerson() {
+ WorkerBee.call(this);
+ this.dept = 'sales';
+ this.quota = 100;
+}
+SalesPerson.prototype = Object.create(WorkerBee.prototype);
+SalesPerson.prototype.constructor = SalesPerson;
+
+function Engineer() {
+ WorkerBee.call(this);
+ this.dept = 'engineering';
+ this.machine = '';
+}
+Engineer.prototype = Object.create(WorkerBee.prototype);
+Engineer.prototype.constructor = Engineer;
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class SalesPerson extends WorkerBee {
+ public double quota;
+ public dept = "sales";
+ public quota = 100.0;
+}
+
+public class Engineer extends WorkerBee {
+ public String machine;
+ public dept = "engineering";
+ public machine = "";
+}
+</pre>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Используя эти определения, вы можете создавать экземпляры объектов, которые получат значения по умолчанию для своих свойств. Рисунок 8.3 иллюстрирует использование этих определений и показывает значения свойств у полученных объектов.</p>
+
+<p>{{ note('Термин <em>экземпляр </em>имеет специфическое значение в языках, основанных на классах. В этих языках экземпляр — это индивидуальная сущность определенного класса и принципиально отличается от класса. В JavaScript «экземпляр» не имеет такого технического значения, потому что JavaScript не делает таких отличий между классами и экземплярами. Однако, в разговоре о JavaScript, термин «экземпляр» может неформально использоваться для обозначения объекта, созданного с использованием конкретной <span>функции конструктора. Так, в этом примере, вы можете неформально сказать, что <code>jane</code> является экземпляром <code>Engineer</code>. Аналогично, хотя термины <em>parent, child, ancestor</em> и <em>descendant</em> (<em>родитель, ребенок, предок</em> и <em>потомок</em>) не имеют формальных значений в JavaScript, вы можете использовать их неформально для ссылки на объекты выше или ниже</span> <span>в</span> <span>цепочке прототипов.') }}</span></p>
+
+<p><img alt="figure8.3.png" class="default internal" id="figure8.3" src="/@api/deki/files/4403/=figure8.3.png"><br>
+ <a id="8.3" name="8.3"><small><strong>Рисунок 8.3: Создание объектов с простыми определениями</strong></small></a></p>
+
+<h2 id="Свойства_объекта">Свойства объекта</h2>
+
+<p>Этот раздел о том, как объекты наследуют свойства из других объектов в цепочке прототипов, и что происходит, когда вы добавляете свойство во время выполнения.</p>
+
+<h3 id="Наследование_свойств">Наследование свойств</h3>
+
+<p>Предположим, вы создаете объект <code>mark</code> в качестве <code>WorkerBee</code> (как показано на <a href="#8.3">Рисунок 8.3</a>) с помощью следующего выражения:</p>
+
+<pre class="brush: js">var mark = new WorkerBee;
+</pre>
+
+<p>Когда JavaScript видит оператор <code>new</code>, он создает новый обобщенный объект и неявно устанавливает значение внутреннего свойства [[Prototype]] в <code>WorkerkBee.prototype</code>, затем передает этот новый объект в качестве значения <code>this</code> в функцию-конструктор <code>WorkerBee</code>. Внутреннее свойство [[Prototype]] определяет цепочку прототипов, используемых для получения значений свойств. После того, как эти свойства установлены, JavaScript возвращает новый объект, а оператор присваивания устанавливает переменную <code>mark</code> для этого объекта.</p>
+
+<p>Этот процесс не задает значения свойств (<em>локальных</em> значений), которые унаследованы по цепочке прототипов, объекта <code>mark</code> напрямую. Когда вы запрашиваете значение свойства, JavaScript сначала проверяет, существует ли это значение в данном объекте. Если так и есть, тогда возвращается это значение. Если значение не найдено в самом объекте, JavaScript проверяет цепочку прототипов (используя внутреннее свойство [[Prorotype]]). Если объект в цепочке прототипов имеет значение для искомого свойства, это значение возвращается. Если такое свойство не найдено, JavaScript сообщает, что объект не обладает свойством. Таким образом, объект <code>mark</code> содержит следующие свойства и значения:</p>
+
+<pre class="brush: js">mark.name = '';
+mark.dept = 'general';
+mark.projects = [];
+</pre>
+
+<p>Значения для свойств <code>name</code> и <code>dept</code> объекту <code>mark</code> присваиваются из конструктора <code>Employee</code>. Также из конструктора <code>WorkerBee</code> присваивается локальное значение для свойства <code>projects</code>. Это дает вам наследование свойств и их значений в JavaScript. Некоторые детали этого процесса обсуждаются в <a href="#Тонкости_наследования_свойств">Тонкости наследования свойств</a>.</p>
+
+<p>Поскольку эти конструкторы не позволяют вводить значения, специфичные для экземпляра, добавленная информация является общей. Значения свойств устанавливаются по умолчанию одинаковыми для всех объектов, созданных функцией <code>WorkerBee</code>. Конечно, вы можете изменить значения любого из этих свойств. Так, вы можете добавить специфичную информацию для <code>mark</code> следующим образом:</p>
+
+<pre class="brush: js">mark.name = 'Doe, Mark';
+mark.dept = 'admin';
+mark.projects = ['navigator'];</pre>
+
+<h3 id="Добавление_свойств">Добавление свойств</h3>
+
+<p>В JavaScript вы можете добавить свойства для любого объекта в реальном времени. Вы не ограничены только свойствами, установленными функцией-конструктором. Чтобы добавить свойство, специфичное для конкретного объекта, вы присваиваете ему значение в объекте, вот так:</p>
+
+<pre class="brush: js">mark.bonus = 3000;
+</pre>
+
+<p>Теперь объект <code>mark</code> имеет свойство <code>bonus</code>, но никакой другой <code>WorkerBee</code> не имеет этого свойства.</p>
+
+<p>Если вы добавляете новое свойство в объект, который используется в качестве прототипа для функции-конструктора, вы добавляете это свойство для всех объектов, наследующих свойства из этого прототипа. Например, вы можете добавить свойство <code>specialty</code> для всех сотрудников с помощью следующего выражения:</p>
+
+<pre class="brush: js">Employee.prototype.specialty = 'none';
+</pre>
+
+<p>Как только JavaScript выполняет это выражение, объект <code>mark</code> также получает свойство <code>specialty</code> со значением <code>"none"</code>. Следующий рисунок показывает результат добавления этого свойства в прототип <code>Employee</code> и последующее переопределение его в прототипе <code>Engineer</code>.</p>
+
+<p><img alt="" class="internal" src="/@api/deki/files/4422/=figure8.4.png" style="height: 519px; width: 833px;"><br>
+ <small><strong>Рисунок 8.4: Добавление свойств</strong></small></p>
+
+<h2 id="Более_гибкие_конструкторы">Более гибкие конструкторы</h2>
+
+<p><span id="result_box" lang="ru"><span>Функции</span>-<span>конструкторы</span><span>, показанные</span> <span>до сих пор,</span> <span>не</span> <span>позволяют задавать</span> <span>значения</span> <span>свойств при создании</span> <span>экземпляра. Как и в</span> <span>Java</span><span>,</span> <span>вы можете передать</span> <span>аргументы в</span> <span>конструкторах</span> <span>для инициализации значений свойств</span><span> экземпляров</span><span>.</span> <span>На следующем рисунке показан</span> <span>один из способов сделать</span> <span>это</span><span>.</span></span></p>
+
+<p><img alt="" class="internal" id="figure8.5" src="/@api/deki/files/4423/=figure8.5.png" style="height: 481px; width: 1012px;"><br>
+ <a id="8.5" name="8.5"><small><strong>Рисунок 8.5: Определение свойств в конструкторе, вариант 1</strong></small></a></p>
+
+<p>Следующая таблица показывает определения для этих объектов в JavaScript и Java.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function Employee (name, dept) {
+ this.name = name || '';
+ this.dept = dept || 'general';
+}
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class Employee {
+ public String name;
+ public String dept;
+ public Employee () {
+ this("", "general");
+ }
+ public Employee (String name) {
+ this(name, "general");
+ }
+ public Employee (String name, String dept) {
+ this.name = name;
+ this.dept = dept;
+ }
+}
+</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function WorkerBee (projs) {
+
+ this.projects = projs || [];
+}
+WorkerBee.prototype = new Employee;
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class WorkerBee extends Employee {
+ public String[] projects;
+ public WorkerBee () {
+ this(new String[0]);
+ }
+ public WorkerBee (String[] projs) {
+ projects = projs;
+ }
+}
+
+</pre>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <pre class="brush: js">
+
+function Engineer (mach) {
+ this.dept = 'engineering';
+ this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+</pre>
+ </td>
+ <td>
+ <pre class="brush: java">
+public class Engineer extends WorkerBee {
+ public String machine;
+ public Engineer () {
+ dept = "engineering";
+ machine = "";
+ }
+ public Engineer (String mach) {
+ dept = "engineering";
+ machine = mach;
+ }
+}
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>В JavaScript эти определения используют специальную идеому для установки значений по умолчанию:</p>
+
+<pre class="brush: js">this.name = name || '';
+</pre>
+
+<p>В JavaScript логический оператор ИЛИ (<code>||</code>) оценивает свой первый аргумент. Если этот аргумент преобразуется в true, оператор возвращает его. Иначе, оператор возвращает значение второго аргумента. Следовательно, эта строчка кода проверяет, содержит ли аргумент <code>name</code> значение, пригодное для свойства <code>name</code>. Если так и есть, <code>this.name</code> определяется этим значением. В противном случае, значению <code>this.name</code> присваивается пустая строка. Эта глава использует такую идиому для краткости; тем не менее, с первого взгляда она может озадачить.</p>
+
+<p>{{ note('Это может работать не так, как ожидается, если функция-конструктор вызывается с аргументами, которые преобразуются в <code><code>false</code></code>, вроде нуля (<code>0</code>) или пустой строки (<code>""</code>). В этом случае будет выбрано значение по умолчанию.') }}</p>
+
+<p>С помощью таких определений, создавая экземпляр объекта, вы можете указать значения для локально определенных свойств. Как показано на <a href="#8.5">Рисунок 8.5</a>, можно использовать следующее выражение для создания нового <code>Engineer</code>:</p>
+
+<pre class="brush: js">var jane = new Engineer('belau');
+</pre>
+
+<p>Свойства созданного объекта <code>jane</code>:</p>
+
+<pre class="brush: js">jane.name == '';
+jane.dept == 'engineering';
+jane.projects == [];
+jane.machine == 'belau'
+</pre>
+
+<p>Обратите внимание, что с таким способом вы не можете указать начальное значение наследуемого свойства, такого как <code>name</code>. Если вы хотите задать начальное значение для наследуемых свойств в JavaScript, вам нужно добавить больше кода в функцию-конструктор.</p>
+
+<p>До сих пор функция-конструктор создавала обобщенный объект, а затем определяла локальные свойства и значения для нового объекта. Вы можете использовать конструктор, который добавляет дополнительные свойства путем непосредственного вызова функции-конструктора для объекта, расположенного выше в цепочке прототипов. На следующем рисунке показаны эти новые определения.</p>
+
+<p><img alt="" class="internal" src="/@api/deki/files/4430/=figure8.6.png" style="height: 534px; width: 1063px;"><br>
+ <small><strong>Рисунок 8.6: Определение свойств в конструкторе, вариант 2</strong></small></p>
+
+<p>Давайте рассмотрим одно из этих определений детальнее. Вот новое определение функции-конструктора <code>Engineer</code>:</p>
+
+<pre class="brush: js">function Engineer (name, projs, mach) {
+ this.base = WorkerBee;
+ this.base(name, 'engineering', projs);
+ this.machine = mach || '';
+}
+</pre>
+
+<p>Предположим, вы создаете новый объект, используя <code>Engineer, следующим образом:</code></p>
+
+<pre class="brush: js">var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+</pre>
+
+<p>JavaScript <span id="result_box" lang="ru"><span>выполняет следующие действия</span><span>:</span></span></p>
+
+<ol>
+ <li>Оператор <code>new</code> создает обобщенный объект и устанавливает его свойству <code>__proto__</code> значение <code>Engineer.prototype</code>.</li>
+ <li>Оператор <code>new</code> передает этот новый объект в конструктор <code>Engineer</code> в качестве значения ключевого слова <code>this</code>.</li>
+ <li>Конструктор создает новое свойство с именем <code>base</code> для этого объекта и присваивает значение свойства <code>base</code> из конструктора <code>WorkerBee</code>. Это делает конструктор <code>WorkerBee</code> методом объекта, созданного <code>Engineer</code>. Имя свойства <code>base</code> не является специальным словом. Вы можете использовать любое допустимое для свойства имя; <code>base</code> всего-лишь напоминает о предназначении свойства.</li>
+ <li>Конструктор вызывает метод <code>base</code>, передавая в качестве аргументов два аргумента, переданных конструктору (<code>"Doe, Jane"</code> и <code>["navigator", "javascript"]</code>), а также строку <code>"engineering"</code>. Явное использование <code>"engineering"</code> в конструкторе указывает на то, что все объекты, созданные <code>Engineer</code>, имеют одинаковое значение для наследуемого свойства <code>dept</code>, это значение переопределяет значение, унаследованное из <code>Employee</code>.</li>
+ <li>Поскольку <code>base</code> является методом <code>Engineer</code>, внутри вызова <code>base</code> JavaScript привязывает ключевое свойство <code>this</code> к объекту, созданному в шаге 1. Таким образом, функция <code>WorkerBee</code> передает поочередно аргументы <code>"Doe, Jane"</code> и <code>"engineering"</code> в функцию-конструктор <code>Employee</code>. Получив результат из <code>Employee</code>, функция <code>WorkerBee</code> использует оставшийся аргумент для установки значения свойства <code>projects</code>.</li>
+ <li>После возвращения из метода <code>base</code>, конструктор <code>Engineer</code> инициализирует свойство объекта <code>machine</code> со значением <code>"belau"</code>.</li>
+ <li>После возвращения из конструктора, JavaScript присваивает новый объект переменной <code>jane</code>.</li>
+</ol>
+
+<p>Можно подумать, что вызвав <code>WorkerBee</code> из конструктора <code>Engineer</code>, вы настроили соответствующим образом наследование для объектов, создаваемых <code>Engineer</code>. Это не так. Вызов конструктора <code>WorkerBee</code> обеспечивает только то, что объект <code>Engineer</code> запускается со  свойствами, определенными во всех функциях-конструкторах, которые были вызваны. Так, если позже добавить свойства в прототипы <code>Employee</code> или <code>WorkerBee</code>, эти свойства не унаследуются объектами из <code>Engineer</code>. Например, предположим, вы использовали следующие определения:</p>
+
+<pre class="brush: js">function Engineer (name, projs, mach) {
+ this.base = WorkerBee;
+ this.base(name, 'engineering', projs);
+ this.machine = mach || '';
+}
+var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+Employee.prototype.specialty = 'none';
+</pre>
+
+<p>В примере выше <code>jane</code> не унаследует свойство <code>specialty</code>. Для динамического наследования необходимо явно устанавливать прототип, что и сделано в следующем дополнении:</p>
+
+<pre class="brush: js">function Engineer (name, projs, mach) {
+ this.base = WorkerBee;
+ this.base(name, 'engineering', projs);
+ this.machine = mach || '';
+}
+Engineer.prototype = new WorkerBee;
+var jane = new Engineer('Doe, Jane', ['navigator', 'javascript'], 'belau');
+Employee.prototype.specialty = "none";
+</pre>
+
+<p>Теперь свойство <code>specialty</code> объекта <code>jane</code> имеет значение "none".</p>
+
+<p>Другой способ вызвать родительский конструктор в контексте создаваемого объекта это использование методов <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Function/call" title="en-US/docs/JavaScript/Reference/Global Objects/Function/call"><code>call()</code></a> / <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply" title="en-US/docs/JavaScript/Reference/Global Objects/Function/apply"><code>apply()</code></a>. Следующие блоки эквивалентны:</p>
+
+<table>
+ <tbody>
+ <tr>
+ <td>
+ <pre class="brush: js">
+function Engineer (name, projs, mach) {
+ this.base = WorkerBee;
+ this.base(name, 'engineering', projs);
+ this.machine = mach || '';
+}
+</pre>
+ </td>
+ <td>
+ <pre class="brush: js">
+function Engineer (name, projs, mach) {
+ WorkerBee.call(this, name, 'engineering', projs);
+ this.machine = mach || '';
+}
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Использование метода <code>call()</code> является более чистой реализацией наследования, так как он не требует создания дополнителного свойства, именованного в примере как <code>base</code>.</p>
+
+<h2 id="Тонкости_наследования_свойств">Тонкости наследования свойств</h2>
+
+<p>В секции выше рассказывалось каким образом конструкторы и прототипы в JavaScript обеспечивают иерархию и наследование. В секции ниже будут затронуты тонкости, которые выше были не так очевидны.</p>
+
+<h3 id="Локальные_значения_против_унаследованных">Локальные значения против унаследованных</h3>
+
+<p>Когда вы пытаетесь получить значение некоторого свойства объекта, JavaScript выполняет следующие шаги, которые уже перечислялись ранее в этой главе:</p>
+
+<ol>
+ <li>Проверяется, существует ли локальное свойство с запрашиваемым именем. Если да, то возвращается значение этого свойства.</li>
+ <li>Если локального свойства не существует, проверяется цепочка прототипов (через использование свойства <code>__proto__</code>).</li>
+ <li>Если один из объектов в цепочке прототипов имеет свойство c запрашиваемым именем, возвращается значение этого свойства.</li>
+ <li>Если искомое свойство не обнаружено, считается, что объект его не имеет.</li>
+</ol>
+
+<p>Результат выполнения этих шагов будет зависеть от того, в каком порядке вы создаете объекты, прототипы и их свойства. Рассмотрим пример:</p>
+
+<pre class="brush: js">function Employee () {
+ this.name = "";
+ this.dept = "general";
+}
+
+function WorkerBee () {
+ this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+</pre>
+
+<p>Предположим, на основе конструкции выше, вы создаете объект <code>amy</code> как экземпляр класса <code>WorkerBee</code> следующим выражением:</p>
+
+<pre class="brush: js">var amy = new WorkerBee;
+</pre>
+
+<p><code><font face="Open Sans, Arial, sans-serif">В результате, объект </font>amy</code> будет иметь одно локальное своство - <code>projects</code>. Свойства <code>name</code> и <code>dept</code> не будут локальными для <code>amy</code> но будут взяты из прототипа (объект на который ссылается свойство <code>__proto__</code> объекта <code>amy)</code>. Таким образом, <code>amy</code> имеет три свойства:</p>
+
+<pre class="brush: js">amy.name == "";
+amy.dept == "general";
+amy.projects == [];
+</pre>
+
+<p>Теперь предположим, что вы изменили значение свойства <code>name</code> у прототипа <code>Employee</code>:</p>
+
+<pre class="brush: js">Employee.prototype.name = "Unknown"
+</pre>
+
+<p>На первый взгляд вы можете ожидать, что это изменение распространится на все экземпляры <code>Employee</code>. Однако этого не случится.</p>
+
+<p>Когда вы устанавливаете прототип для <code>WorkerBee</code> вы создаете новый объект <code>Employee</code>, таким образом <code>WorkerBee.prototype</code> получает свое собственное локальное свойство <code>name</code> (в данном примере пустую строку). Следовательно, когда JavaScript ищет свойство <code>name</code> у объекта <code>amy</code> (экземпляра <code>WorkerBee</code>), он первым делом натыкается на него в прототипе <code>WorkerBee.prototype,</code> и до проверки <code>Employee.prototype</code> дело не доходит.</p>
+
+<p>Если у вас есть необходимость изменять некоторое свойство объекта во время работы приложения, и применять это изменение на все существующие экземпляры, не нужно создавать это свойство внутри конструктора. Вместо этого добавьте свойство в прототип, принадлежащий конструктору. Для примера, предположим, вы изменили код, который был показан выше, следующим образом:</p>
+
+<pre class="brush: js">function Employee () {
+ this.dept = "general";
+}
+Employee.prototype.name = "";
+
+function WorkerBee () {
+ this.projects = [];
+}
+WorkerBee.prototype = new Employee;
+
+var amy = new WorkerBee;
+
+Employee.prototype.name = "Unknown";
+</pre>
+
+<p>в таком случае свойство <code>name</code> у объекта <code>amy</code> примет значение "Unknown".</p>
+
+<p>Как показано в этом примере, если вы хотите иметь значения свойств по умолчанию, и иметь возможность менять эти значения во время работы приложения, создавайте их в прототипе конструктора, а не в самом конструкторе.</p>
+
+<h3 id="Разбираемся_во_взаимосвязи_экземпляров">Разбираемся во взаимосвязи экземпляров</h3>
+
+<p>Поиск свойств в JavaScript начинается с просмотра самого объекта, и если в нем свойство не найдено, поиск переключается на объект, на который указывает ссылка <code>__proto__</code>. Это продолжается рекурсивно и такой процесс поиска называется "поиск в цепочке прототипов".</p>
+
+<p>Специальное свойство <code>__proto__</code> устанавливается автоматически при создании объекта. Оно принимает значение свойства <code>prototype</code> функции-конструктора. Таким образом, <code>new Foo()</code> создаст объект для которого справедливо выражение <code>__proto__ == <code class="moz-txt-verticalline">Foo.prototype</code></code>. Вследствие этого, любые изменения свойств у <code class="moz-txt-verticalline">Foo.prototype,</code> оказывают эффект на процесс поиска свойств во всех объектах, созданных при помощи <code>new Foo()</code>.</p>
+
+<p>Все объекты (за исключением глобального объекта <code>Object</code>) имеют свойство <code>__proto__.</code> Все функции имеют свойство <code>prototype</code>. Благодаря этому, могут быть установлены родственные связи в иерархии объектов. Вы можете установить родство и происхождение объекта, сравнив его свойство <code>__proto__</code> со свойством <code>prototype</code> конструктора. Здесь JavaScript представляет оператор <code>instanceof</code> как более простой способ проверки, наследуется ли объект от конкретного конструктора. Для примера:</p>
+
+<pre class="brush: js">var f = new Foo();
+var isTrue = (f instanceof Foo);</pre>
+
+<p>Для более детального примера, предположим, у вас имеются те же определения, что приведены в разделе <a href="#Inheriting_properties">Inheriting properties</a>. Создадим экземпляр <code>Engineer</code> как показано здесь:</p>
+
+<pre class="brush: js">var chris = new Engineer("Pigman, Chris", ["jsd"], "fiji");
+</pre>
+
+<p>Для полученного объекта будут истинными все из следующих выражений:</p>
+
+<pre class="brush: js">chris.__proto__ == Engineer.prototype;
+chris.__proto__.__proto__ == WorkerBee.prototype;
+chris.__proto__.__proto__.__proto__ == Employee.prototype;
+chris.__proto__.__proto__.__proto__.__proto__ == Object.prototype;
+chris.__proto__.__proto__.__proto__.__proto__.__proto__ == null;
+</pre>
+
+<p>Зная это, вы можете написать свою функцию <code>instanceOf</code> как показано ниже:</p>
+
+<pre class="brush: js">function instanceOf(object, constructor) {
+ object = object.__proto__;
+ while (object != null) {
+ if (object == constructor.prototype)
+ return true;
+ if (typeof object == 'xml') {
+ return constructor.prototype == XML.prototype;
+ }
+ object = object.__proto__;
+ }
+ return false;
+}
+</pre>
+
+<div class="note"><strong>Замечание:</strong> Реализация выше особым образом обрабатывает тип "xml". Это сделано для того, чтобы обойти особенность представления XML объектов в последних версиях JavaScript. Смотрите описание ошибки {{ bug(634150) }} если вам интересны детали.</div>
+
+<p>Следующие вызовы функции instanceOf, заданной выше, вернут истинные значения:</p>
+
+<pre>instanceOf (chris, Engineer)
+instanceOf (chris, WorkerBee)
+instanceOf (chris, Employee)
+instanceOf (chris, Object)
+</pre>
+
+<p>Но следующее выражение вернет <code>false</code>:</p>
+
+<pre class="brush: js">instanceOf (chris, SalesPerson)
+</pre>
+
+<h3 id="Глобальные_данные_в_конструкторах">Глобальные данные в конструкторах</h3>
+
+<p>При написании конструкторов, следует с особым вниманием относиться к изменению глобальных переменных. Например, если вам нужен уникальный ID, который был бы автоматически назначен каждому экземпляру <code>Employee,</code> вы примените следующий подход для определения <code>Employee</code>:</p>
+
+<pre class="brush: js">var idCounter = 1;
+
+function Employee (name, dept) {
+ this.name = name || "";
+ this.dept = dept || "general";
+ this.id = idCounter++;
+}
+</pre>
+
+<p>Здесь, когда вы создаете новый экземпляр <code>Employee</code>, конструктор присваивает ему все новый и новый ID увеличивая значение глобальной переменной <code>idCounter</code>. Следовательно, при выполнении кода ниже, <code>victoria.id</code> станет равным 1 а <code>harry.id</code> — 2:</p>
+
+<pre class="brush: js">var victoria = new Employee("Pigbert, Victoria", "pubs")
+var harry = new Employee("Tschopik, Harry", "sales")
+</pre>
+
+<p>Навскидку, все выглядит предсказуемо. Однако, <code>idCounter</code> увеличивается при создании каждого объекта <code>Employee</code> вне зависимости от цели его создания. Если вы создаете полную иерархию класса <code>Employee,</code> показанную выше в этой главе, конструктор <code>Employee</code> будет так же вызван каждый раз, когда вы устанавливаете прототип для подклассов. Следующий код раскрывает суть возможной проблемы:</p>
+
+<pre class="brush: js">var idCounter = 1;
+
+function Employee (name, dept) {
+ this.name = name || "";
+ this.dept = dept || "general";
+ this.id = idCounter++;
+}
+
+function Manager (name, dept, reports) {...}
+Manager.prototype = new Employee;
+
+function WorkerBee (name, dept, projs) {...}
+WorkerBee.prototype = new Employee;
+
+function Engineer (name, projs, mach) {...}
+Engineer.prototype = new WorkerBee;
+
+function SalesPerson (name, projs, quota) {...}
+SalesPerson.prototype = new WorkerBee;
+
+var mac = new Engineer("Wood, Mac");
+</pre>
+
+<p>Предположим, каждый из конструкторов, тело которого опущено для краткости, содержит вызов конструктора прародителя. Это приведет к тому, что <code>id</code> у объекта <code>mac</code> примет значение 5 вместо ожидаемой единицы.</p>
+
+<p>В зависимости от приложения, лишние увеличения счетчика могут быть не критичны. В случае же, когда точный контроль за значениями счетчика важен, одним из возможных решений станет такой код:</p>
+
+<pre class="brush: js">function Employee (name, dept) {
+ this.name = name || "";
+ this.dept = dept || "general";
+ if (name)
+ this.id = idCounter++;
+}
+</pre>
+
+<p>Когда вы создаете экземпляр <code>Employee</code> в качестве прототипа, вы не предоставляете аргументы в конструктор за ненадобностью. Конструктор выше проверяет наличие аргумента <code>name,</code> и в случае, если значение не указано, идентификатор id объекту не присваивается, а значение глобального счетчика <code>idCounter</code> не увеличивается. Таким образом, для получения уникального <code>id</code> становится обязательным указание параметра <code>name</code> при вызове конструктора <code>Employee</code>. С внесенными в пример выше изменениями, <code>mac.id</code> станет равным долгожданной, заветной единице.</p>
+
+<h3 id="Никакого_множественного_наследования">Никакого множественного наследования</h3>
+
+<p>Некоторые из объектно-ориентированных языков предоставляют возможность множественного наследования. Когда один объект может унаследовать свойства и методы множества других, не связанных друг с другом объектов. В JavaScript такого не предусмотрено.</p>
+
+<p>В JavaScript наследование свойств осуществляется путем поиска в цепочке прототипов. Так как объект может иметь лишь единственный присвоенный ему прототип, JavaScript не может осуществить наследование более чем от одной цепочки прототипов.</p>
+
+<p>Однако конструктор в JavaScript может вызывать любое количество вложенных конструкторов. Это дает некоторую, хоть и ограниченную (отсутствием прототипной связанности) видимость множественного наследования. Рассмотрим следуюший фрагмент:</p>
+
+<pre class="brush: js">function Hobbyist (hobby) {
+ this.hobby = hobby || "scuba";
+}
+
+function Engineer (name, projs, mach, hobby) {
+ this.base1 = WorkerBee;
+ this.base1(name, "engineering", projs);
+ this.base2 = Hobbyist;
+ this.base2(hobby);
+ this.machine = mach || "";
+}
+Engineer.prototype = new WorkerBee;
+
+var dennis = new Engineer("Doe, Dennis", ["collabra"], "hugo")
+</pre>
+
+<p>Предполагается, что определение <code>WorkerBee</code> задано ранее, как уже было показано в этой главе. В таком случае список свойств для объекта <code>dennis</code> примет следующий вид:</p>
+
+<pre class="brush: js">dennis.name == "Doe, Dennis"
+dennis.dept == "engineering"
+dennis.projects == ["collabra"]
+dennis.machine == "hugo"
+dennis.hobby == "scuba"
+</pre>
+
+<p>Мы видим, что <code>dennis</code> получил свойство <code>hobby</code> из конструктора <code>Hobbyist</code>. Однако, если вы добавите любое свойство в прототип конструктора <code>Hobbyist</code>:</p>
+
+<pre class="brush: js">Hobbyist.prototype.equipment = ["mask", "fins", "regulator", "bcd"]
+</pre>
+
+<p>Объект <code>dennis</code> этого свойства не унаследует.</p>
+
+<div>{{PreviousNext("Web/JavaScript/Guide/Working_with_Objects", "Web/JavaScript/Guide/Iterators_and_Generators")}}</div>
diff --git a/files/ru/web/javascript/guide/expressions_and_operators/index.html b/files/ru/web/javascript/guide/expressions_and_operators/index.html
new file mode 100644
index 0000000000..dea3cef0d6
--- /dev/null
+++ b/files/ru/web/javascript/guide/expressions_and_operators/index.html
@@ -0,0 +1,937 @@
+---
+title: Выражения и операторы
+slug: Web/JavaScript/Guide/Expressions_and_Operators
+tags:
+ - Beginner
+ - Expressions
+ - Guide
+ - Operators
+ - Начинающий
+translation_of: Web/JavaScript/Guide/Expressions_and_Operators
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}</p>
+
+<p class="summary">Эта глава описывает выражения и операторы языка JavaScript, такие как операторы присваивания, сравнения, арифметические, битовые, логические, строчные, и различные специальные операторы.</p>
+
+<ul>
+</ul>
+
+<p>Полный и детальный список операторов и выражений также доступен в этом <a href="/ru/docs/Web/JavaScript/Reference/Operators">руководстве</a>.</p>
+
+<h2 id="Операторы">Операторы</h2>
+
+<p>В JavaScript есть следующие типы операторов. Данный подраздел описывает каждый тип и содержит информацию об их приоритетах друг над другом.</p>
+
+<ul>
+ <li>{{ web.link("#Операторы_присваивания", "Операторы присваивания") }}</li>
+ <li>{{ web.link("#Операторы_сравнения", "Операторы сравнения") }}</li>
+ <li>{{ web.link("#Арифметические_операторы", "Арифметические операторы") }}</li>
+ <li>{{ web.link("#Бинарные_операторы", "Бинарные операторы") }}</li>
+ <li>{{ web.link("#Логические_операторы", "Логические операторы") }}</li>
+ <li>{{ web.link("#Строковые_операторы", "Строковые операторы") }}</li>
+ <li>{{ web.link("#Условный_(тернарный)_оператор", "Условный (тернарный) оператор")}}</li>
+ <li>{{ web.link("#Оператор_запятая", "Оператор запятая")}}</li>
+ <li>{{ web.link("#Унарные_операторы", "Унарные операторы")}}</li>
+ <li>{{ web.link("#Операторы_отношения", "Операторы отношения")}}</li>
+ <li>{{ web.link("#Приоритет_операторов", "Приоритет операторов")}}</li>
+</ul>
+
+<p>JavaScript поддерживает бинарные и унарные операторы, а также ещё один специальный тернарный оператор - условный оператор. Бинарная операция использует два операнда, один перед оператором и другой за ним:</p>
+
+<pre class="syntaxbox"><em>operand1</em> <em>operator</em> <em>operand2</em>
+</pre>
+
+<p>Например: <code>3+4</code> или <code>x*y</code>.</p>
+
+<p>В свою очередь унарная операция использует один операнд, перед или после оператора:</p>
+
+<pre class="syntaxbox"><em>operator</em> <em>operand</em>
+</pre>
+
+<p>или</p>
+
+<pre class="syntaxbox"><em>operand</em> <em>operator</em>
+</pre>
+
+<p>Например: <code>x++</code> или <code>++x</code>.</p>
+
+<h3 id="Операторы_присваивания">Операторы присваивания</h3>
+
+<p>В результате операции присваивания операнду слева от <a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">оператора присваивания</a> (знак "=") устанавливается значение , которое берётся из правого операнда. Основным оператором присваивания является  =, он присваивает значение правого операнда операнду, находящемуся слева. Таким образом, выражение x = y означает, что x присваивается значение y.</p>
+
+<p>Существуют также составные операторы присваивания, которые используются для сокращенного представления операций, описанных в следующей таблице:</p>
+
+<table class="standard-table">
+ <caption>Список операторов присваивания</caption>
+ <tbody>
+ <tr>
+ <th>Имя</th>
+ <th>Сокращенный оператор</th>
+ <th>Смысл</th>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Assignment">Присваивание</a></td>
+ <td><code>x = y</code></td>
+ <td><code>x = y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Addition_assignment">Присваивание со сложением</a></td>
+ <td><code>x += y</code></td>
+ <td><code>x = x + y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Subtraction_assignment">Присваивание с вычитанием</a></td>
+ <td><code>x -= y</code></td>
+ <td><code>x = x - y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Multiplication_assignment">Присваивание с умножением</a></td>
+ <td><code>x *= y</code></td>
+ <td><code>x = x * y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Division_assignment">Присваивание с делением</a></td>
+ <td><code>x /= y</code></td>
+ <td><code>x = x / y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Remainder_assignment">Присваивание по модулю</a></td>
+ <td><code>x %= y</code></td>
+ <td><code>x = x % y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Left_shift_assignment">Присваивание с левым сдвигом</a></td>
+ <td><code>x &lt;&lt;= y</code></td>
+ <td><code>x = x &lt;&lt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Right_shift_assignment">Присваивание с правым сдвигом</a></td>
+ <td><code>x &gt;&gt;= y</code></td>
+ <td><code>x = x &gt;&gt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Unsigned_right_shift_assignment">Присваивание с беззнаковым сдвигом вправо</a></td>
+ <td><code>x &gt;&gt;&gt;= y</code></td>
+ <td><code>x = x &gt;&gt;&gt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Bitwise_AND_assignment">Присваивание с побитовым AND</a></td>
+ <td><code>x &amp;= y</code></td>
+ <td><code>x = x &amp; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Bitwise_XOR_assignment">Присваивание с побитовым XOR</a></td>
+ <td><code>x ^= y</code></td>
+ <td><code>x = x ^ y</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators#Bitwise_OR_assignment">Присваивание с побитовым OR</a></td>
+ <td><code>x |= y</code></td>
+ <td><code>x = x | y</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Деструктуризация">Деструктуризация</h4>
+
+<p>Для более сложного присваивания в JavaScript есть синтаксис <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктуризации</a> - это выражение, которое позволяет извлекать данные из массивов или объектов, используя синтаксис, который зеркалирует конструкторы массивов и литералы объектов.</p>
+
+<pre class="brush: js">var foo = ["one", "two", "three"];
+
+// без деструктуризации
+var one = foo[0];
+var two = foo[1];
+var three = foo[2];
+
+// с деструктуризацией
+var [one, two, three] = foo;</pre>
+
+<h3 id="Операторы_сравнения">Операторы сравнения</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">Оператор сравнения</a> сравнивает свои операнды и возвращает логическое значение, базируясь на истинности сравнения. Операнды могут быть числами, строками, логическими величинами или объектами. Строки сравниваются на основании стандартного лексикографического порядка, используя Unicode-значения. В большинстве случаев, если операнды имеют разный тип, то JavaScript пробует преобразовать их в тип, подходящий для сравнения. Такое поведение обычно происходит при сравнении числовых операндов. Единственным исключением из данного правила является сравнение с использованием операторов <code>===</code> и <code>!==</code>, которые производят строгое сравнение на равенство или неравенство. Эти операторы не пытаются преобразовать операнды перед их сравнением. Следующая таблица описывает операторы сравнения в контексте следующего примера кода:</p>
+
+<pre class="brush: js">var var1 = 3, var2 = 4;
+</pre>
+
+<table class="standard-table">
+ <caption>Операторы сравнения</caption>
+ <thead>
+ <tr>
+ <th scope="col">Оператор</th>
+ <th scope="col">Описание</th>
+ <th scope="col">Примеры, возвращающие true</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Equality">Равно</a> (<code>==</code>)</td>
+ <td>Возвращает true, если операнды равны.</td>
+ <td><code>3 == var1</code><br>
+ <code>"3" == var1</code><br>
+ <code>3 == '3'</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Inequality">Не равно</a> (<code>!=</code>)</td>
+ <td>Возвращает true, если операнды не равны.</td>
+ <td><code>var1 != 4<br>
+ var2 != "3"</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Identity">Строго равно</a> (<code>===</code>)</td>
+ <td>Возвращает true, если операнды равны и имеют одинаковый тип. См. также {{jsxref("Object.is")}} и <a href="/ru/docs/Web/JavaScript/Equality_comparisons_and_sameness" title="/ru/docs/Web/JavaScript/Guide/Sameness">sameness in JS</a>.</td>
+ <td><code>3 === var1</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Nonidentity">Строго не равно</a>(<code>!==</code>)</td>
+ <td>Возвращает true, если операнды не равны и/или имеют разный тип.</td>
+ <td><code>var1 !== "3"<br>
+ 3 !== '3'</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Greater_than_operator">Больше</a> (<code>&gt;</code>)</td>
+ <td>Возвращает true, если операнд слева больше операнда справа.</td>
+ <td><code>var2 &gt; var1<br>
+ "12" &gt; 2</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Greater_than_or_equal_operator">Больше или равно</a> (<code>&gt;=</code>)</td>
+ <td>Возвращает true, если операнд слева больше или равен операнду справа.</td>
+ <td><code>var2 &gt;= var1<br>
+ var1 &gt;= 3</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Less_than_operator">Меньше</a> (<code>&lt;</code>)</td>
+ <td>Возвращает true, если операнд слева меньше операнда справа.</td>
+ <td><code>var1 &lt; var2<br>
+ "2" &lt; 12</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Less_than_or_equal_operator">Меньше или равно</a> (<code>&lt;=</code>)</td>
+ <td>Возвращает true, если операнд слева меньше или равен операнду справа.</td>
+ <td><code>var1 &lt;= var2<br>
+ var2 &lt;= 5</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<div class="note">
+<p><strong>Замечание: </strong>(<strong>=&gt;</strong>) не оператор, а нотация <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочных функций</a>.</p>
+</div>
+
+<h3 id="Арифметические_операторы">Арифметические операторы</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators">Арифметические операторы</a> используют в качестве своих операндов числа (также литералы или переменные) и в качестве результата возвращают одно числовое значение. Стандартными арифметическими операторами являются сложение (+), вычитание (-), умножение (*), и деление (/). При работе с числами с плавающей точкой эти операторы работают аналогично их работе в большинстве других языках программирования (обратите внимание, что деление на ноль возвращает бесконечность {{jsxref("Infinity")}}). Например:</p>
+
+<pre class="brush: js">console.log(1 / 2); /* возвращает 0.5 */
+console.log(1 / 2 == 1.0 / 2.0); /* возвращает true */
+</pre>
+
+<p>Кроме того, JavaScript позволяет использовать следующие арифметические операторы, представленные в таблице:</p>
+
+<table class="fullwidth-table">
+ <caption>Арифметические операторы</caption>
+ <thead>
+ <tr>
+ <th scope="col">Оператор</th>
+ <th scope="col">Описание</th>
+ <th scope="col">Пример</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder">Остаток от деления</a> (<code>%</code>)</td>
+ <td>Бинарный оператор. Возвращает целочисленный остаток от деления двух операндов.</td>
+ <td>12 % 5 вернёт 2.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment">Инкремент</a> (<code>++</code>)</td>
+ <td>Унарный оператор. Добавляет единицу к своему операнду. Если используется в качестве префикса (<code>++x</code>), то возвращает значение операнда с добавленной к нему единицей; а в случае применения в качестве окончания (<code>x++</code>) возвращает значение операнда перед добавлением к нему единицы.</td>
+ <td><code>Если x</code> равно 3, тогда <code>++x</code> установит значение <code>x</code> равным 4 и вернёт 4, напротив <code>x++</code> вернёт 3 и потом установит значение <code>x</code> равным 4.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement">Декремент</a> (<code>--</code>)</td>
+ <td>Унарный оператор. Вычитает единицу из значения своего операнда. Логика данного оператора аналогична оператору инкремента.</td>
+ <td>Если <code>x</code> равно 3, тогда <code>--x</code> установит значение <code>x</code> равным 2 и вернёт 2, напротив <code>x--</code> вернёт 3 и потом установит значение <code>x</code> равным 2.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_negation">Унарный минус</a><code>-</code></td>
+ <td>Унарный оператор. Возвращает отрицательное значение своего операнда.</td>
+ <td>Если <code>x</code> равно 3, тогда <code>-x</code> вернёт -3.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus">Унарный плюс</a> (<code>+</code>)</td>
+ <td>Унарный оператор. Пытается конвертировать операнд в число, если он ещё не оно.</td>
+ <td><code>+"3"</code> вернёт <code>3</code>.<br>
+ <code>+true</code> вернёт <code>1.</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation">Возведение в степень</a> (<code>**</code>) {{experimental_inline}}</td>
+ <td>Возводит <code>основание</code> в показатель <code>степени</code>, как, <code>основание<sup>степень</sup></code></td>
+ <td><code>2 ** 3</code> вернёт <code>8</code>.<br>
+ <code>10 ** -1</code> вернёт <code>0.1</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Битовые_(поразрядные)_операторы">Битовые (поразрядные) операторы</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Битовые операторы</a> обрабатывают свои операнды как последовательности из 32 бит (нулей и единиц), а не как десятичные, шестнадцатеричные или восьмеричные числа. Например, десятичное число 9 имеет двоичное представление 1001. Битовые операторы выполняют операции над таким двоичным представлением, но результат возвращают как обычное числовое значение JavaScript.</p>
+
+<p>Следующая таблица обобщает битовые операторы JavaScript.</p>
+
+<table class="standard-table">
+ <caption>Битовые операторы</caption>
+ <thead>
+ <tr>
+ <th scope="col">Оператор</th>
+ <th scope="col">Использование</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_AND">Побитовое И</a></td>
+ <td><code>a &amp; b</code></td>
+ <td>Возвращает единицу в каждой битовой позиции, для которой соответствующие биты обеих операндов являются единицами.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_OR">Побитовое ИЛИ </a></td>
+ <td><code>a | b</code></td>
+ <td>Возвращает единицу в каждой битовой позиции, для которой один из соответствующих битов или оба бита операндов являются единицами.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR">Исключающее ИЛИ</a></td>
+ <td><code>a ^ b</code></td>
+ <td>Возвращает единицу в каждой битовой позиции, для которой только один из соответствующих битов операндов является единицей.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT">Побитовое НЕ</a></td>
+ <td><code>~ a</code></td>
+ <td>Заменяет биты операнда на противоположные.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Left_shift">Сдвиг влево</a></td>
+ <td><code>a &lt;&lt; b</code></td>
+ <td>Сдвигает <code>a</code> в двоичном представлении на <code>b</code> бит влево, добавляя справа нули.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Right_shift">Сдвиг вправо с переносом знака</a></td>
+ <td><code>a &gt;&gt; b</code></td>
+ <td>Сдвигает <code>a</code> в двоичном представлении на <code>b</code> бит вправо, отбрасывая сдвигаемые биты.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Unsigned_right_shift">Сдвиг вправо с заполнением нулями</a></td>
+ <td><code>a &gt;&gt;&gt; b</code></td>
+ <td>Сдвигает <code>a</code> в двоичном представлении на <code>b</code> бит вправо, отбрасывая сдвигаемые биты и добавляя слева нули.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Bitwise_Logical_Operators" name="Bitwise_Logical_Operators">Битовые логические операторы</h4>
+
+<p>Основной смысл работы битовых логических операторов состоит в следующем:</p>
+
+<ul>
+ <li>Операнды преобразуются в 32-битные целые числа и представляются в виде последовательности бит (нулей и единиц). Числа, имеющие более 32 битов будут сокращены. Например, следующее число имеет больше 32 битов и сконвертируется в 32-х битное:
+ <pre class="brush: html">До : 11100110111110100000000000000110000000000001
+После : 10100000000000000110000000000001</pre>
+ </li>
+ <li>Каждый бит первого операнда связывается с соответствующим битом второго операнда: первый бит с первым битом, второй бит - со вторым, и так далее.</li>
+ <li>К каждой паре бит применяется заданный оператор, и побитово формируется итоговый результат.</li>
+</ul>
+
+<p>Например, двоичным представлением числа 9 является 1001, а двоичным представлением пятнадцати - 1111. Результаты применения к этим числам битовых логических операторов выглядят следующим образом:</p>
+
+<table class="standard-table">
+ <caption>Примеры работы битовых операторов</caption>
+ <thead>
+ <tr>
+ <th scope="col">Выражение</th>
+ <th scope="col">Результат</th>
+ <th scope="col">Двоичное описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>15 &amp; 9</code></td>
+ <td><code>9</code></td>
+ <td><code>1111 &amp; 1001 = 1001</code></td>
+ </tr>
+ <tr>
+ <td><code>15 | 9</code></td>
+ <td><code>15</code></td>
+ <td><code>1111 | 1001 = 1111</code></td>
+ </tr>
+ <tr>
+ <td><code>15 ^ 9</code></td>
+ <td><code>6</code></td>
+ <td><code>1111 ^ 1001 = 0110</code></td>
+ </tr>
+ <tr>
+ <td><code>~15</code></td>
+ <td><code>-16</code></td>
+ <td><code>~</code><code>00000000...</code><code>00001111 = </code><code>1111</code><code>1111</code><code>...</code><code>11110000</code></td>
+ </tr>
+ <tr>
+ <td><code>~9</code></td>
+ <td><code>-10</code></td>
+ <td><code>~</code><code>00000000</code><code>...</code><code>0000</code><code>1001 = </code><code>1111</code><code>1111</code><code>...</code><code>1111</code><code>0110</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Обратите внимание, что все 32 бита преобразуются с использованием битового оператора НЕ, и что величины с наиболее значимым (самым левым) битом равным 1 представляют собой отрицательные числа (в представлении дополнения до двух).</p>
+
+<h4 id="Bitwise_Shift_Operators" name="Bitwise_Shift_Operators">Битовые операторы сдвига</h4>
+
+<p>Битовые операторы сдвига используют два операнда: первый представляет величину, подлежащую сдвигу, а второй операнд указывает число битовых позиций на которое должен быть сдвинут первый операнд. Направление операции сдвига определяется используемым оператором.</p>
+
+<p>Операторы сдвига преобразуют свои операнды в 32-битные целые числа и возвращают результат того же типа, каким является левый операнд.</p>
+
+<p>Операторы сдвига перечислены в следующей таблице.</p>
+
+<table class="fullwidth-table">
+ <caption>Битовые операторы сдвига</caption>
+ <thead>
+ <tr>
+ <th scope="col">Оператор</th>
+ <th scope="col">Описание</th>
+ <th scope="col">Пример</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#&lt;&lt;_(Left_shift)">Сдвиг влево</a><br>
+ (<code>&lt;&lt;</code>)</td>
+ <td>Данный оператор сдвигает первый операнд на указанное количество бит влево. Излишние биты, сдвинутые влево, отбрасываются. Справа число дополняется нулевыми битами.</td>
+ <td><code>9&lt;&lt;2</code> равно 36, так как 1001 после сдвига на 2 бита влево превращается в 100100, что соответствует числу 36.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#>>_(Sign-propagating_right_shift)">Сдвиг вправо с переносом знака</a> (<code>&gt;&gt;</code>)</td>
+ <td>Данный оператор сдвигает первый операнд на указанное количество бит вправо. Излишние биты, сдвинутые вправо, отбрасываются. Слева число дополняется копиями крайнего слева бита.</td>
+ <td><code>9&gt;&gt;2</code> равно 2, так как 1001 после сдвига на 2 бита вправо превращается в 10, что соответствует числу 2. Подобным же образом <code>-9&gt;&gt;2</code> равно -3, так как знак сохраняется.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#>>>_(Zero-fill_right_shift)">Сдвиг вправо с заполнением нулями</a> (<code>&gt;&gt;&gt;</code>)</td>
+ <td>Данный оператор сдвигает первый операнд на указанное количество бит вправо. Излишние биты, сдвинутые вправо, отбрасываются. Слева число дополняется нулевыми битами.</td>
+ <td><code>19&gt;&gt;&gt;2</code> равно 4, так как 10011 после сдвига на 2 бита вправо превращается в 100, что соответствует числу 4. Для неотрицательных чисел сдвиг вправо с заполнением нулями и сдвиг вправо с переносом знака дают одинаковый результат.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Логические_операторы">Логические операторы</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators">Логические операторы</a> обычно используются с булевыми (логическими) значениями; при этом возвращаемое ими значение также является булевым. Однако операторы &amp;&amp; и || фактически возвращают значение одного из операндов, поэтому, если эти операторы используются с небулевыми величинами, то возвращаемая ими величина также может быть не булевой. Логические операторы описаны в следующей таблице.</p>
+
+<table class="fullwidth-table">
+ <caption>Логические операторы</caption>
+ <thead>
+ <tr>
+ <th scope="col">Оператор</th>
+ <th scope="col">Использование</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_AND">Логическое И</a><code> </code>(<code>&amp;&amp;</code>)</td>
+ <td><code>expr1 &amp;&amp; expr2</code></td>
+ <td>(Логическое И) Возвращает операнд <code>expr1</code>, если он может быть преобразован в <code>false</code>; в противном случае возвращает операнд <code>expr2</code>. Таким образом, при использовании булевых величин в качестве операндов, оператор <code>&amp;&amp;</code> возвращает <code>true</code>, если оба операнда <code>true</code>; в противном случае возвращает <code>false</code>.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR">Логическое ИЛИ </a>(<code>||</code>)</td>
+ <td><code>expr1 || expr2</code></td>
+ <td>(Логическое ИЛИ) Возвращает операнд <code>expr1</code>, если он может быть преобразован в <code>true</code>; в противном случае возвращает операнд <code>expr2</code>. Таким образом, при использовании булевых величин в качестве операндов, оператор <code>||</code> возвращает <code>true</code>, если один из операндов <code>true</code>; если же оба <code>false</code>, то возвращает <code>false</code>.</td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_NOT">Логическое НЕ </a>(<code>!</code>)</td>
+ <td><code>!expr</code></td>
+ <td>(Логическое НЕ) Возвращает <code>false</code>, если операнд может быть преобразован в <code>true</code>; в противном случае возвращает <code>true</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Примерами выражений, которые могут быть преобразованы в false являются: null, 0, NaN, пустая строка ("") или undefined.</p>
+
+<p>Следующий код демонстрирует примеры использования оператора &amp;&amp; (логическое И).</p>
+
+<pre class="brush: js">var a1 = true &amp;&amp; true; // t &amp;&amp; t возвращает true
+var a2 = true &amp;&amp; false; // t &amp;&amp; f возвращает false
+var a3 = false &amp;&amp; true; // f &amp;&amp; t возвращает false
+var a4 = false &amp;&amp; (3 == 4); // f &amp;&amp; f возвращает false
+var a5 = "Cat" &amp;&amp; "Dog"; // t &amp;&amp; t возвращает Dog
+var a6 = false &amp;&amp; "Cat"; // f &amp;&amp; t возвращает false
+var a7 = "Cat" &amp;&amp; false; // t &amp;&amp; f возвращает false
+</pre>
+
+<p>Следующий код демонстрирует примеры использования оператора || (логическое ИЛИ).</p>
+
+<pre class="brush: js">var o1 = true || true; // t || t возвращает true
+var o2 = false || true; // f || t возвращает true
+var o3 = true || false; // t || f возвращает true
+var o4 = false || (3 == 4); // f || f возвращает false
+var o5 = "Cat" || "Dog"; // t || t возвращает Cat
+var o6 = false || "Cat"; // f || t возвращает Cat
+var o7 = "Cat" || false; // t || f возвращает Cat
+</pre>
+
+<p>Следующий код демонстрирует примеры использования оператора ! (логическое НЕ).</p>
+
+<pre class="brush: js">var n1 = !true; // !t возвращает false
+var n2 = !false; // !f возвращает true
+var n3 = !"Cat"; // !t возвращает false
+</pre>
+
+<h4 id="Short-Circuit_Evaluation" name="Short-Circuit_Evaluation">Сокращённая оценка</h4>
+
+<p>Так как логические выражения вычисляются слева направо, они проверяются на возможность выполнения сокращённой оценки с использованием следующих правил:</p>
+
+<ul>
+ <li><code>false</code> &amp;&amp; anything<em> - </em>сокращение с результатом false.</li>
+ <li><code>true</code> || <em>anything - </em>сокращение с результатом true.</li>
+</ul>
+
+<p>Правила логики гарантируют, что данные вычисления всегда корректны. Обратите внимание, что часть "<em>anything"</em> представленных выше выражений не вычисляется, таким образом удается избежать любых побочных эффектов вычисления данной части.</p>
+
+<h3 id="Строковые_операторы">Строковые операторы</h3>
+
+<p>В дополнение к операторам сравнения, которые могут использоваться со строковыми значениями, оператор (+) позволяет объединить две строки, возвращая при этом третью строку, которая представляет собой объединение двух строк-операндов:</p>
+
+<pre class="brush: js">console.log("my " + "string");  // в консоли выведется строка  "my string".</pre>
+
+<p>Сокращенный оператор присваивания += также может быть использован для объединения (конкатенации) строк:</p>
+
+<pre class="brush: js">var  mystring = "alpha";  mystring += "bet"; // получается значение "alphabet" и присваивается mystring.
+</pre>
+
+<h3 id="Условный_(тернарный)_оператор" name="Условный_(тернарный)_оператор">Условный (тернарный) оператор</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Conditional_Operator">Условный оператор</a> является единственным оператором JavaScript, который использует три операнда. Оператор принимает одно из двух значений в зависимости от заданного условия. Синтаксис оператора:</p>
+
+<pre class="syntaxbox"><em>condition</em> ? <em>val1</em> : <em>val2</em>
+</pre>
+
+<div class="warning">
+<p><em>   val1 и val2 обязательно должны что-то возвращать, поэтому в этой конструкции нельзя использовать continue или break</em></p>
+</div>
+
+<p>Если <code>condition (условие)</code> - истина, то оператор принимает значение <code>val1</code>. В противном случае оператор принимает значение <code>val2</code>. Вы можете использовать условный оператор во всех случаях, где может быть использован стандартный оператор.</p>
+
+<pre class="brush: js">var status = (age &gt;= 18) ? "adult" : "minor";
+</pre>
+
+<p>Данное выражение присваивает значение "adult" переменной <code>status</code>, если <code>age</code> имеет значение 18 или более. В противном случае переменной <code>status</code> присваивается значение "minor".</p>
+
+<h3 id="Оператор_запятая" name="Оператор_запятая">Оператор запятая</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comma_Operator">Оператор запятая</a> (<code>,</code>) просто вычисляет оба операнда и возвращает значение последнего операнда. Данный оператор в основном используется внутри цикла <code>for</code>, что позволяет при каждом прохождении цикла одновременно обновлять значения нескольких переменных.</p>
+
+<p>Например, если <code>a</code> является двумерным массивом, каждая строка которого содержит 10 элементов, то следующий код с использованием оператора запятая позволяет выполнять одновременное приращение двух переменных. Данный код выводит на экран значения диагональных элементов массива:</p>
+
+<pre class="brush: js">for (var i = 0, j = 9; i &lt;= 9; i++, j--)
+ document.writeln("a[" + i + "][" + j + "]= " + a[i][j]);
+</pre>
+
+<h3 id="Унарные_операторы">Унарные операторы</h3>
+
+<p>Унарная операция - операция только с одним операндом.</p>
+
+<h4 id="delete" name="delete"><code>delete</code></h4>
+
+<p>Оператор <a href="/ru/docs/Web/JavaScript/Reference/Operators/delete">delete</a> выполняет удаление объекта, свойства объекта, или элемента массива с заданным индексом. Синтаксис оператора:</p>
+
+<pre class="brush: js">delete objectName;
+delete objectName.property;
+delete objectName[index];
+delete property; // допустимо только внутри with
+</pre>
+
+<p>где <code>objectName</code> представляет собой имя объекта, <code>property</code> - свойство объекта, а <code>index</code> - целое число, указывающее на положение (номер позиции)  элемента в массиве.</p>
+
+<p>Четвертый вариант использования позволяет удалить свойство объекта, но допускается только внутри <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code>.</p>
+
+<p>Вы можете использовать оператор <code>delete</code> для удаления переменных, объявленных неявно, но вы не можете с его помощью удалять переменные, объявленные с помощью <code>var</code>.</p>
+
+<p>После применения оператора <code>delete</code> свойство элемента меняется на <code>undefined</code>. Оператор <code>delete</code> возвращает <code>true</code> если выполнение операции возможно; оператор возвращает <code>false</code>, если выполнение операции невозможно.</p>
+
+<pre class="brush: js">x = 42;
+var y = 43;
+myobj = new Number();
+myobj.h = 4; // создаём свойство h
+delete x; // возвращает true (можно удалить переменную объявленную неявно)
+delete y; // возвращает false (нельзя удалить переменную объявленную с помощью var)
+delete Math.PI; // возвращает false (нельзя удалить встроенные свойства)
+delete myobj.h; // возвращает true (можно удалить пользовательские свойства)
+delete myobj; // возвращает true (можно удалить объект объявленный неявно)
+</pre>
+
+<h5 id="Удаление_элементов_массива">Удаление элементов массива</h5>
+
+<p>Удаление элемента массива не влияет на длину массива. Например, если вы удалите <code>a[3]</code>, элемент <code>a[4]</code> останется <code>a[4],</code> <code>a[3]</code> станет undefined.</p>
+
+<p>Когда элемент массива удаляется с помощью оператора <code>delete</code>, то из массива удаляется значение данного элемента. В следующем примере элемент <code>trees[3]</code> удален с помощью оператора <code>delete</code>. Однако, элемент <code>trees[3]</code> остается адресуемым и возвращает значение <code>undefined</code>.</p>
+
+<pre class="brush: js">var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+delete trees[3];
+if (3 in trees) {
+ // условие не выполняется
+}
+</pre>
+
+<p>Если вы хотите, чтобы элемент оставался в массиве, но имел значение undefined, то используйте ключевое слово <code>undefined</code> вместо оператора <code>delete</code>. В следующем примере элементу <code>trees[3]</code> присвоено значение <code>undefined</code>, но элемент при этом остается в массиве:</p>
+
+<pre class="brush: js">var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+trees[3] = undefined;
+if (3 in trees) {
+ // данный блок кода выполняется
+}
+</pre>
+
+<h4 id="typeof" name="typeof"><code>Оператор typeof</code></h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/typeof">Оператор<code> typeof</code></a> используется одним из следующих способов:</p>
+
+<pre class="syntaxbox">typeof operand
+typeof (operand)</pre>
+
+<p>Оператор <code>typeof</code> возвращает строку обозначающую тип невычисленного операнда. Значение <code>operand</code> может быть строкой, переменной, дескриптором, или объектом, тип которого следует определить. Скобки вокруг операнда необязательны.</p>
+
+<p>Предположим, вы определяете следующие переменные:</p>
+
+<pre class="brush: js">var myFun = new Function("5 + 2");
+var shape = "round";
+var size = 1;
+var today = new Date();
+</pre>
+
+<p>Оператор <code>typeof</code> возвращает следующие результаты для этих переменных:</p>
+
+<pre class="brush: js">typeof myFun; // возвращает "function"
+typeof shape; // возвращает "string"
+typeof size; // возвращает "number"
+typeof today; // возвращает "object"
+typeof dontExist; // возвращает "undefined"
+</pre>
+
+<p>Для дескрипторов <code>true</code> и <code>null</code> оператор <code>typeof</code> возвращает следующие результаты:</p>
+
+<pre class="brush: js">typeof true; // возвращает "boolean"
+typeof null; // возвращает "object"
+</pre>
+
+<p>Для чисел и строк оператор <code>typeof</code> возвращает следующие результаты:</p>
+
+<pre class="brush: js">typeof 62; // возвращает "number"
+typeof 'Hello world'; // возвращает "string"
+</pre>
+
+<p>Для свойств оператор <code>typeof</code> возвращает тип значения данного свойства:</p>
+
+<pre class="brush: js">typeof document.lastModified; // возвращает "string"
+typeof window.length; // возвращает "number"
+typeof Math.LN2; // возвращает "number"
+</pre>
+
+<p>Для методов и функций оператор <code>typeof</code> возвращает следующие результаты:</p>
+
+<pre class="brush: js">typeof blur; // возвращает "function"
+typeof eval; // возвращает "function"
+typeof parseInt; // возвращает "function"
+typeof shape.split; // возвращает "function"
+</pre>
+
+<p>Для встроенных объектов оператор <code>typeof</code> возвращает следующие результаты:</p>
+
+<pre class="brush: js">typeof Date; // возвращает "function"
+typeof Function; // возвращает "function"
+typeof Math; // возвращает "object"
+typeof Option; // возвращает "function"
+typeof String; // возвращает "function"</pre>
+
+<h4 id="void" name="void"><code>Оператор void</code></h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/void">Оператор<code> </code><code>void</code></a> используется любым из следующих способов:</p>
+
+<pre class="syntaxbox">void (expression)
+void expression
+</pre>
+
+<p>Оператор <code>void</code> определяет выражение, которое должно быть вычислено без возвращения результата. <code>expression</code> - это выражение JavaScript, требующее вычисления. Скобки вокруг выражения необязательны, но их использование является правилом хорошего тона.</p>
+
+<p>Вы можете использовать оператор <code>void</code> для указания на то, что операнд-выражение является гипертекстовой ссылкой. При этом выражение обрабатывается, но не загружается в текущий документ.</p>
+
+<p>Следующий код служит примером создания гипертекстовой ссылки, которая бездействует при нажатии на неё пользователем. Когда пользователь нажимает на ссылку, <code>void(0)</code> вычисляется равным <code>undefined</code>, что не приводит ни к каким действиям в JavaScript.</p>
+
+<pre class="brush: html">&lt;A HREF="javascript:void(0)"&gt;Нажмите здесь, чтобы ничего не произошло&lt;/A&gt;
+</pre>
+
+<p>Приведенный ниже код создает гипертекстовую ссылку, которая подтверждает отправку формы при клике на ней пользователем:</p>
+
+<pre class="brush: html">&lt;A HREF="javascript:void(document.form.submit())"&gt;
+Нажмите здесь, чтобы подтвердить отправку формы&lt;/A&gt;</pre>
+
+<h3 id="Операторы_отношения">Операторы отношения</h3>
+
+<p>Оператор отношения сравнивает свои операнды и возвращает результат сравнения в виде булева значения.</p>
+
+<h4 id="Оператор_in"><code>Оператор in</code></h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/in">Оператор <code>in</code></a> возвращает true, если указанный объект имеет указанное свойство. Синтаксис оператора:</p>
+
+<pre class="syntaxbox">propNameOrNumber in objectName
+</pre>
+
+<p>где <code>propNameOrNumber</code> - строка или числовое выражение, представляющее имя свойства или индекс массива, а <code>objectName</code> - имя объекта.</p>
+
+<p>Некоторые примеры способов использования оператора <code>in</code>:</p>
+
+<pre class="brush: js">// Массивы
+var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+0 in trees; // возвращает true
+3 in trees; // возвращает true
+6 in trees; // возвращает false
+"bay" in trees; // возвращает false (следует указать индекс элемента массива,
+ // а не значение элемента)
+"length" in trees; // возвращает true (length является свойством объекта Array)
+
+// Встроенные объекты
+"PI" in Math; // возвращает true
+var myString = new String("coral");
+"length" in myString; // возвращает true
+
+// Пользовательские объекты
+var mycar = {make: "Honda", model: "Accord", year: 1998};
+"make" in mycar; // возвращает true
+"model" in mycar; // возвращает true
+</pre>
+
+<h4 id="instanceof" name="instanceof">Оператор <code>instanceof</code></h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/instanceof">Оператор <code>instanceof</code> </a>возвращает true, если заданный объект является объектом указанного типа. Его синтаксис:</p>
+
+<pre class="syntaxbox">objectName instanceof objectType
+</pre>
+
+<p>где <code>objectName</code> - имя объекта, тип которого необходимо сравнить с <code>objectType</code>, а <code>objectType</code> - тип объекта, например, {{jsxref("Date")}} или {{jsxref("Array")}}.</p>
+
+<p><code><font face="Open Sans, Arial, sans-serif">Используйте оператор </font>instanceof</code>, когда вам необходимо подтвердить тип объекта во время выполнения программы. Например, при перехвате исключений вы можете создать различные программные переходы для обработки исключений в зависимости от типа обрабатываемого исключения.</p>
+
+<p>Например, следующий код использует оператор <code>instanceof</code> для проверки того, является ли объект <code>theDay</code> объектом типа <code>Date</code>. Так как <code>theDay</code> действительно является объектом типа <code>Date</code>, то программа выполняет код, содержащийся в утверждении <code>if</code>.</p>
+
+<pre class="brush: js">var theDay = new Date(1995, 12, 17);
+if (theDay instanceof Date) {
+ // выполняемый код
+}
+</pre>
+
+<h3 id="Приоритет_операторов">Приоритет операторов</h3>
+
+<p><em>Приоритет</em> операторов определяет порядок их выполнения при вычислении выражения. Вы можете влиять на приоритет операторов с помощью скобок.</p>
+
+<p>Приведенная ниже таблица описывает приоритет операторов от наивысшего до низшего.</p>
+
+<table class="standard-table">
+ <caption>Таблица 3.7 Приоритет операторов</caption>
+ <thead>
+ <tr>
+ <th scope="col">Тип оператора</th>
+ <th scope="col">Операторы</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>свойство объекта</td>
+ <td><code>. []</code></td>
+ </tr>
+ <tr>
+ <td>вызов, создание экземпляра объекта</td>
+ <td><code>() new</code></td>
+ </tr>
+ <tr>
+ <td>отрицание, инкремент</td>
+ <td><code>! ~ - + ++ -- typeof void delete</code></td>
+ </tr>
+ <tr>
+ <td>умножение, деление</td>
+ <td><code>* / %</code></td>
+ </tr>
+ <tr>
+ <td>сложение, вычитание</td>
+ <td><code>+ -</code></td>
+ </tr>
+ <tr>
+ <td>побитовый сдвиг</td>
+ <td><code>&lt;&lt; &gt;&gt; &gt;&gt;&gt;</code></td>
+ </tr>
+ <tr>
+ <td>сравнение, вхождение</td>
+ <td><code>&lt; &lt;= &gt; &gt;= in instanceof</code></td>
+ </tr>
+ <tr>
+ <td>равенство</td>
+ <td><code>== != === !==</code></td>
+ </tr>
+ <tr>
+ <td>битовое-и</td>
+ <td><code>&amp;</code></td>
+ </tr>
+ <tr>
+ <td>битовое-исключающее-или</td>
+ <td><code>^</code></td>
+ </tr>
+ <tr>
+ <td>битовое-или</td>
+ <td><code>|</code></td>
+ </tr>
+ <tr>
+ <td>логическое-и</td>
+ <td><code>&amp;&amp;</code></td>
+ </tr>
+ <tr>
+ <td>логическое-или</td>
+ <td><code>||</code></td>
+ </tr>
+ <tr>
+ <td>условный (тернарный) оператор</td>
+ <td><code>?:</code></td>
+ </tr>
+ <tr>
+ <td>присваивание</td>
+ <td><code>= += -= *= /= %= &lt;&lt;= &gt;&gt;= &gt;&gt;&gt;= &amp;= ^= |=</code></td>
+ </tr>
+ <tr>
+ <td>запятая</td>
+ <td><code>,</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Более подробная версия данной таблицы, содержащая ссылки и дополнительную информацию по каждому оператору, находится в <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table">справочнике JavaScript</a>.</p>
+
+<h2 id="Выражения">Выражения</h2>
+
+<p><em>Выражением </em>является любой корректный блок кода, который возвращает значение.</p>
+
+<p>Концептуально, существуют два типа выражений: те которые присваивают переменной значение, и те, которые вычисляют значение без его присваивания.</p>
+
+<p>Выражение <code>x = 7</code>  является примером выражения первого типа. Данное выражение использует <em>оператор</em> = для присваивания переменной<span style="line-height: 1.5;"> </span><code style="font-style: normal; line-height: 1.5;">x </code><span style="line-height: 1.5;">значения 7</span><span style="line-height: 1.5;">. Само выражение также равняется 7.</span></p>
+
+<p>Код <code>3 + 4</code> является примером выражения второго типа. Данное выражение использует  <em>оператор</em><span style="line-height: 1.5;"> "+" для сложения чисел 3 и 4 без присваивания переменной полученного результата 7.</span></p>
+
+<p>Все выражения в JavaScript делятся на следующие категории:</p>
+
+<ul>
+ <li><strong>Арифметические</strong>: вычисляются в число, например: 3.14159 (Используют {{ web.link("#Arithmetic_operators", "арифметические операторы") }}).</li>
+ <li><strong>Строковые</strong>: вычисляются в текстовую строку, например: "Fred" или "234" (Используют {{ web.link("#String_operators", "строковые операторы") }}).</li>
+ <li><strong>Логические</strong>: вычисляются в true или false (Используют {{ web.link("#Logical_operators", "логические операторы") }}).</li>
+ <li><strong>Основные выражения</strong>: Базовые ключевые слова и основные выражения в JavaScript.</li>
+ <li><strong>Левосторонние выражения</strong>: Значениям слева назначаются значения справа.</li>
+</ul>
+
+<h3 id="Основные_выражения">Основные выражения</h3>
+
+<p>Базовые ключевые слова и основные выражения в JavaScript.</p>
+
+<h4 id="this" name="this">Оператор <code>this</code></h4>
+
+<p>Используйте ключевое слово <code>this</code> для указания на текущий объект. В общем случае <code>this</code> указывает на вызываемый объект, которому принадлежит данный метод. Используйте <code>this</code> следующим образом:</p>
+
+<pre class="syntaxbox">this["propertyName"]
+this.propertyName
+</pre>
+
+<p>Предположим, функция <code>validate</code> выполняет проверку свойства <code>value</code> некоторого объекта; задан объект, а также верхняя и нижняя граница величины данного свойства:</p>
+
+<pre class="brush: js">function validate(obj, lowval, hival){
+ if ((obj.value &lt; lowval) || (obj.value &gt; hival))
+ alert("Неверное значение!");
+}
+</pre>
+
+<p>Вы можете вызвать функцию <code>validate</code> для обработчика события <code>onChange</code> для каждого элемента формы, используя <code>this</code> для указания на элемент формы, как это показано в следующем примере:</p>
+
+<pre class="brush: html">&lt;B&gt;Введите число от 18 до 99:&lt;/B&gt;
+&lt;INPUT TYPE="text" NAME="age" SIZE=3
+ onChange="validate(this, 18, 99);"&gt;
+</pre>
+
+<h4 id="Оператор_группировки">Оператор группировки</h4>
+
+<p>Оператор группировки <code>"скобки" ( )</code> контролирует приоритет вычисления выражений. Например, вы можете переопределить порядок - "умножение и деление, а потом сложение и вычитание", так чтобы, например, чтобы сложение выполнялось до умножения:</p>
+
+<pre class="brush: js">var a = 1;
+var b = 2;
+var c = 3;
+
+// обычный порядок
+a + b * c // 7
+// выполняется, как обычно, так
+a + (b * c) // 7
+
+// теперь поменяем порядок
+// сложение до умножения
+(a + b) * c // 9
+
+// что эквивалентно следующему
+a * c + b * c // 9</pre>
+
+<h4 id="Упрощенный_синтаксис_создания_массивов_и_генераторов">Упрощенный синтаксис создания массивов и генераторов</h4>
+
+<p>Упрощенный синтаксис - экспериментальная возможность JavaScript, которая возможно будет добавлена в будущие версии ECMAScript. Есть 2 версии синтаксиса:</p>
+
+<dl>
+ <dt>{{experimental_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}</dt>
+ <dd>Упрощенный синтаксис для массивов.</dd>
+ <dt>{{experimental_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}</dt>
+ <dd>Упрощенный синтаксис для генераторов.</dd>
+</dl>
+
+<p>Упрощенные синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например:</p>
+
+<pre class="brush: js">[for (i of [ 1, 2, 3 ]) i*i ];
+// [ 1, 4, 9 ]
+
+var abc = [ "A", "B", "C" ];
+[for (letters of abc) letters.toLowerCase()];
+// [ "a", "b", "c" ]</pre>
+
+<h3 id="Левосторонние_выражения">Левосторонние выражения</h3>
+
+<p>Значениям слева назначаются значения справа.</p>
+
+<h4 id="new" name="new"><code>new</code></h4>
+
+<p>Вы можете использовать <a href="/ru/docs/Web/JavaScript/Reference/Operators/new">оператор <code>new</code></a> для создания экземпляра объекта пользовательского типа или одного из встроенных объектов. Используйте оператор <code>new</code> следующим образом:</p>
+
+<pre class="brush: js">var objectName = new objectType([param1, param2, ..., paramN]);
+</pre>
+
+<h4 id="super">super</h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/super">Ключевое слово</a> используется, чтобы вызывать функции родительского объекта. Это полезно и с <a href="/ru/docs/Web/JavaScript/Reference/Classes">классами</a> для вызова конструктора родителя, например.</p>
+
+<pre class="brush: js">super([arguments]); // вызывает конструктор родителя. super.functionOnParent([arguments]);</pre>
+
+<h4 id="Оператор_расширения">Оператор расширения</h4>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Spread_operator">Оператор расширения</a> позволяет выражению расширяться в местах с множеством аргументов (для вызовов функций) или множестве элементов (для массивов).</p>
+
+<p><strong>Пример:</strong> Сегодня, если у вас есть массив и вы хотите создать новый с существующей частью первого, то литерального синтаксиса массива уже не достаточно, и вы должны писать императивный (без вариантов) код, используя комбинацию <code>push</code>, <code>splice</code>, <code>concat</code> и т.д. Но с этим оператором код становится более коротким:</p>
+
+<pre class="brush: js">var parts = ['shoulder', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];</pre>
+
+<p>Похожим образом оператор работает с вызовами функций:</p>
+
+<pre class="brush: js">function f(x, y, z) { }
+var args = [0, 1, 2];
+f(...args);</pre>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Functions", "Web/JavaScript/Guide/Numbers_and_dates")}}</p>
+
+<h3 id="sect1"> </h3>
+
+<h2 id="sect2"> </h2>
+
+<ul>
+</ul>
diff --git a/files/ru/web/javascript/guide/functions/index.html b/files/ru/web/javascript/guide/functions/index.html
new file mode 100644
index 0000000000..5e487e354d
--- /dev/null
+++ b/files/ru/web/javascript/guide/functions/index.html
@@ -0,0 +1,669 @@
+---
+title: Функции
+slug: Web/JavaScript/Guide/Functions
+tags:
+ - Основы
+ - Функции
+translation_of: Web/JavaScript/Guide/Functions
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}</div>
+
+<h2 id="Функции_в_JavaScript">Функции в JavaScript</h2>
+
+<p>Функции - ключевая концепция в JavaScript. Важнейшей особенностью языка является {{interwiki("wikipedia", "Функции_первого_класса", "первоклассная поддержка функций")}}​ <em>(functions as first-class citizen)</em>. Любая <strong>функция это объект,</strong> и следовательно ею можно манипулировать как объектом, в частности:</p>
+
+<ul>
+ <li>передавать как аргумент и возвращать в качестве результата при вызове других функций ({{interwiki("wikipedia", "Функция_высшего_порядка", "функций высшего порядка")}});</li>
+ <li>создавать анонимно и присваивать в качестве значений переменных или свойств объектов.</li>
+</ul>
+
+<p>Это определяет высокую выразительную мощность JavaScript и позволяет относить его к числу языков, реализующих {{interwiki("wikipedia", "Функциональное_программирование", "функциональную парадигму программирования")}} (что само по себе есть очень круто по многим соображениям).</p>
+
+<p><strong>Функция в JavaScript</strong> специальный тип объектов, позволяющий формализовать средствами языка определённую логику поведения и обработки данных.</p>
+
+<p>Для понимания работы функций необходимо (и достаточно?) иметь представление о следующих моментах:</p>
+
+<ul>
+ <li>способы <a href="#definition">объявления</a></li>
+ <li>способы <a href="#call">вызова</a></li>
+ <li>параметры и аргументы вызова (<code>arguments</code>)</li>
+ <li>область данных (<code>Scope</code>) и замыкания (<code>Closures</code>)</li>
+ <li>объект привязки (<code>this</code>)</li>
+ <li>возвращаемое значение (<code>return</code>)</li>
+ <li>исключения (<code>throw</code>)</li>
+ <li>использование в качестве конструктора объектов</li>
+ <li>сборщик мусора (<code>garbage collector</code>)</li>
+</ul>
+
+<h2 id="Объявление_функций"><a id="definition" name="definition"></a>Объявление функций</h2>
+
+<h3 id="Функции_вида_function_declaration_statement">Функции вида "function declaration statement"</h3>
+
+<p>Объявление функции (<em>function definition</em>, или <em>function declaration</em>, или <em>function statement</em>) состоит из ключевого слова <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/function">function</a></code> и следующих частей:</p>
+
+<ul>
+ <li>Имя функции.</li>
+ <li>Список параметров (принимаемых функцией) заключенных в круглые скобки <code>()</code> и разделенных запятыми.</li>
+ <li>Инструкции, которые будут выполненны после вызова функции, заключают в фигурные скобки <code>{ }</code>.</li>
+</ul>
+
+<p>Например, следующий код объявляет простую функцию с именем <code>square:</code></p>
+
+<pre class="brush: js">function square(number) {
+ return number * number;
+}
+</pre>
+
+<p>Функция <code>square</code> принимает один параметр, названный <code>number.</code> Состоит из одной инструкции, которая означает вернуть параметр этой функции (это <code>number</code>) умноженный на самого себя. Инструкция <a href="/ru/docs/Web/JavaScript/Reference/Statements/return">return</a> указывает на значение, которые будет возвращено функцией.</p>
+
+<pre class="brush: js">return number * number;
+</pre>
+
+<p>Примитивные параметры (например, число) передаются функции значением; <strong>значение</strong> передаётся в функцию, но если функция меняет значение параметра,<strong> это изменение не отразится глобально или после вызова функции.</strong></p>
+
+<p>Если Вы передадите объект как параметр (не примитив, например, <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array" title="The JavaScript Array object is a global object that is used in the construction of arrays; which are high-level, list-like objects.">массив</a></code> или определяемые пользователем объекты), и функция изменит свойство переданного в неё объекта, это изменение будет видно и вне функции, как показано в следующим примере:</p>
+
+<pre class="brush: js">function myFunc(theObject) {
+ theObject.make = 'Toyota';
+}
+
+var mycar = {make: 'Honda', model: 'Accord', year: 1998};
+var x, y;
+
+x = mycar.make; // x получает значение "Honda"
+
+myFunc(mycar);
+y = mycar.make; // y получает значение "Toyota"
+ // (свойство было изменено функцией)
+</pre>
+
+<h3 id="Функции_вида_function_definition_expression">Функции вида "function definition expression"</h3>
+
+<p>Функция вида "function declaration statement" по синтаксису является инструкцией (<em>statement</em>), ещё функция может быть вида "function definition  expression". Такая функция может быть <strong>анонимной</strong> (она не имеет имени). Например, функция <code>square</code> может быть вызвана так:</p>
+
+<pre class="brush: js">var square = function(number) { return number * number; };
+var x = square(4); // x получает значение 16
+</pre>
+
+<p>Однако, имя может быть и присвоено для вызова самой себя внутри самой функции и для отладчика (<em>debugger</em>) для идентифицирования функции в стек-треках (<em>stack traces</em>; "trace" — "след" / "отпечаток").</p>
+
+<pre class="brush: js">var factorial = function fac(n) { return n &lt; 2 ? 1 : n * fac(n - 1); };
+
+console.log(factorial(3));
+</pre>
+
+<p>Функции вида "function definition expression" удобны, когда функция передается аргументом другой функции. Следующий пример показывает функцию <code>map</code>, которая должна получить функцию первым аргументом и массив вторым.</p>
+
+<pre class="brush: js">function map(f, a) {
+ var result = [], // Create a new Array
+ i;
+ for (i = 0; i != a.length; i++)
+ result[i] = f(a[i]);
+ return result;
+}
+</pre>
+
+<p>В следующим коде наша функция принимает функцию, которая является function definition expression, и выполняет его для каждого элемента принятого массива вторым аргументом.</p>
+
+<pre class="brush: js">function map(f, a) {
+ var result = []; // Create a new Array
+ var i; // Declare variable
+ for (i = 0; i != a.length; i++)
+ result[i] = f(a[i]);
+ return result;
+}
+var f = function(x) {
+ return x * x * x;
+}
+var numbers = [0, 1, 2, 5, 10];
+var cube = map(f,numbers);
+console.log(cube);</pre>
+
+<p>Функция возвращает: [0, 1, 8, 125, 1000].</p>
+
+<p>В JavaScript функция может быть объявлена с условием. Например, следующая функция будет присвоена переменной <code>myFunc</code> только, если <code>num</code> равно 0: </p>
+
+<pre class="brush: js">var myFunc;
+if (num === 0) {
+ myFunc = function(theObject) {
+ theObject.make = 'Toyota';
+ }
+}</pre>
+
+<p>В дополнение к объявлениям функций, описанных здесь, Вы также можете использовать конструктор <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function</a> для создания функций из строки во время выполнения (<em>runtime</em>), подобно <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/eval" title="The eval() method evaluates JavaScript code represented as a string."><code>eval()</code></a>.</p>
+
+<p><strong>Метод</strong> — это функция, которая является свойством объекта. Узнать больше про объекты и методы можно по ссылке: <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects">Работа с объектами</a>.</p>
+
+<h2 id="Вызовы_функций"><a id="call" name="call"></a>Вызовы функций</h2>
+
+<p>Объявление функции не выполняет её. Объявление функции просто называет функцию и указывает, что делать при вызове функции.</p>
+
+<p><strong>Вызов</strong> функции фактически выполняет указанные действия с указанными параметрами. Например, если Вы определите функцию <code>square</code>, Вы можете вызвать её следующим образом:</p>
+
+<pre class="brush: js">square(5);</pre>
+
+<p>Эта инструкция вызывает функцию с аргументом 5. Функция вызывает свои инструкции и возвращает значение 25.</p>
+
+<p>Функции могут быть в области видимости, когда они уже определены, но функции вида "function declaration statment" могут быть подняты (<em><a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/%D0%9F%D0%BE%D0%B4%D0%BD%D1%8F%D1%82%D0%B8%D0%B5">поднятие </a>—</em> <em>hoisting</em>), также как в этом примере:</p>
+
+<pre class="brush: js">console.log(square(5));
+/* ... */
+function square(n) { return n * n; }</pre>
+
+<p>Область видимости функции — функция, в котором она определена, или целая программа, если она объявлена по уровню выше.</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> Это работает только тогда, когда объявлении функции использует вышеупомянутый синтаксис (т.е. <code>function funcName(){}</code>). Код ниже не будет работать. Имеется в виду то, что поднятие функции работает только с function declaration и не работает с function expression.</p>
+</div>
+
+<pre class="brush: js example-bad">console.log(square); // square поднят со значением undefined.
+console.log(square(5)); // TypeError: square is not a function
+var square = function(n) {
+ return n * n;
+}</pre>
+
+<p>Аргументы функции не ограничиваются строками и числами. Вы можете передавать целые объекты в функцию. Функция <code>show_props()</code> (объявленная в <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects">Работа с объектами</a>) является примером функции, принимающей объекты аргументом.</p>
+
+<p>Функция может вызвать саму себя. Например, вот функция рекурсивного вычисления факториала:</p>
+
+<pre class="brush: js">function factorial(n) {
+ if ((n === 0) || (n === 1))
+ return 1;
+ else
+ return (n * factorial(n - 1));
+}
+</pre>
+
+<p>Затем вы можете вычислить факториалы от одного до пяти следующим образом:</p>
+
+<pre class="brush: js">var a, b, c, d, e;
+a = factorial(1); // a gets the value 1
+b = factorial(2); // b gets the value 2
+c = factorial(3); // c gets the value 6
+d = factorial(4); // d gets the value 24
+e = factorial(5); // e gets the value 120
+</pre>
+
+<p>Есть другие способы вызвать функцию. Существуют частые случаи, когда функции необходимо вызывать динамически, или поменять номера аргументов функции, или необходимо вызвать функцию с привязкой к определенному контексту. Оказывается, что функции сами по себе являются объектами, и эти объекты в свою очередь имеют методы (посмотрите объект <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function" title="The Function constructor creates a new Function object. Calling the constructor directly can create functions dynamically, but suffers from security and similar (but far less significant) performance issues similar to eval. However, unlike eval, the Function constructor allows executing code in the global scope, prompting better programming habits and allowing for more efficient code minification."><code>Function</code></a>). Один из них это метод <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="The apply() method calls a function with a given this value, and arguments provided as an array (or an array-like object).">apply()</a></code>, использование которого может достигнуть этой цели.</p>
+
+<h2 id="Область_видимости_функций"><a id="definition" name="definition"></a>Область видимости функций</h2>
+
+<p><u><em>(function scope)</em></u></p>
+
+<p>Переменные объявленные в функции не могут быть доступными где-нибудь вне этой функции, поэтому переменные (которые нужны именно для функции) объявляют только в scope функции. При этом функция имеет доступ ко всем переменным и функциям, объявленным внутри её scope. Другими словами функция объявленная в глобальном scope имеет доступ ко всем переменным в глобальном scope. Функция объявленная внутри другой функции ещё имеет доступ и ко всем переменным её родителькой функции и другим переменным, к которым эта родительская функция имеет доступ.</p>
+
+<pre class="brush: js">// Следующие переменные объявленны в глобальном scope
+var num1 = 20,
+ num2 = 3,
+ name = 'Chamahk';
+
+// Эта функция объявленна в глобальном scope
+function multiply() {
+ return num1 * num2;
+}
+
+multiply(); // вернет 60
+
+// Пример вложенной функции
+function getScore() {
+ var num1 = 2,
+ num2 = 3;
+
+ function add() {
+ return name + ' scored ' + (num1 + num2);
+ }
+
+ return add();
+}
+
+getScore(); // вернет "Chamahk scored 5"
+</pre>
+
+<h2 id="Scope_и_стек_функции"><a id="definition" name="definition"></a>Scope и стек функции</h2>
+
+<p><em><u>(function stack)</u></em></p>
+
+<h3 id="Рекурсия">Рекурсия</h3>
+
+<p>Функция может вызывать саму себя. Три способа такого вызова:</p>
+
+<ol>
+ <li>по имени функции</li>
+ <li><code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee</a></code></li>
+ <li>по переменной, которая ссылается на функцию</li>
+</ol>
+
+<p>Для примера рассмотрим следующие функцию:</p>
+
+<pre class="brush: js">var foo = function bar() {
+ // statements go here
+};</pre>
+
+<p>Внутри функции (<em>function body</em>) все следующие вызовы эквивалентны:</p>
+
+<ol>
+ <li><code>bar()</code></li>
+ <li><code>arguments.callee()</code></li>
+ <li><code>foo()</code></li>
+</ol>
+
+<p>Функция, которая вызывает саму себя, называется <em>рекурсивной функцией</em> (<em>recursive function</em>). Получается, что рекурсия аналогична циклу (<em>loop</em>). Оба вызывают некоторый код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла, вернее бесконечной рекурсии). Например, следующий цикл:</p>
+
+<pre class="brush: js">var x = 0;
+while (x &lt; 10) { // "x &lt; 10" — это условие для цикла
+ // do stuff
+ x++;
+}</pre>
+
+<p>можно было изменить на рекурсивную функцию и вызовом этой функции:</p>
+
+<pre class="brush: js">function loop(x) {
+ if (x &gt;= 10) // "x &gt;= 10" — это условие для конца выполения (тоже самое, что "!(x &lt; 10)")
+ return;
+ // делать что-то
+ loop(x + 1); // рекурсионный вызов
+}
+loop(0);
+</pre>
+
+<p>Однако некоторые алгоритмы не могут быть простыми повторяющимися циклами. Например, получение всех элементов структуры дерева (например, <a href="https://developer.mozilla.org/ru/docs/DOM">DOM</a>) проще всего реализуется использованием рекурсии:</p>
+
+<pre class="brush: js">function walkTree(node) {
+ if (node == null) //
+ return;
+ // что-то делаем с элементами
+ for (var i = 0; i &lt; node.childNodes.length; i++) {
+ walkTree(node.childNodes[i]);
+ }
+}</pre>
+
+<p>В сравнении с функцией <code>loop</code>, каждый рекурсивный вызов сам вызывает много рекурсивных вызовов.</p>
+
+<p>Также возможно превращение некоторых рекурсивных алгоритмов в нерекурсивные, но часто их логика очень сложна, и для этого потребуется использование стека (<em>stack</em>). По факту рекурсия использует stack: function stack.</p>
+
+<p>Поведение stack'а можно увидеть в следующем примере:</p>
+
+<pre class="brush: js">function foo(i) {
+ if (i &lt; 0)
+ return;
+ console.log('begin: ' + i);
+ foo(i - 1);
+ console.log('end: ' + i);
+}
+foo(3);
+
+// Output:
+
+// begin: 3
+// begin: 2
+// begin: 1
+// begin: 0
+// end: 0
+// end: 1
+// end: 2
+// end: 3</pre>
+
+<h3 id="Вложенные_функции_nested_functions_и_замыкания_closures">Вложенные функции (nested functions) и замыкания (closures)</h3>
+
+<p>Вы можете вложить одну функцию в другую. Вложенная функция (<em>nested function</em>;<em> inner</em>) приватная (<em>private</em>) и она помещена в другую функцию (<em>outer</em>). Так образуется <em>замыкание</em> (<em>closure</em>). Closure — это выражение (обычно функция), которое может иметь свободные переменные вместе со средой, которая связывает эти переменые (что "закрывает" (<em>"close"</em>) выражение).</p>
+
+<p>Поскольку вложенная функция это closure, это означает, что вложенная функция может "унаследовать" (<em>inherit</em>) аргументы и переменные функции, в которую та вложена. Другими словами, вложенная функция содержит scope внешней (<em>"outer"</em>) функции.</p>
+
+<p>Подведем итог:</p>
+
+<ul>
+ <li>Вложенная функция имеет доступ ко всем инструкциям внешней функции.</li>
+</ul>
+
+<ul>
+ <li>Вложенная функция формирует closure: она может использовать аргументы и переменные внешней функции, в то время как внешняя функция не может использовать аргументы и переменные вложенной функции.</li>
+</ul>
+
+<p>Следующий пример показывает вложенную функцию:</p>
+
+<pre class="brush: js">function addSquares(a, b) {
+ function square(x) {
+ return x * x;
+ }
+ return square(a) + square(b);
+}
+a = addSquares(2, 3); // возвращает 13
+b = addSquares(3, 4); // возвращает 25
+c = addSquares(4, 5); // возвращает 41
+</pre>
+
+<p>Поскольку вложенная функция формирует closure, Вы можете вызвать внешную функцию и указать аргументы для обоих функций (для outer и innner).</p>
+
+<pre class="brush: js">function outside(x) {
+ function inside(y) {
+ return x + y;
+ }
+ return inside;
+}
+fn_inside = outside(3); // Подумайте над этим: дайте мне функцию,
+  // который передай 3
+
+result = fn_inside(5); // возвращает 8
+
+result1 = outside(3)(5); // возвращает 8
+</pre>
+
+<h3 id="Сохранение_переменных">Сохранение переменных</h3>
+
+<p>Обратите внимание, значение <code>x</code> сохранилось, когда возвращалось <code>inside</code>. Closure должно сохранять аргументы и переменные во всем scope. Поскольку каждый вызов предоставляет потенциально разные аргументы, создается новый closure для каждого вызова во вне. Память может быть очищена только тогда, когда <code>inside</code> уже возвратился и больше не доступен.</p>
+
+<p>Это не отличается от хранения ссылок в других объектах, но часто менее очевидно, потому что не устанавливаются ссылки напрямую и нельзя посмотреть там.</p>
+
+<h3 id="Несколько_уровней_вложенности_функций_Multiply-nested_functions">Несколько уровней вложенности функций (Multiply-nested functions)</h3>
+
+<p>Функции можно вкадывать несколько раз, т.е. функция (A) хранит в себе функцию (B), которая хранит в себе функцию (C). Обе фукнкции B и C формируют closures, так B имеет доступ к переменным и аргументам A, и C имеет такой же доступ к B. В добавок, поскольку C имеет такой доступ к B, который имеет такой же доступ к A, C ещё имеет такой же доспут к A. Таким образом closures может хранить в себе несколько scope; они рекурсивно хранят scope функций, содержащих его. Это называется <em>chaining</em> (<em>chain — цепь</em>; Почему названо "chaining" будет объяснено позже)</p>
+
+<p>Рассмотрим следующий пример:</p>
+
+<pre class="brush: js">function A(x) {
+ function B(y) {
+ function C(z) {
+ console.log(x + y + z);
+ }
+ C(3);
+ }
+ B(2);
+}
+A(1); // в консоле выведится 6 (1 + 2 + 3)</pre>
+
+<p>В этом примере C имеет доступ к <code>y</code> функции <code>B</code> и к <code>x</code> функции <code>A</code>. Так получается, потому что:</p>
+
+<ol>
+ <li>Функция <code>B</code> формирует closure, включающее <code>A</code>, т.е. <code>B</code> имеет доступ к аргументам и переменным функции <code>A</code>.</li>
+ <li>Функция <code>C</code> формирует closure, включающее <code>B</code>.</li>
+ <li>Раз closure функции <code>B</code> включает <code>A</code>, то closure <code>С</code> тоже включает A, <code>C</code> имеет доступ к аргументам и переменным обоих функций <code>B</code> <em>и</em> <code>A</code>. Другими словами, <code>С</code> cвязывает <em>цепью</em> (<em>chain</em>) scopes функций <code>B</code> и <code>A</code> в таком порядке.</li>
+</ol>
+
+<p>В обратном порядке, однако, это не верно. <code>A</code> не имеет доступ к переменным и аргументам <code>C</code>, потому что <code>A</code> не имеет такой доступ к <code>B</code>. Таким образом, <code>C</code> остается приватным только для <code>B</code>.</p>
+
+<h3 id="Конфликты_имен_Name_conflicts">Конфликты имен (Name conflicts)</h3>
+
+<p>Когда два аргумента или переменных в scope у closure имеют одинаковые имена, происходит <em>конфликт имени</em> (<em>name conflict</em>). Более вложенный (<em>more inner</em>) scope имеет приоритет, так самый вложенный scope имеет наивысший приоритет, и наоборот. Это цепочка областей видимости (<em>scope chain</em>). Самым первым звеном является самый глубокий scope, и наоборот. Рассмотрим следующие:</p>
+
+<pre class="brush: js">function outside() {
+ var x = 5;
+ function inside(x) {
+ return x * 2;
+ }
+ return inside;
+}
+
+outside()(10); // возвращает 20 вместо 10</pre>
+
+<p>Конфликт имени произошел в инструкции <code>return x * 2</code> между параметром <code>x</code> функции <code>inside</code> и переменной <code>x</code> функции <code>outside</code>. Scope chain здесь будет таким: {<code>inside</code> ==&gt; <code>outside</code> ==&gt; глобальный объект (<em>global object</em>)}. Следовательно <code>x</code> функции <code>inside</code> имеет больший приоритет по сравнению с <code>outside</code>, и нам вернулось 20 (= 10 * 2), а не 10 (= 5 * 2).</p>
+
+<h2 id="Замыкания"><a id="definition" name="definition"></a>Замыкания</h2>
+
+<p><em><u>(Closures)</u></em></p>
+
+<p>Closures это один из главных особенностей JavaScript. JavaScript разрешает вложенность функций и предоставляет вложенной функции полный доступ ко всем переменным и функциям, объявленным внутри внешней функции (и другим переменным и функцим, к которым имеет доступ эта внешняя функция).</p>
+
+<p>Однако, внешняя функция не имеет доступа к переменным и функциям, объявленным во внутренней функции. Это обеспечивает своего рода инкапсуляцию для переменных внутри вложенной функции.</p>
+
+<p>Также, поскольку вложенная функция имеет доступ к scope внешней функции, переменные и функции, объявленные во внешней функции, будет продолжать существовать и после её выполнения для вложенной функции, если на них и на неё сохранился доступ (имеется ввиду, что переменные, объявленные во внешней функции, сохраняются, только если внутренняя функция обращается к ним).</p>
+
+<p>Closure создается, когда вложенная функция как-то стала доступной в неком scope вне внешней функции.</p>
+
+<pre class="brush: js">var pet = function(name) { // Внешняя функция объявила переменную "name"
+ var getName = function() {
+ return name; // Вложенная функция имеет доступ к "name" внешней функции
+ }
+ return getName; // Возвращаем вложенную функцию, тем самым сохраняя доступ
+  // к ней для другого scope
+}
+myPet = pet('Vivie');
+
+myPet(); // Возвращается "Vivie",
+  // т.к. даже после выполнения внешней функции
+  // name сохранился для вложенной функции
+</pre>
+
+<p>Более сложный пример представлен ниже. Объект с методами для манипуляции вложенной функции внешней функцией можно вернуть (<em>return</em>).</p>
+
+<pre class="brush: js">var createPet = function(name) {
+ var sex;
+
+ return {
+ setName: function(newName) {
+ name = newName;
+ },
+
+ getName: function() {
+ return name;
+ },
+
+ getSex: function() {
+ return sex;
+ },
+
+ setSex: function(newSex) {
+ if(typeof newSex === 'string' &amp;&amp; (newSex.toLowerCase() === 'male' ||
+ newSex.toLowerCase() === 'female')) {
+ sex = newSex;
+ }
+ }
+ }
+}
+
+var pet = createPet('Vivie');
+pet.getName(); // Vivie
+
+pet.setName('Oliver');
+pet.setSex('male');
+pet.getSex(); // male
+pet.getName(); // Oliver</pre>
+
+<p>В коде выше переменная <code>name</code> внешней функции доступна для вложенной функции, и нет другого способа доступа к вложенным переменным кроме как через вложенную функцию. Вложенные переменные вложенной функции являются безопасными хранилищами для внешних аргументов и переменных. Они содержат "постоянные" и "инкапсулированные" данные для работы с ними вложенными функциями. Функции даже не должны присваиваться переменной или иметь имя.</p>
+
+<pre class="brush: js">var getCode = (function() {
+ var apiCode = '0]Eal(eh&amp;2'; // A code we do not want outsiders to be able to modify...
+
+ return function() {
+ return apiCode;
+ };
+}());
+
+getCode(); // Returns the apiCode
+</pre>
+
+<p>Однако есть ряд подводных камней, которые следует учитывать при использовании замыканий. Если закрытая функция определяет переменную с тем же именем, что и имя переменной во внешней области, нет способа снова ссылаться на переменную во внешней области.</p>
+
+<pre class="brush: js">var createPet = function(name) { // The outer function defines a variable called "name".
+ return {
+ setName: function(name) { // The enclosed function also defines a variable called "name".
+ name = name; // How do we access the "name" defined by the outer function?
+ }
+ }
+}
+</pre>
+
+<h2 id="Использование_объекта_arguments"><a id="definition" name="definition"></a>Использование объекта arguments</h2>
+
+<p>Объект arguments функции является псевдо-массивом. Внутри функции Вы можете ссылаться к аргументам следующим образом:</p>
+
+<pre class="brush: js">arguments[i]
+</pre>
+
+<p>где <code>i</code> — это порядковый номер аргумента, отсчитывающийся с 0. К первому аргументу, переданному функции, обращаются так <code>arguments[0]</code>. А получить количество всех аргументов — <code>arguments.length</code>.</p>
+
+<p>С помощью объекта <code>arguments</code> Вы можете вызвать функцию, передавая в неё больше аргументов, чем формально объявили принять. Это очень полезно, если Вы не знаете точно, сколько аргументов должна принять Ваша функция. Вы можете использовать <code>arguments.length</code> для определения количества аргументов, переданных функции, а затем получить доступ к каждому аргументу, используя объект <code>arguments</code>.</p>
+
+<p>Для примера рассмотрим функцию, которая конкатенирует несколько строк. Единственным формальным аргументом для функции будет строка, которая указывает символы, которые разделяют элементы для конкатенации. Функция определяется следующим образом:</p>
+
+<pre class="brush: js">function myConcat(separator) {
+ var result = '';
+ var i;
+
+ // iterate through arguments
+ for (i = 1; i &lt; arguments.length; i++) {
+ result += arguments[i] + separator;
+ }
+ return result;
+}</pre>
+
+<p>Вы можете передавать любое количество аргументов в эту функцию, и он конкатенирует каждый аргумент в одну строку.</p>
+
+<pre class="brush: js">// возвращает "red, orange, blue, "
+myConcat(', ', 'red', 'orange', 'blue');
+
+// возвращает "elephant; giraffe; lion; cheetah; "
+myConcat('; ', 'elephant', 'giraffe', 'lion', 'cheetah');
+
+// возвращает "sage. basil. oregano. pepper. parsley. "
+myConcat('. ', 'sage', 'basil', 'oregano', 'pepper', 'parsley');
+</pre>
+
+<p>Т.к. <code>arguments</code> является псевдо-массивом, к нему применимы некоторые методы массивов, например, for .. in</p>
+
+<pre>function func() {
+ for (value in arguments){
+ console.log(value);
+ }
+}
+
+func(1, 2, 3);
+// 1
+// 2
+// 3
+</pre>
+
+<div class="note">
+<p><strong>Примечание:</strong> <code>arguments</code> является псевдо-массивом, но не массивом. Это псевдо-массив, в котором есть пронумерованные индексы и свойство <code>length</code>. Однако он не обладает всеми методами массивов.</p>
+</div>
+
+<p>Рассмотрите объект <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function" title="The Function constructor creates a new Function object. Calling the constructor directly can create functions dynamically, but suffers from security and similar (but far less significant) performance issues similar to eval. However, unlike eval, the Function constructor allows executing code in the global scope, prompting better programming habits and allowing for more efficient code minification.">Function</a></code> в JavaScript-справочнике для большей информации.</p>
+
+<h2 id="Параметры_функции"><a id="definition" name="definition"></a>Параметры функции</h2>
+
+<p>Начиная с ECMAScript 2015 появились два новых вида параметров: параметры по умолчанию (<em>default parameters</em>) и оставшиеся параметры (<em>rest parameters</em>).</p>
+
+<h3 id="Параметры_по_умолчанию_Default_parameters">Параметры по умолчанию (Default parameters)</h3>
+
+<p>В JavaScript параметры функции по умолчанию имеют значение <code>undefined</code>. Однако в некоторых ситуация может быть полезным поменять значение по умолчанию. В таких случаях default parameters могут быть весьма кстати.</p>
+
+<p>В прошлом для этого было необходимо в теле функции проверять значения параметров на <code>undefined</code> и в положительном случае менять это значение на дефолтное (<em>default</em>). В следующем примере в случае, если при вызове не предоставили значение для <code>b</code>, то этим значением станет <code>undefined</code>, тогда результатом вычисления <code>a * b</code> в функции <code>multiply</code> будет <code>NaN</code>. Однако во второй строке мы поймаем это значение:</p>
+
+<pre class="brush: js">function multiply(a, b) {
+ b = typeof b !== 'undefined' ? b : 1;
+
+ return a * b;
+}
+
+multiply(5); // 5</pre>
+
+<p>С параметрами по умолчанию проверка наличия значения параметра в теле функции не нужна. Теперь Вы можете просто указать значение по умолчанию для параметра <code>b</code> в объявлении функции:</p>
+
+<pre class="brush: js">function multiply(a, b = 1) {
+ return a * b;
+}
+
+multiply(5); // 5</pre>
+
+<p>Для более детального рассмотрения ознакомьтесь с <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметрами по умолчанию</a>.</p>
+
+<h3 id="Оставшиеся_параметры_Rest_parameters">Оставшиеся параметры (Rest parameters)</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">Оставшиеся параметры</a> предоставляют нам массив неопределенных аргументов. В примере мы используем оставшиеся параметры, чтобы собрать аргументы с индексами со 2-го до последнего. Затем мы умножим каждый из них на значение первого аргумента. В этом примере используется стрелочная функция (<u><em><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Arrow functions</a>)</em></u>, о которой будет рассказано в следующей секции.</p>
+
+<pre class="brush: js">function multiply(multiplier, ...theArgs) {
+ return theArgs.map(x =&gt; multiplier * x);
+}
+
+var arr = multiply(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]
+</pre>
+
+<h2 id="Стрелочные_функции"><a id="definition" name="definition"></a>Стрелочные функции</h2>
+
+<p><u><em>(Arrow functions)</em></u></p>
+
+<p><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочные функции</a> — функции вида "arrow function expression" (неверно <strong>fat arrow function</strong>) — имеют укороченный ситаксис по сравнению с function expression и лексически связывает значение <code>this</code>. Стрелочные функции всегда анонимны. Посмотрите также пост блога hacks.mozilla.org "<a href="https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/" rel="noopener">ES6 In Depth: Arrow functions</a>".</p>
+
+<p>На введение стрелочных функций повлияли два фактора: более короткие функции и лексика <code>this</code>.</p>
+
+<h3 id="Более_короткие_функции">Более короткие функции</h3>
+
+<p>В некоторых функциональных паттернах приветствуется использование более коротких функций. Сравните:</p>
+
+<pre class="brush: js">var a = [
+ 'Hydrogen',
+ 'Helium',
+ 'Lithium',
+ 'Beryllium'
+];
+
+var a2 = a.map(function(s) { return s.length; });
+
+console.log(a2); // logs [8, 6, 7, 9]
+
+var a3 = a.map(s =&gt; s.length);
+
+console.log(a3); // logs [8, 6, 7, 9]</pre>
+
+<h3 id="Лексика_this">Лексика <code>this</code></h3>
+
+<p>До стрелочных функций каждая новая функция определяла свое значение <code>this</code> (новый объект в случае конструктора, undefined в strict mode,  контекстный объект, если функция вызвана как метод объекта, и т.д.).  Это оказалось раздражающим с точки зрения объектно-орентированного стиля программирования.</p>
+
+<pre class="brush: js">function Person() {
+ // Конструктор Person() определяет `this` как самого себя.
+ this.age = 0;
+
+ setInterval(function growUp() {
+ // Без strict mode функция growUp() определяет `this`
+ // как global object, который отличается от `this`
+ // определенного конструктором Person().
+ this.age++;
+ }, 1000);
+}
+
+var p = new Person();</pre>
+
+<p>В ECMAScript 3/5 эта проблема была исправлена путем присвоения значения <code>this</code> переменной, которую можно было бы замкнуть.</p>
+
+<pre class="brush: js">function Person() {
+ var self = this; // Некоторые выбирают `that` вместо `self`.
+ // Выберите что-то одно и будьте последовательны.
+ self.age = 0;
+
+ setInterval(function growUp() {
+ // The callback refers to the `self` variable of which
+ // the value is the expected object.
+ self.age++;
+ }, 1000);
+}</pre>
+
+<p>Альтернативой может быть <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind">связанная функция</a> (<em>bound function</em>), с которой можно правильно вручную определить значение <code>this</code> для функции <code>growUp()</code>.</p>
+
+<p>В arrow function значением <code>this</code> является окружающий его контекст, так следующий код работает ожидаемо:</p>
+
+<pre class="brush: js">function Person() {
+ this.age = 0;
+
+ setInterval(() =&gt; {
+ this.age++; // |this| должным образом ссылается на объект Person
+ }, 1000);
+}
+
+var p = new Person();
+
+</pre>
+
+<h2 id="Далее">Далее</h2>
+
+<p>Подробное техническое описание функций в статье справочника {{jsxref("Functions","Функции")}}</p>
+
+<p>Смотрите также <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Function" title="en-US/docs/JavaScript/Reference/Global Objects/Function"><code>Function</code></a> в Справочнике JavaScript для получения дополнительной информации по функции как объекту.</p>
+
+<p>Внешние ресурсы:</p>
+
+<ul>
+ <li><a href="http://www.ecma-international.org/ecma-262/6.0/index.html#sec-ecmascript-function-objects">ECMAScript® 2015 Language Specification</a></li>
+ <li><a href="https://learn.javascript.ru/closures">Учебник по Javascript - замыкания</a></li>
+</ul>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}</p>
diff --git a/files/ru/web/javascript/guide/grammar_and_types/index.html b/files/ru/web/javascript/guide/grammar_and_types/index.html
new file mode 100644
index 0000000000..6618946fbb
--- /dev/null
+++ b/files/ru/web/javascript/guide/grammar_and_types/index.html
@@ -0,0 +1,642 @@
+---
+title: Грамматика и типы
+slug: Web/JavaScript/Guide/Grammar_and_types
+tags:
+ - JavaScript
+ - Руководство
+translation_of: Web/JavaScript/Guide/Grammar_and_types
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}</p>
+
+<div class="summary">
+<p>В данной главе рассматриваются базовая грамматика, объявление переменных, типы данных и литералы.</p>
+</div>
+
+<h2 id="Основы">Основы</h2>
+
+<p>JavaScript заимствует большую часть синтаксиса из Java, но также испытал влияние таких языков, как Awk, Perl и Python.</p>
+
+<p>JavaScript <strong>чувствителен к регистру</strong> и использует кодировку символов <strong>Unicode</strong>. Например, слово Früh ("рано" по-немецки) может использоваться в качестве имени переменной.</p>
+
+<pre class="brush: js">var Früh = "foobar";</pre>
+
+<p>Но, переменная <code>früh</code> не то же самое что <code>Früh</code> потому что JavaScript чувствителен к регистру.</p>
+
+<p>В JavaScript инструкции называются {{Glossary("Statement", "statements")}} и разделяются точкой с запятой (;). Пробел (space), табуляция (tab) и перевод строки (newline) называются пробельными символами (whitespace). Исходный текст скриптов на JavaScript сканируется слева направо и конвертируется в последовательность входных элементов, являющихся токенами (tokens), управляющими символами, символами конца строки, комментариями или пробельными символами. ECMAScript также определяет некоторые ключевые слова и литералы и устанавливает правила для автоматической вставки точек с запятой (<a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">ASI</a>), чтобы обозначить конец инструкций (statements). Однако, рекомендуется всегда ставить точку с запятой в конце каждой инструкции вручную, чтобы избежать побочных эффектов. Чтобы получить более подробную информацию, прочитайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical Grammar</a>.</p>
+
+<h2 id="Комментарии">Комментарии</h2>
+
+<p>Синтаксис <strong>комментариев</strong> является таким же, как и в C++ и во многих других языках:</p>
+
+<pre class="brush: js language-js" style="margin-top: 0px; margin-bottom: 20px; padding: 1em 0px 1em 30px; border-width: 0px 0px 0px 6px; border-left-style: solid; font-family: Consolas, Monaco, 'Andale Mono', monospace; font-size: 14px; line-height: 19px; color: rgb(77, 78, 83); overflow: auto; direction: ltr; white-space: normal; position: relative; text-shadow: none; background: 50% 0% rgb(250, 251, 252);"><code class="language-js" style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-weight: inherit; font-family: Consolas, Monaco, 'Andale Mono', monospace; direction: ltr; white-space: pre; text-shadow: none;"><span class="comment token" style="border: 0px; color: #708090; display: inherit; margin: 0px; padding: 0px;">// Комментарий, занимающий одну строку.
+</span>
+<span class="comment token" style="border: 0px; color: #708090; display: inherit; margin: 0px; padding: 0px;">/* Комментарий,
+ занимающий несколько строк.
+ */</span>
+
+<span class="comment token" style="border: 0px; color: #708090; display: inherit; margin: 0px; padding: 0px;">/* Нельзя вкладывать /* комментарий в комментарий */</span> SyntaxError <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); border: 0px; color: #a67f59; margin: 0px; padding: 0px;">*</span><span class="operator token" style="background: rgba(255, 255, 255, 0.498039); border: 0px; color: #a67f59; margin: 0px; padding: 0px;">/</span></code></pre>
+
+<h2 id="Объявления">Объявления</h2>
+
+<p>В JavaScript существует три вида объявлений:</p>
+
+<dl>
+ <dt><strong style="font-weight: bold;">{{jsxref("Statements/var", "var")}}</strong></dt>
+ <dd>Объявляет переменную, инициализация переменной значением является необязательной.</dd>
+ <dt><strong style="font-weight: bold;">{{jsxref("Statements/let", "let")}}</strong></dt>
+ <dd>Объявляет локальную переменную в области видимости блока, инициализация переменной значением является необязательной.</dd>
+ <dt><strong style="font-weight: bold;">{{jsxref("Statements/const", "const")}}</strong></dt>
+ <dd>Объявляет именованную константу, доступную только для чтения.</dd>
+</dl>
+
+<h3 id="Переменные">Переменные</h3>
+
+<p>Вы можете использовать переменные как символические имена для значений в вашем приложении. Имена переменных называются {{Glossary("Identifier", "identifiers")}} и должны соответствовать определенным правилам.</p>
+
+<p>Идентификатор в JavaScript должен начинаться с буквы, нижнего подчеркивания (_) или знака доллара ($); последующие символы могут также быть цифрами (0-9). Поскольку JavaScript чувствителен к регистру, буквы включают символы от "A" до "Z" (верхний регистр) и символы от "a" до "z" (нижний регистр).</p>
+
+<p>Вы можете использовать в идентификаторах буквы ISO 8859-1 или Unicode, например, å или ü. Вы также можете использовать<a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Lexical_grammar#String_literals"> управляющие последовательности Unicode</a> как символы в идентификаторах.</p>
+
+<p>Некоторые примеры корректных имен: <code style="font-style: normal;">Number_hits</code>, <code style="font-style: normal;">temp99</code>,  <code style="font-style: normal;">_name</code>.</p>
+
+<h3 id="Объявление_переменных">Объявление переменных</h3>
+
+<p>Вы можете объявить переменную тремя способами:</p>
+
+<ul>
+ <li>Используя ключевое слово {{jsxref("Statements/var", "var")}}. Например, <code>var x = 42</code>. Данный синтаксис может быть использован для объявления как локальных, так и глобальных переменных.</li>
+ <li>Просто присвоить переменной значение. Например, <code>x = 42</code>. Переменные, объявленные данным способом, являются глобальными. Такое объявление генерирует <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">строгое предупреждение</a>  (<a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>). Не рекомендуется использовать данный способ.</li>
+ <li>Используя ключевое слово {{jsxref("Statements/let", "let")}}. Например, <code>let y = 13</code>. Данный синтаксис может быть использован для объявления локальной переменной в области видимости блока.</li>
+</ul>
+
+<h3 id="Присваивание_значений">Присваивание значений</h3>
+
+<p>Переменная, объявленная через <code>var</code> или <code>let</code> без присвоения начального значения, имеет значение {{jsxref("undefined")}}.</p>
+
+<p>При попытке доступа к необъявленной переменной или переменной до её объявления будет выброшено исключение {{jsxref("ReferenceError")}}:​</p>
+
+<pre class="brush: js">var a;
+console.log("The value of a is " + a); //Значение переменной a undefined
+
+console.log("The value of b is " + b); //Uncaught ReferenceError: b не определена
+
+console.log("The value of c is " + c); //Значение переменной c undefined
+var c;
+
+console.log("The value of x is " + x); //Uncaught ReferenceError: x не определена
+let x; </pre>
+
+<p>Вы можете использовать <code>undefined</code>, чтобы определить, имеет ли переменная значение. В следующем примере переменной <code>input</code> не присвоено значение, и оператор <code>if</code> будет вычислен как <code>true</code>:</p>
+
+<pre class="brush: js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> input<span class="punctuation token" style="color: #999999;">;</span>
+<span class="keyword token" style="color: #0077aa;">if </span><span class="punctuation token" style="color: #999999;">(</span>input <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">===</span> undefined<span class="punctuation token" style="color: #999999;">) </span><span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">doThis<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">else</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="function token" style="color: #dd4a68;">doThat<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span></code></pre>
+
+<p>Значение <code>undefined</code> ведет себя как <code>false</code>, когда используется в логическом контексте. Например, следующий код выполняет функцию <code>myFunction</code>, т.к. элемент <code>myArray</code> не определен:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> myArray <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span><span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">!</span>myArray<span class="punctuation token" style="color: #999999;">[</span><span class="number token" style="color: #990055;">0</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span> {
+<span class="function token" style="color: #dd4a68;"> myFunction<span class="punctuation token" style="color: #999999;">(</span></span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span>
+</code>}
+</pre>
+
+<p>Значение <code>undefined</code> конвертируется в <code>NaN</code>, когда используется в числовом контексте:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> a<span class="punctuation token" style="color: #999999;">;</span>
+a <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="number token" style="color: #990055;">2</span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // NaN</span></code></pre>
+
+<p>Значение {{jsxref("null")}} ведет себя как 0 в числовом контексте и как <code>false</code> в логическом контексте:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> n <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="keyword token" style="color: #0077aa;">null</span><span class="punctuation token" style="color: #999999;">;</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>n <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">*</span> <span class="number token" style="color: #990055;">32</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // В консоль выведется 0</span></code></pre>
+
+<h3 id="Область_видимости_переменных">Область видимости переменных</h3>
+
+<p>Когда вы объявляете переменную вне функции, то такая переменная называется <em>глобальной</em> переменной, т.к. доступна любому коду в текущем документе. Когда вы объявляете переменную внутри функции, то такая переменная называется <em>локальной</em> переменной, т.к. доступна только внутри данной функции.</p>
+
+<p>До ECMAScript 6 в JavaScript отсутствовала область видимости <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Statements">блока</a>; переменная, объявленная внутри блока, является локальной для <em><strong>функции </strong></em>(или <em>глобальной</em> области видимости), внутри которой находится данный блок. Например, следующий код выведет значение 5, т.к. областью видимости переменной <code>x</code> является функция (или глобальный контекст), внутри которой объявлена переменная <code>x</code>, а <em><strong>не блок</strong>,</em> которым в данном случае является оператор <code>if</code>:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">true</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">var</span> x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">5</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>x<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="punctuation token"> </span><span class="comment token" style="color: #708090;">// 5</span></code></pre>
+
+<p>Такое поведение меняется, если используется оператор <code>let</code>, введенный в ECMAScript 6:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">true</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">let</span> y <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">5</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>y<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="punctuation token"> </span><span class="comment token" style="color: #708090;">// ReferenceError</span></code></pre>
+
+<h3 id="Поднятие_переменных">Поднятие переменных</h3>
+
+<p>Другим необычным свойством переменных в JavaScript является то, что можно сослаться на переменную, которая объявляется позже, и не получить при этом исключения. Эта концепция известна как <strong>поднятие</strong> (hoisting) переменных; переменные в JavaScript поднимаются в самое начало функции или выражения. Однако, переменные, которые еще не были инициализированы, возвратят значение <code>undefined</code>:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">/*
+ * Example 1
+*/
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">===</span> undefined<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // true
+</span><span class="keyword token" style="color: #0077aa;">var</span> x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">3</span><span class="punctuation token" style="color: #999999;">;</span>
+
+<span class="comment token" style="color: #708090;">/*
+ * Example 2
+*/</span><span class="comment token" style="color: #708090;">
+</span><span class="keyword token" style="color: #0077aa;">var</span> myvar <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"my value"</span><span class="punctuation token" style="color: #999999;">;</span>
+
+<span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>myvar<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // undefined
+</span> <span class="keyword token" style="color: #0077aa;">var</span> myvar <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"local value"</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>Приведенные выше примеры будут интерпретироваться так же, как:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">/*
+ * Example 1
+*/
+</span><span class="keyword token" style="color: #0077aa;">var</span> x<span class="punctuation token" style="color: #999999;">;</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">===</span> undefined<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // true
+</span>x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">3</span><span class="punctuation token" style="color: #999999;">;</span>
+
+<span class="comment token" style="color: #708090;">/*
+ * Example 2
+*/
+</span><span class="keyword token" style="color: #0077aa;">var</span> myvar <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"my value"</span><span class="punctuation token" style="color: #999999;">;</span>
+
+<span class="punctuation token" style="color: #999999;">(</span><span class="keyword token" style="color: #0077aa;">function</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">var</span> myvar<span class="punctuation token" style="color: #999999;">;</span>
+ console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>myvar<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // undefined
+</span> myvar <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"local value"</span><span class="punctuation token" style="color: #999999;">;</span>
+<span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">(</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>Из-за поднятия переменных, все операторы <code>var</code> в функции следует размещать настолько близко к началу функции, насколько это возможно. Следование этому правилу улучшает ясность кода.</p>
+
+<p>В ECMAScript 2015, <code>let (const)</code> <strong>не будет подниматься </strong>вверх блока. Однако, ссылки на переменную в блоке до объявления переменной вызовут  {{jsxref("ReferenceError")}}<code>.</code> Переменная во "временной мёртвой зоне" в начале блока, до объявления.</p>
+
+<pre class="brush: js">function do_something() {
+ console.log(foo); // ReferenceError
+ let foo = 2;
+}</pre>
+
+<h3 id="Поднятие_функций">Поднятие функций</h3>
+
+<p>Для функций: только определения функций поднимаются наверх, но не функции, определённые через выражения.</p>
+
+<pre class="brush: js">/* Определение функции */
+foo(); // "bar"
+
+function foo() {
+ console.log("bar");
+}
+
+/* Определение функции через выражение */
+baz(); // TypeError: baz is not a function
+
+var baz = function() {
+ console.log("bar2");
+};
+</pre>
+
+<h3 id="Глобальные_переменные">Глобальные переменные</h3>
+
+<p>Глобальные переменные на самом деле являются свойствами <em>глобального объекта</em>. На веб-страницах глобальным объектом является {{domxref("window")}}, поэтому вы можете устанавливать глобальные переменные и обращаться к ним, используя синтаксис <code>window.<em>variable</em></code>:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">window</span></code><span style="color: #999999; font-style: inherit; font-weight: inherit; white-space: pre;">.</span><code class="language-js" style="direction: ltr; white-space: pre;">foo <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">'bar'</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>Следовательно, вы можете обращаться к глобальным переменным, объявленным в одном объекте window или frame из другого объекта window или frame, указав имя window или frame. Например, если переменная <code>phoneNumber</code> объявлена в документе, то вы можете сослаться на эту переменную из iframe как <code>parent.phoneNumber</code>.</p>
+
+<h3 id="Константы"><a id="Constants" name="Constants">Константы</a></h3>
+
+<p>Вы можете создать именованную константу, доступную только для чтения, используя ключевое слово {{jsxref("Statements/const", "const")}}. Синтаксис идентификатора константы является таким же, как и у идентификатора переменной: он должен начинаться с буквы, нижнего подчеркивания или знака $ и может содержать буквы, цифры или нижнее подчеркивание.</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">const</span> PREFIX <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">'212'</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>Нельзя изменить значение константы через присваивание или повторное объявление во время выполнения скрипта. Значение должно быть указано при инициализации.</p>
+
+<p>Правила, касающиеся области видимости, для констант являются такими же, как и для переменных, объявленных через <code>let</code>. Если ключевое слово <code>const</code> не указано, то идентификатор будет являться переменной.</p>
+
+<p>Нельзя объявить константу с таким же именем, как у функции или переменной в одной области видимости. Следующие примеры выбросят исключение <code>TypeError</code>:</p>
+
+<pre class="brush: js"><span style="color: #696969;">// Это вызовет ошибку </span>
+function f() <span style="color: #800080;">{</span><span style="color: #800080;">}</span>
+const f = 5<span style="color: #808030;">;</span> <span style="color: #696969;">
+
+// Это тоже вызовет ошибку </span>
+function f() <span style="color: #800080;">{
+</span> const g <span style="color: #808030;">=</span> <span style="color: #008c00;">5</span><span style="color: #800080;">;</span>
+ var g<span style="color: #800080;">;</span>
+
+<span style="color: #696969;"> // какие-то выражения </span>
+<span style="color: #800080;">}</span> </pre>
+
+<p>Однако, атрибуты объектов не защищены, так что следующее выражение выполнится без проблем</p>
+
+<pre class="brush: js">const MY_OBJECT = {"key": "value"};
+MY_OBJECT.key = "otherValue";</pre>
+
+<h2 id="Структуры_и_типы_данных">Структуры и типы данных</h2>
+
+<h3 id="Типы_данных">Типы данных</h3>
+
+<p>Последний стандарт ECMAScript определяет семь типов данных:</p>
+
+<ul>
+ <li>Шесть типов данных,  которые являются {{Glossary("Primitive", "примитивами")}}:
+ <ul>
+ <li>{{Glossary("Boolean")}}. <code>true</code> и <code>false</code>.</li>
+ <li>{{Glossary("null")}}. Специальное ключевое слово, обозначающее нулевое или «пустое» значение. Поскольку JavaScript чувствителен к регистру, <code>null</code> не то же самое, что <code>Null</code>, <code>NULL</code> или любой другой вариант.</li>
+ <li>{{Glossary("undefined")}}. Свойство глобального объекта; переменная, не имеющая присвоенного значения, обладает типом <code style="font-style: normal;">undefined</code>.</li>
+ <li>{{Glossary("Number")}}. <code>42</code> или <code>3.14159</code>.</li>
+ <li>{{Glossary("String")}}. "Howdy".</li>
+ <li>{{Glossary("Symbol")}} (ECMAScript 6)</li>
+ </ul>
+ </li>
+ <li>и {{Glossary("Object")}}</li>
+</ul>
+
+<p>Хотя типов данных относительно немного, но они позволяют вам выполнять полезные функции в ваших приложениях. {{jsxref("Object", "Объекты")}} и {{jsxref("Function", "функции")}} являются другими фундаментальными элементами языка. Вы можете думать об объектах как об именованных контейнерах для значений и о функциях как о процедурах, которые ваше приложение может исполнять.</p>
+
+<h3 id="Преобразование_типов_данных">Преобразование типов данных</h3>
+
+<p>JavaScript — это динамически типизированный язык. Это означает, что вам не нужно указывать тип данных переменной, когда вы ее объявляете, типы данных преобразуются автоматически по мере необходимости во время выполнения скрипта. Так, например, вы можете определить переменную следующим образом:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> answer <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">42</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>А позже вы можете присвоить этой переменной строковое значение, например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;">answer <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"Thanks for all the fish..."</span><span class="punctuation token" style="color: #999999;">;</span></code></pre>
+
+<p>Поскольку JavaScript является динамически типизированным, это присваивание не вызовет сообщения об ошибке.</p>
+
+<p>В выражениях, включающих числовые и строковые значения с оператором <code>+</code>, JavaScript преобразует числовые значения в строковые. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;">x <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"The answer is "</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="number token" style="color: #990055;">42</span><span class="comment token" style="color: #708090;"> // "The answer is 42"
+</span>y <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="number token" style="color: #990055;">42</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">" is the answer"</span><span class="comment token" style="color: #708090;"> // "42 is the answer"</span></code></pre>
+
+<p>В выражениях с другими операторами JavaScript не преобразует числовые значения в строковые. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="string token" style="color: #669900;">"37"</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">-</span> <span class="number token" style="color: #990055;">7</span><span class="comment token" style="color: #708090;"> // 30
+</span><span class="string token" style="color: #669900;">"37"</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="number token" style="color: #990055;">7</span><span class="comment token" style="color: #708090;"> // "377"</span></code></pre>
+
+<h3 id="Преобразование_строк_в_числа">Преобразование строк в числа</h3>
+
+<p>В том случае, если значение, представляющее число, хранится в памяти как строка, можно использовать методы для преобразования строк в числа:</p>
+
+<ul>
+ <li id="parseInt()_and_parseFloat()">{{jsxref("parseInt", "parseInt(numString, [radix])")}}</li>
+ <li>{{jsxref("parseFloat", "parseFloat(numString)")}}</li>
+</ul>
+
+<p><code>parseInt</code> преобразует строку в целочисленное значение. Хорошей практикой является всегда указывать основание системы счисления (параметр <code>radix</code>).</p>
+
+<p>Альтернативным способом для получения числа из строки является использование оператора "унарный плюс":</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="string token" style="color: #669900;">"1.1"</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">"1.1"</span> <span class="comment token" style="color: #708090;">// "1.11.1"</span>
+<span class="punctuation token" style="color: #999999;">(</span><span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span><span class="string token" style="color: #669900;">"1.1"</span><span class="punctuation token" style="color: #999999;">)</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="punctuation token" style="color: #999999;">(</span><span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span><span class="string token" style="color: #669900;">"1.1"</span><span class="punctuation token" style="color: #999999;">)</span> </code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// 2.2</span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">
+// Обратите внимание на то, что скобки не являются обязательными и используются для ясности.</span></code></pre>
+
+<h2 id="Литералы">Литералы</h2>
+
+<p>Литералы используются для представления значений в JavaScript. Они являются фиксированными значениями, а не переменными. В данной секции рассматриваются следующие типы литералов:</p>
+
+<ul>
+ <li>{{anch("Литерал массива")}}</li>
+ <li>{{anch("Логический литерал")}}</li>
+ <li>{{anch("Литерал целого числа")}}</li>
+ <li>{{anch("Литерал числа с плавающей точкой")}}</li>
+ <li>{{anch("Литерал объекта")}}</li>
+ <li>{{anch("RegExp литерал")}}</li>
+ <li>{{anch("Литерал строки")}}</li>
+</ul>
+
+<h3 id="Литерал_массива">Литерал массива</h3>
+
+<p>Литерал массива — это список из нуля или более выражений, каждое из которых представляет элемент массива, заключенный в квадратные скобки ( <code>[]</code> ). Когда вы создаете массив, используя литерал массива, он инициализируется с помощью переданных значений, которые будут являться его элементами, длина массива будет равна числу переданных аргументов.</p>
+
+<p>В следующем примере создается массив <code>coffees</code> с тремя элементам и длиной, равной трем:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> coffees <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">"French Roast"</span><span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">"Colombian"</span><span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">"Kona"</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">;</span></code>
+</pre>
+
+<div class="note">
+<p><strong>Замечание :</strong> Обратите внимание на то, что литерал массива является инициализатором объекта. Чтобы получить более подробную информацию, прочитайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Working_with_Objects#.D0.98.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8.D0.BD.D0.B8.D1.86.D0.B8.D0.B0.D0.BB.D0.B8.D0.B7.D0.B0.D1.82.D0.BE.D1.80.D0.BE.D0.B2_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.B0">Использование инициализаторов объекта</a>.</p>
+</div>
+
+<p>Если массив создается с помощью литерала в скрипте верхнего уровня, то JavaScript интерпретирует массив каждый раз, когда вычисляет выражение, содержащее литерал. Кроме того, литерал, используемый в функции, создается каждый раз, когда вызывается функция.</p>
+
+<p>Литералы массива также являются объектами <code>Array</code>. Чтобы получить более подробную информацию, прочитайте {{jsxref("Array")}} и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Indexed_collections">упорядоченные наборы данных</a>.</p>
+
+<h4 id="Лишние_запятые_в_литералах_array">Лишние запятые в литералах array</h4>
+
+<p>Не обязательно указывать все элементы в литерале array. Если вы поставите две запятые подряд, то пропущенные элементы будут иметь значение <code>undefined</code>. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> fish <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">"Lion"</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">"Angel"</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// ["Lion", undefined, "Angel"]</span></code></pre>
+
+<p>У этого массива есть 2 элемента со значениям и один пустой (<code>fish[0]</code> - "Lion", <code>fish[1]</code> - <code>undefined</code>, а <code>fish[2]</code> - "Angel").</p>
+
+<p>Если вы поставите запятую в конце списка элементов, то она будет проигнорирована. В следующем примере, длина массива равна 3. Нет <code>myList[3]</code>. Все другие запятые в списке говорят о новом элементе.</p>
+
+<div class="note">
+<p><strong>Замечание :</strong> Лишние запятые могут вызывать ошибки в старых версиях браузеров, поэтому лучше избегать их использования.</p>
+</div>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> myList <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">'home'</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">'school'</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">; </span><span class="comment token" style="color: #708090;">// ["home", undefined, "school"]</span></code>
+</pre>
+
+<p>В следующем примере длина массива равна четырем, элементы <code>myList[0]</code> и <code>myList[2]</code> имеют значение <code>undefined</code>:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> myList <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">'home'</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">'school'</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// [undefined, "home", undefined, "school"]</span></code></pre>
+
+<p>В следующем примере длина массива равна четырем, элементы <code>myList[1]</code> и <code>myList[3]</code> имеют значение <code>undefined</code>. Игнорируется только последняя запятая.</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> myList <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">'home'</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">'school'</span><span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">,</span> <span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// ["home", undefined, "school", undefined]</span></code></pre>
+
+<p>Понимание поведения лишних запятых важно для понимания JavaScript как языка. Однако, когда будете писать свой собственный код, то имейте в виду, что явное объявление отсутствующих элементов как <code>undefined</code> улучшает ясность кода и лёгкость его поддержки.</p>
+
+<h3 id="Логические_литералы">Логические литералы</h3>
+
+<p>Логический (Boolean) тип имеет два литеральных значения: <code>true</code> и <code>false</code>.</p>
+
+<p>Не путайте примитивные логические значения <code>true</code> и <code>false</code> со значениями true и false объекта Boolean. Объект Boolean является объектом-обёрткой над примитивом логического типа. Чтобы получить более подробную информацию, прочитайте {{jsxref("Boolean")}}.</p>
+
+<h3 id="Литерал_целого_числа">Литерал целого числа</h3>
+
+<p>Целые числа могут быть записаны в десятичной, шестнадцатеричной, восьмеричной и двоичной системах счисления.</p>
+
+<ul>
+ <li>Десятичный целочисленный литерал состоит из последовательности цифр без ведущего нуля.</li>
+ <li>Ведущий ноль в целочисленном литерале указывает на то, что он записан в восьмеричной системе счисления. Восьмеричные целые числа состоят только из цифр 0-7.</li>
+ <li>Ведущие символы 0x (или 0X) указывают на то, что число шестнадцатеричное. Шестнадцатеричные целые числа могут состоять из цифр 0-9 и букв a-f и A-F. </li>
+ <li>Ведущие символы 0b (или 0B) указывают на то, что число двоичное. Двоичные числа могут включать в себя только цифры 0 и 1.</li>
+</ul>
+
+<p>Несколько примеров целочисленных литералов:</p>
+
+<pre class="eval language-html" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-html" style="direction: ltr; white-space: pre;">0, 117 и -345 (десятичная система счисления)
+015, 0001 и -077 (восьмеричная система счисления)
+0x1123, 0x00111 и -0xF1A7 (</code>шестнадцатеричная система счисления<code class="language-html" style="direction: ltr; white-space: pre;">)
+0b11, 0b0011 и -0b11 (двоичная система счисления)</code>
+</pre>
+
+<p>Для дополнительной информации смотрите <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar">числовые литералы в лексической грамматике</a>.</p>
+
+<h3 id="Литерал_числа_с_плавающей_точкой">Литерал числа с плавающей точкой</h3>
+
+<p>Числа с плавающей точкой могут состоять из следующих частей:</p>
+
+<ul>
+ <li>Десятичное целое число, которое может иметь знак (символ "+" или "-", стоящий перед числом),</li>
+ <li>Десятичная точка ("."),</li>
+ <li>Дробная часть (другое десятичное число),</li>
+ <li>Экспонента.</li>
+</ul>
+
+<p>Экспонента состоит из символа "e" или "E", за которым следует целое число, которое может иметь знак. Число с плавающей точкой должно состоять по крайней мере из одной цифры и либо десятичной точки, либо символа "e" (или "E").</p>
+
+<p>В более сжатой форме синтаксис выглядит следующим образом:</p>
+
+<pre class="eval language-html" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-html" style="direction: ltr; white-space: pre;">[(+|-)][digits][.digits][(E|e)[(+|-)]digits]</code></pre>
+
+<p>Примеры:</p>
+
+<pre class="eval language-html" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-html" style="direction: ltr; white-space: pre;">3.14
+-3.1E+12
+-.3333333333333333333
+.1e-23
+</code></pre>
+
+<h3 id="Литерал_объекта">Литерал объекта</h3>
+
+<p>Литерал объекта — это список из нуля или более пар, состоящих из имен свойств и связанных с ними значений, заключенный в фигурные скобки ( <code>{}</code> ). Вам не следует использовать литерал объекта в начале выражения, т.к. это приведет к ошибке или к поведению, которого вы не ожидаете, потому что символ "{" будет интерпретироваться как начало блока.</p>
+
+<p>В следующем примере свойству <code>myCar</code> объекта <code>car</code> присваивается строка <code>"Saturn"</code>, свойству <code>getCar</code> — результат вызова функции <code>CarTypes("Honda")</code>, свойству <code>special</code> — значение переменной <code>Sales</code>:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> Sales <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"Toyota"</span><span class="punctuation token" style="color: #999999;">;</span>
+
+<span class="keyword token" style="color: #0077aa;">function</span> <span class="function token" style="color: #dd4a68;">CarTypes<span class="punctuation token" style="color: #999999;">(</span></span>name<span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">if</span> <span class="punctuation token" style="color: #999999;">(</span>name <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">==</span> <span class="string token" style="color: #669900;">"Honda"</span><span class="punctuation token" style="color: #999999;">)</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> name<span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span> <span class="keyword token" style="color: #0077aa;">else</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="keyword token" style="color: #0077aa;">return</span> <span class="string token" style="color: #669900;">"Извините, мы не продаём "</span> <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> name <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">+</span> <span class="string token" style="color: #669900;">"."</span><span class="punctuation token" style="color: #999999;">;</span>
+ <span class="punctuation token" style="color: #999999;">}</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+
+<span class="keyword token" style="color: #0077aa;">var</span> car <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">{</span> myCar<span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"Saturn"</span><span class="punctuation token" style="color: #999999;">,</span> getCar<span class="punctuation token" style="color: #999999;">:</span> <span class="function token" style="color: #dd4a68;">CarTypes<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"Honda"</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">,</span> special<span class="punctuation token" style="color: #999999;">:</span> Sales <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>car<span class="punctuation token" style="color: #999999;">.</span>myCar<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // Saturn
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>car<span class="punctuation token" style="color: #999999;">.</span>getCar<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // Honda
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>car<span class="punctuation token" style="color: #999999;">.</span>special<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // Toyota</span></code></pre>
+
+<p>Кроме того, вы можете использовать числовой или строковой литералы в именах свойств или вкладывать один объект в другой. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> car <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">{</span> manyCars<span class="punctuation token" style="color: #999999;">:</span> <span class="punctuation token" style="color: #999999;">{</span>a<span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"Saab"</span><span class="punctuation token" style="color: #999999;">,</span> <span class="string token" style="color: #669900;">"b"</span><span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"Jeep"</span><span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">,</span> <span class="number token" style="color: #990055;">7</span><span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"Mazda"</span> <span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>car<span class="punctuation token" style="color: #999999;">.</span>manyCars<span class="punctuation token" style="color: #999999;">.</span>b<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">; </span><span class="comment token" style="color: #708090;">// Jeep
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>car<span class="punctuation token" style="color: #999999;">[</span><span class="number token" style="color: #990055;">7</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // Mazda</span></code></pre>
+
+<p>Именем свойства объекта может быть любая строка, в том числе пустая строка. Если имя свойства не является корректным JavaScript идентификатором, то оно должно быть заключено в кавычки. Для обращения к таким именам следует использовать квадратные скобки ( <code>[]</code> ), а не точку ( <code>.</code> ):</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> unusualPropertyNames <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">{</span>
+ <span class="string token" style="color: #669900;">""</span><span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"An empty string"</span><span class="punctuation token" style="color: #999999;">,</span>
+ <span class="string token" style="color: #669900;">"!"</span><span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"Bang!"</span>
+<span class="punctuation token" style="color: #999999;">}</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>unusualPropertyNames<span class="punctuation token" style="color: #999999;">.</span><span class="string token" style="color: #669900;">""</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // SyntaxError: Unexpected string
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>unusualPropertyNames<span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">""</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // "An empty string"
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>unusualPropertyNames<span class="punctuation token" style="color: #999999;">.</span><span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">!</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // SyntaxError: Unexpected token !
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>unusualPropertyNames<span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">"!"</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // "Bang!"</span></code>
+</pre>
+
+<p>В ES2015 литералы объектов расширены до поддержки установки прототипа в конструкции короткой записи для <code>foo: </code>задание <code>foo</code>,  определение методов, создание супер вызовов и вычисление имён свойств в выражениях. Вместе, они делают похожими объектные литералы и объявления классов, а также позволяют объектному дизайну получать выгоду одинаковых возможностей.</p>
+
+<pre class="brush: js">var obj = {
+ // __proto__
+ __proto__: theProtoObj,
+ // Короткая запись для ‘handler: handler’
+ handler,
+ // Методы
+ toString() {
+ // Супер вызовы
+ return "d " + super.toString();
+ },
+ // Динамическое вычисление имён свойств
+ [ 'prop_' + (() =&gt; 42)() ]: 42
+};</pre>
+
+<p>Обратите внимание на следующий пример:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> foo <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="punctuation token" style="color: #999999;">{</span>a<span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"alpha"</span><span class="punctuation token" style="color: #999999;">,</span> <span class="number token" style="color: #990055;">2</span><span class="punctuation token" style="color: #999999;">:</span> <span class="string token" style="color: #669900;">"two"</span><span class="punctuation token" style="color: #999999;">}</span><span class="punctuation token" style="color: #999999;">;</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>foo<span class="punctuation token" style="color: #999999;">.</span>a<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // alpha
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>foo<span class="punctuation token" style="color: #999999;">[</span><span class="number token" style="color: #990055;">2</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span> <span class="comment token" style="color: #708090;"> // two
+</span><span class="comment token" style="color: #708090;">// console.log(foo.2); // SyntaxError: Unexpected number
+</span><span class="comment token" style="color: #708090;">// console.log(foo[a]); // ReferenceError: a is not defined
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>foo<span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">"a"</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // alpha
+</span>console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>foo<span class="punctuation token" style="color: #999999;">[</span><span class="string token" style="color: #669900;">"2"</span><span class="punctuation token" style="color: #999999;">]</span><span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="comment token" style="color: #708090;"> // two</span></code></pre>
+
+<h3 id="RegExp_литерал">RegExp литерал</h3>
+
+<p>Литерал regexp - шаблон между слешами. Следующий пример литерал regex:</p>
+
+<pre class="brush: js">var re = /ab+c/;</pre>
+
+<h3 id="Строковый_литерал">Строковый литерал</h3>
+
+<p>Строковый литерал — это ноль или более символов, заключенных в двойные ( <code>"</code> ) или одинарные ( <code>'</code> ) кавычки. Строка должна быть ограничена кавычками одного типа, т.е. либо обе одинарные, либо обе двойные. Например:</p>
+
+<pre><code>"foo"</code>
+<code>'bar'</code>
+<code>"1234"</code>
+<code>"one line \n another line"</code>
+<code>"John's cat"</code></pre>
+
+<p><code>​</code>Вы можете вызвать любой из методов объекта <code>String</code> для строкового литерала: JavaScript автоматически преобразует строковой литерал во временный объект <code>String</code>, вызовет метод, а затем уничтожит временный объект <code>String</code>. Вы также можете использовать свойство <code>String.length</code> со строковым литералом:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;">console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span><span class="string token" style="color: #669900;">"John's cat"</span><span class="punctuation token" style="color: #999999;">.</span>length<span class="punctuation token" style="color: #999999;">);</span><span class="comment token" style="color: #708090;">
+// Число символов в строке, включая пробел.
+</span><span class="comment token" style="color: #708090;">// В данном случае длина строки равна 10.</span></code></pre>
+
+<p>В ES2015 также доступны шаблоны строк. Шаблоны строк представляют собой синтаксический сахар для конструирования строк. Это похоже на возможности интерполяции строк в Perl, Python и других. Дополнительно, может быть добавлен тег, позволяющий настраивать конструирование строк, избегая атак внедрения и построения структур данных высокого уровня из содержимого строки.</p>
+
+<pre class="brush: js">// Простое создание строки через литерал string
+`In JavaScript '\n' is a line-feed.`
+
+// Мультистроковые строки
+`In JavaScript this is
+ not legal.`
+
+// Интерполяция строк
+var name = "Бобби", time = "сегодня";
+`Привет ${name}, как ты ${time}?`
+
+// Строим префикс HTTP запроса, используемый для интерпретации замен и конструирования
+POST`http://foo.org/bar?a=${a}&amp;b=${b}
+ Content-Type: application/json
+ X-Credentials: ${credentials}
+ { "foo": ${foo},
+ "bar": ${bar}}`(myOnReadyStateChangeHandler);
+</pre>
+
+<p>Вам следует использовать строковые литералы до тех пор, пока вам специально не понадобится объект <code>String</code>. Чтобы получить более подробную информацию об объекте <code>String</code>, прочитайте {{jsxref("String")}}.</p>
+
+<h4 id="Использование_специальных_символов_в_строках">Использование специальных символов в строках</h4>
+
+<p>Кроме обычных символов вы также можете включать специальные символы в строки.</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="string token" style="color: #669900;">"one line \n another line"</span></code></pre>
+
+<p>В следующей таблице перечислены специальные символы, которые вы можете использовать.</p>
+
+<table class="standard-table">
+ <caption>Специальные символы в JavaScript</caption>
+ <thead>
+ <tr>
+ <th scope="col">Символ</th>
+ <th scope="col">Значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>\b</code></td>
+ <td>Возврат (Backspace)</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td>Перевод или прогон страницы (Form feed)</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td>Перевод строки (New line)</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td>Возврат каретки (Carriage return)</td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td>Табуляция (Tab)</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td>Вертикальная табуляция (Vertical tab)</td>
+ </tr>
+ <tr>
+ <td><code>\'</code></td>
+ <td>Апостроф или одинарная кавычка</td>
+ </tr>
+ <tr>
+ <td><code>\"</code></td>
+ <td>Двойная кавычка</td>
+ </tr>
+ <tr>
+ <td><code>\\</code></td>
+ <td>Обратная косая черта (Backslash)</td>
+ </tr>
+ <tr>
+ <td><code>\<em>XXX</em></code></td>
+ <td>
+ <p>Символ в кодировке Latin-1, представленный тремя восьмеричными числами <em>XXX</em> от 0 до 377. Например, \251 (символ ©).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\x<em>XX</em></code></td>
+ <td>
+ <p>Символ в кодировке Latin-1, представленный двумя шестнадцатеричными числами <em>XX</em> от 00 до FF. Например, \xA9 (символ ©).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\u<em>XXXX</em></code></td>
+ <td>
+ <p>Символ в Unicode, представленный четырьмя шестнадцатеричными числами <em>XXXX</em>. Например, \u00A9 (<span style="background-color: rgba(212, 221, 228, 0.14902);">символ ©).</span></p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\u<em>{XXXXX}</em></code></td>
+ <td>Символ в UTF-32BE. Например, \u{2F804} обозначает то же, что обычная запись \uD87E\uDC04.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Экранирующие_символы">Экранирующие символы</h4>
+
+<p>Для символов, не перечисленных в вышеприведенной таблице, предваряющая обратная косая черта игнорируется. Такое использование не является рекомендованным (deprecated) и вам следует избегать его.</p>
+
+<p>Вы можете вставить кавычку в строку, если поставите перед ней обратную косую черту. Это называется экранированием кавычек. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> quote <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"He read \"The Cremation of Sam McGee\" by R.W. Service."</span><span class="punctuation token" style="color: #999999;">;</span>
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>quote<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// He read "The Cremation of Sam McGee" by R.W. Service.</span></code></pre>
+
+<p>Чтобы включить обратную косую черту в строку, перед ней нужно поставить еще одну обратную косую черту. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> home <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> <span class="string token" style="color: #669900;">"c:\\temp"</span><span class="punctuation token" style="color: #999999;">; </span></code><code class="language-js" style="direction: ltr; white-space: pre;"><span class="comment token" style="color: #708090;">// c:\temp</span></code></pre>
+
+<p>Вы также можете экранировать перевод строки. Обратная косая черта и перевод строки будут удалены из содержимого строки. Например:</p>
+
+<pre class="brush: js language-js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> str <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span> "<span class="keyword token" style="color: #0077aa;">this</span> string \
+is broken \
+across multiple\
+lines<span class="punctuation token" style="color: #999999;">.</span>"
+console<span class="punctuation token" style="color: #999999;">.</span><span class="function token" style="color: #dd4a68;">log<span class="punctuation token" style="color: #999999;">(</span></span>str<span class="punctuation token" style="color: #999999;">)</span><span class="punctuation token" style="color: #999999;">;</span><span class="punctuation token"> </span><span class="comment token" style="color: #708090;">// this string is broken across multiplelines.</span></code></pre>
+
+<p>Хотя JavaScript не поддерживает синтаксис "heredoc" (форматированный текст в одной строковой переменной), но вы можете эмулировать его, добавив перевод строки и обратную косую черту в конец каждой строки:</p>
+
+<pre class="brush: js" style="padding: 1em 0px 1em 30px; font-size: 14px; white-space: normal;"><code class="language-js" style="direction: ltr; white-space: pre;"><span class="keyword token" style="color: #0077aa;">var</span> poem <span class="operator token" style="background: rgba(255, 255, 255, 0.498039); color: #a67f59;">=</span>
+"Roses are red<span class="punctuation token" style="color: #999999;">,</span>\n\
+Violets are blue<span class="punctuation token" style="color: #999999;">.</span>\n\
+I'm schizophrenic<span class="punctuation token" style="color: #999999;">,</span>\n\
+And so am I<span class="punctuation token" style="color: #999999;">.</span>"</code></pre>
+
+<h2 id="Дополнительная_информация">Дополнительная информация</h2>
+
+<p>Данная глава сфокусирована на базовом синтаксисе для объявлений и типов. Чтобы получить более подробную информацию о конструкциях JavaScript, прочитайте:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Statements">Порядок выполнения и обработка ошибок</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Loops_and_iteration">Циклы и итерация</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators">Выражения и операторы</a></li>
+</ul>
+
+<p>В следующей главе рассматриваются управляющие конструкции и обработка ошибок.</p>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}</p>
diff --git a/files/ru/web/javascript/guide/index.html b/files/ru/web/javascript/guide/index.html
new file mode 100644
index 0000000000..fcd22de953
--- /dev/null
+++ b/files/ru/web/javascript/guide/index.html
@@ -0,0 +1,131 @@
+---
+title: Руководство JavaScript
+slug: Web/JavaScript/Guide
+tags:
+ - Guide
+ - JavaScript
+ - 'l10n:priority'
+translation_of: Web/JavaScript/Guide
+---
+<div>{{jsSidebar("JavaScript Guide")}}</div>
+
+<p class="summary">"Руководство по JavaScript" покажет вам как использовать <a href="/ru/docs/Web/JavaScript">JavaScript</a> и даст общее представление о языке. Если вам нужна исчерпывающая информация о возможностях языка, посмотрите <a href="/ru/docs/Web/JavaScript/Reference">руководство JavaScript</a>.</p>
+
+<h2 id="Главы">Главы</h2>
+
+<p>Это руководство разделено на несколько глав:</p>
+
+<ul class="card-grid">
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript">Введение</a></span>
+
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#Где_можно_найти_информацию_о_JavaScript">Об этом руководстве</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#Что_такое_JavaScript">О JavaScript</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#JavaScript_и_Java">JavaScript и Java</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#JavaScript_и_спецификация_ECMAScript">ECMAScript</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#Начинаем_знакомство_с_JavaScript">Инструменты</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Введение_в_JavaScript#Hello_world">Hello World</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types">Грамматика и типы</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Основы">Базовый синтаксис и комментарии</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявления</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Область_видимости_переменных">Область видимости переменных</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Поднятие_переменных">Поднятие переменных</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Структуры_и_типы_данных">Структуры и типы данных</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Литералы">Литералы</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling">Порядок выполнения и обработка ошибок</a></span>
+ <p><code><a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Инструкция_if...else">if...else</a></code><br>
+ <code><a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Инструкция_switch">switch</a></code><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Инструкции_обработки_исключений"><code>try</code>/<code>catch</code>/<code>throw</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Использование_объекта_Error">Объекты <code>Error</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Объект_Promise">Объект <code>Promise</code></a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации">Циклы и итерации</a></span>
+ <p><code><a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#Цикл_for">for</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#Цикл_while">while</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#Цикл_do...while">do...while</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#break">break</a>/<a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#continue">continue</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#for...in">for..in</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Циклы_и_итерации#for...of">for..of</a></code></p>
+ </li>
+</ul>
+
+<ul class="card-grid">
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></span>
+
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Functions#Объявление_функций">Объявление функций</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Functions#Вызов_функций">Вызов функций</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Functions#Область_видимости_функций">Область видимости функций</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Functions#Замыкания">Замыкания</a><br>
+ <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Functions#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%B0_arguments">Аргументы</a> и <a href="/ru/docs/Web/JavaScript/Guide/Functions#Параметры_функции">параметры</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Functions#Стрелочные_функции">Стрелочные функции</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators">Выражения и операторы</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Операторы_присваивания">Присваивание</a> и <a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Операторы_сравнения">Сравнение</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Арифметические_операторы">Арифметические операторы</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Битовые_(поразрядные)_операторы">Побитовые операторы</a> и <a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Логические_операторы">логические операторы</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators#Условный_(тернарный)_оператор">Условный (тернарный) операторы</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Numbers_and_dates">Числа и даты</a> </span><a href="/ru/docs/Web/JavaScript/Guide/Numbers_and_dates#Numbers">Числовые литералы</a>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Numbers_and_dates#Объект_Number">Объект <code>Number</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Numbers_and_dates#Объект_Math">Объект <code>Math</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Numbers_and_dates#Объект_Date">Объект <code>Date</code></a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Text_formatting">Форматирование текста</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Text_formatting#Строковые_литералы">Строковые литералы</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Text_formatting#Объекты_String">Объект <code>String</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Text_formatting#Многострочные_шаблонные_строки">Шаблонные литералы </a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Text_formatting#Интернационализация">Интернационализация</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions#Работа_с_Регулярными_Выражениями">Регулярные выражения</a></p>
+ </li>
+</ul>
+
+<ul class="card-grid">
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Indexed_collections">Индексированные коллекции</a></span>
+
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Indexed_collections#Array_объект">Массивы</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Indexed_collections#Типизированные_массивы">Типизированные массивы</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Keyed_collections">Коллекции</a></span>
+ <p><code><a href="/ru/docs/Web/JavaScript/Guide/Keyed_collections#Тип_Map">Map</a></code><br>
+ <code><a href="/ru/docs/Web/JavaScript/Guide/Keyed_collections#Тип_WeakMap">WeakMap</a></code><br>
+ <code><a href="/ru/docs/Web/JavaScript/Guide/Keyed_collections#Тип_Set">Set</a></code><br>
+ <code><a href="/ru/docs/Web/JavaScript/Guide/Keyed_collections#Тип_WeakSet">WeakSet</a></code></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects">Работа с объектами</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Объекты_и_свойства">Объекты и свойства</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Создание_новых_объектов">Создание объектов</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Определение_методов">Определение методов</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Определение_геттеров_и_сеттеров">Геттеры и Сеттеры</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">Подробнее про объектную модель</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Языки_основанные_на_классах_против_Прототипно-ориентированных_языков">Прототипно-ориентированное ООП</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Создание_иерархии">Создание иерархии объектов</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Наследование_свойств">Наследование</a></p>
+ </li>
+</ul>
+
+<ul class="card-grid">
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov">Промисы</a></span>
+
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov#Гарантии">Гарантии</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov#Цепочка_вызовов">Цепочка вызовов</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov#Распространение_ошибки">Распространенные ошибки</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov#Композиция">Композиция</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov#Порядок_выполнения">Порядок выполнения</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итераторы и Генераторы</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators#Итераторы">Итераторы</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators#Итерируемые_объекты">Итерируемые объекты</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators#Генераторы">Генераторы</a></p>
+ </li>
+ <li><span><a href="/ru/docs/Web/JavaScript/Guide/Meta_programming">Мета<br>
+ программирование</a></span>
+ <p><a href="/ru/docs/Web/JavaScript/Guide/Meta_programming#Объекты_Proxy">Объект <code>Proxy</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Meta_programming#Обработчики_и_ловушки">Обработчики и ловушки</a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Meta_programming#Отзываемый_Proxy">Отзываемый <code>Proxy</code></a><br>
+ <a href="/ru/docs/Web/JavaScript/Guide/Meta_programming#Рефлексия">Рефлексия</a></p>
+ </li>
+</ul>
+
+<p>{{Next("Web/JavaScript/Guide/Introduction")}}</p>
diff --git a/files/ru/web/javascript/guide/indexed_collections/index.html b/files/ru/web/javascript/guide/indexed_collections/index.html
new file mode 100644
index 0000000000..96ea922455
--- /dev/null
+++ b/files/ru/web/javascript/guide/indexed_collections/index.html
@@ -0,0 +1,441 @@
+---
+title: Упорядоченные наборы данных
+slug: Web/JavaScript/Guide/Indexed_collections
+translation_of: Web/JavaScript/Guide/Indexed_collections
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Keyed_Collections")}}</div>
+
+<p class="summary">Данная глава знакомит читателя с массивами - коллекциями элементов, упорядоченных по индексу. Глава включает в себя описание массивов и массивоподобных структур, таких как {{jsxref("Array")}} и {{jsxref("TypedArray")}}.</p>
+
+<h2 id="Array_объект"><code>Array</code> объект</h2>
+
+<p><em>Массив</em> представляется собой упорядоченный набор значений, к которому вы ссылаетесь по имени и индексу. Допустим, у вас есть массив с именем <code>emp,</code> содержащий имена сотрудников и упорядоченный по номеру сотрудников. Следовательно, <code>emp[1]</code> будет представлять собой имя сотрудника номер один, <code>emp[2]</code> -- имя сотрудника номер два, и т.д.</p>
+
+<p>Язык JavaScript не содержит явного типа данных "массив". Тем не менее, возможно использовать предопределенный объект <code>Array</code> и его методы для работы с массивами в создаваемых приложениях. Объект <code>Array</code> содержит методы для работы с массивами самыми различными способами, например, есть методы для объединения,  переворачивания и сортировки. Объект содержит свойство для определения длины массива, а также свойства для работы с регулярными выражениями.</p>
+
+<h3 id="Создание_массива">Создание массива</h3>
+
+<p>Следующие выражения создают одинаковые массивы:</p>
+
+<pre class="brush: js">var arr = new Array(element0, element1, ..., elementN);
+var arr = Array(element0, element1, ..., elementN);
+var arr = [element0, element1, ..., elementN];
+</pre>
+
+<p><code>element0, element1, ..., elementN</code> - список значений элементов массива. Если значения заданы, то эти значения будут являться элементами массива после его инициализации. Свойство <code>length</code> у массива будет равно количеству аргументов.</p>
+
+<p>Синтаксис с использованием квадратных скобок называется "литерал массива" (array literal) или "инициализатор массива". Такая запись короче, чем другие способы создания массива, и, как правило, более предпочтительна. Cм. <a href="/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Array_literals" title="en-US/docs/JavaScript/Guide/Values, Variables, and Literals#Array Literals">Array literals</a>.</p>
+
+<p>Для создания массива без элементов, но ненулевой длины, возможно использовать одно из следующих выражений:</p>
+
+<pre class="brush: js">var arr = new Array(arrayLength);
+var arr = Array(arrayLength);
+
+// Точно такой же эффект
+var arr = [];
+arr.length = arrayLength;
+</pre>
+
+<div class="note">
+<p><strong>Замечание</strong>: в примере выше <code>arrayLength</code> должно иметь числовой тип <code>Number</code>. В противном случае будет создан массив с единственным элементом (указанное значение). Вызванная функция <code>arr.length</code> вернет значение <code>arrayLength</code>, но на самом деле массив будет содержать пустые элементы (undefined). Использование цикла<a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"> </a> {{jsxref("Statements/for...in","for...in")}} для обработки значений массива не вернет ни одного элемента.</p>
+</div>
+
+<p>Массивы могут быть присвоены свойству нового или уже существующего объекта, как показано ниже:</p>
+
+<pre class="brush: js">var obj = {};
+// ...
+obj.prop = [element0, element1, ..., elementN];
+
+// OR
+var obj = {prop: [element0, element1, ...., elementN]}
+</pre>
+
+<p>Если вы хотите инициализировать массив одним элементом и этим элементом является число типа Number, то вы должны использовать квадратные скобки. Если вы создаёте массив с помощью Array (конструктора или функции), а единственным элементом этого массива будет число типа Number, то число это интерпретируется как длина массива (arrayLength), а не как элемент типа Number.</p>
+
+<pre class="brush: js">var arr = [42]; // Создаёт массив с одним элементом
+var arr = Array(42); // Создаёт массив без элементов,
+ // но устанавлявает длину массива arr.length в 42
+
+// Это эквивалентно следующему
+var arr = [];
+arr.length = 42;
+</pre>
+
+<p>Вызов Array(N) выбросит RangeError, если N не целое значение, чья дробная часть не ноль. Следующий пример иллюстрирует это.</p>
+
+<pre class="brush: js">var arr = Array(9.3); // RangeError: Invalid array length
+</pre>
+
+<p>Если ваш код нуждается в создании массива с одним элементом произвольного типа данных, то безопасней использовать литеральную запись. Или создайте пустой массив, а затем добавьте необходимый элемент.</p>
+
+<h3 id="Заполнение_массива">Заполнение массива</h3>
+
+<p>Вы можете заполнить массив путём присвоения значений его элементам. Для примера:</p>
+
+<pre class="brush: js">var emp = [];
+emp[0] = "Casey Jones";
+emp[1] = "Phil Lesh";
+emp[2] = "August West";
+</pre>
+
+<div class="note">
+<p><strong>Замечание:</strong> Если вы используете нецелое значение в операторе [] обращения к элементу массива, то будет создано соответствующее свойство в объекте, представляющем массив, вместо элемента массива (так как массивы в JavaScript являются объектами).</p>
+</div>
+
+<pre class="brush: js">var arr = [];
+arr[3.4] = "Oranges";
+console.log(arr.length); // 0
+console.log(arr.hasOwnProperty(3.4)); // true
+</pre>
+
+<p>Вы можете заполнить массив во время создания:</p>
+
+<pre class="brush: js">var myArray = new Array("Hello", myVar, 3.14159);
+var myArray = ["Mango", "Apple", "Orange"]
+</pre>
+
+<h3 id="Работа_с_элементами_массива">Работа с элементами массива</h3>
+
+<p>Вы можете ссылаться на элементы массива путём использования их порядковых номеров. Для примера, предположим, что вы определили следующий массив:</p>
+
+<pre class="brush: js">var myArray = ["Wind", "Rain", "Fire"];
+</pre>
+
+<p>Затем вы сослались на первый элемент массива как myArray[0] и второй элемент массива как myArray[1]. Индексация элементов массива начинается с <strong>нуля</strong>.</p>
+
+<div class="note">
+<p><strong>Замечание: </strong>оператор обращения к элементу массива (квадратные скобки []) также используется для доступа к свойствам массива (массивы также являются объектами в JavaScript). Например:</p>
+</div>
+
+<pre class="brush: js">var arr = ["one", "two", "three"];
+arr[2]; // three
+arr["length"]; // Вернёт число 3, так как это свойство - длина массива
+</pre>
+
+<h3 id="Понимание_length">Понимание <code>length</code></h3>
+
+<p>На уровне реализации, массивы в JavaScript хранят свои элементы как стандартные свойства объекта, используя индекс в качестве имени свойства. Специальное свойство <code>length</code> всегда возвращает индекс посленего элемента плюс один (в примере ниже, элемент 'Dusty' размещается под индексом 30, по этому cats.length возвращает 30 + 1). Особо следует запомнить, что в JavaScript массивы индексируются с нуля: отсчет ведется с 0, а не с 1. Из этого и следует, что свойство <code><code>length</code></code> всегда на единицу больше, чем наибольший индекс хранящийся в массиве:</p>
+
+<pre class="brush: js">var cats = [];
+cats[30] = ['Dusty'];
+console.log(cats.length); // 31
+</pre>
+
+<p>Также, вы можете задавать значение для <code>length</code>. Установка значения меньшего, чем количество хранящихся в массиве элементов, обрезает массив с конца; установка <code>length</code> равным 0 очищает массив полностью:</p>
+
+<pre class="brush: js">var cats = ['Dusty', 'Misty', 'Twiggy'];
+console.log(cats.length); // 3
+
+cats.length = 2;
+console.log(cats); // выводит в консоль "Dusty,Misty" - элемент "Twiggy" был удален
+
+cats.length = 0;
+console.log(cats); // выводит пустую строку; массив cats пуст
+
+cats.length = 3;
+console.log(cats); // выводит [undefined, undefined, undefined]
+</pre>
+
+<h3 id="Перебор_содержимого_массивов">Перебор содержимого массивов</h3>
+
+<p>Очень распространенная задача - это перебор всех элементов массива и обработка каждого элемента некоторой операцией. Вот наипростейший способ сделать это:</p>
+
+<pre class="brush: js">var colors = ['red', 'green', 'blue'];
+for (var i = 0; i &lt; colors.length; i++) {
+ console.log(colors[i]);
+}
+</pre>
+
+<p>Если вам заранее известно, что ни один элемент массива не будет расценен как <code>false</code> при приведении к boolean — например, каждый элемент массива является <a href="/en-US/docs/DOM" title="en-US/docs/DOM">DOM</a> узлом, тогда вы можете блеснуть чуть более эффективным оборотом:</p>
+
+<pre class="brush: js">var divs = document.getElementsByTagName('div');
+for (var i = 0, div; div = divs[i]; i++) {
+ /* Обработать div некоторой операцией */
+}
+</pre>
+
+<p>Подход в примере выше, позволяет избежать проверки длинны массива при каждой итерации, и лишь убеждается, что переменной <code>div</code> присвоен существующий текущий элемент массива при каждом прохождении цикла.</p>
+
+<p>Метод {{jsxref("Array.forEach", "forEach()")}} предоставляет другой способ перебора элементов:</p>
+
+<pre class="brush: js">var colors = ['red', 'green', 'blue'];
+colors.forEach(function(color) {
+ console.log(color);
+});
+</pre>
+
+<p>Как вариант, вы можете сократить код программы, используя стрелочные функции из ES6:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> colors <span class="operator token">=</span> <span class="punctuation token">[</span><span class="string token">'red'</span><span class="punctuation token">,</span> <span class="string token">'green'</span><span class="punctuation token">,</span> <span class="string token">'blue'</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+colors<span class="punctuation token">.</span><span class="function token">forEach</span><span class="punctuation token">(</span>color <span class="operator token">=</span><span class="operator token">&gt;</span> console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>color<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="comment token">// red</span>
+<span class="comment token">// green</span>
+<span class="comment token">// blue</span></code></pre>
+
+<p>Функция, переданная в метод <code>forEach</code>, будет выполнена по одному разу для каждого элемента массива, при этом сам элемент массива будет передан как аргумент в эту функцию. Элементы, значения которым не присвоены, не обрабатываются <code>forEach</code> циклом.</p>
+
+<p>Заметьте, что элементы, пропущенные при создании массива не обрабатываются методом <code>forEach</code>, однако, <code>undefined</code> элемент обрабатывается в том случае, когда он присвоен ячейке массива вручную:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> array <span class="operator token">=</span> <span class="punctuation token">[</span><span class="string token">'first'</span><span class="punctuation token">,</span> <span class="string token">'second'</span><span class="punctuation token">,</span> <span class="punctuation token">,</span> <span class="string token">'fourth'</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+
+array<span class="punctuation token">.</span><span class="function token">forEach</span><span class="punctuation token">(</span><span class="keyword token">function</span><span class="punctuation token">(</span>element<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>element<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="comment token">// first</span>
+<span class="comment token">// second</span>
+<span class="comment token">// fourth</span>
+
+<span class="keyword token">if</span> <span class="punctuation token">(</span>array<span class="punctuation token">[</span><span class="number token">2</span><span class="punctuation token">]</span> <span class="operator token">===</span> undefined<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'array[2] is undefined'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// true</span>
+<span class="punctuation token">}</span>
+
+array <span class="operator token">=</span> <span class="punctuation token">[</span><span class="string token">'first'</span><span class="punctuation token">,</span> <span class="string token">'second'</span><span class="punctuation token">,</span> undefined<span class="punctuation token">,</span> <span class="string token">'fourth'</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+
+array<span class="punctuation token">.</span><span class="function token">forEach</span><span class="punctuation token">(</span><span class="keyword token">function</span><span class="punctuation token">(</span>element<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>element<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="comment token">// first</span>
+<span class="comment token">// second</span>
+<span class="comment token">// undefined</span>
+<span class="comment token">// fourth</span></code></pre>
+
+<p>Так как в JavaScript элементы массива хранятся как обычные свойства объекта, использование  {{jsxref("Statements/for...in","for...in")}} циклов для перебора элементов массива нежелательно, потому что будут обработаны не только элементы массива, но и все перечисляемые свойства массива.</p>
+
+<h3 id="Методы_Array">Методы Array</h3>
+
+<p>Объект {{jsxref("Array")}} имеет следующие методы:</p>
+
+<p>{{jsxref("Array.concat", "concat()")}} объединяет два массива и возвращает новый массив.</p>
+
+<pre>var myArray = new Array("1", "2", "3");
+myArray = myArray.concat("a", "b", "c");
+// myArray = ["1", "2", "3", "a", "b", "c"]
+</pre>
+
+<p>{{jsxref("Array.join", "join(deliminator = ',')")}} объединяет элементы массива в текстовую строку.</p>
+
+<pre>var myArray = new Array("Wind", "Rain", "Fire");
+var list = myArray.join(" - "); // list = "Wind - Rain - Fire"
+</pre>
+
+<p>{{jsxref("Array.push", "push()")}} добавляет один или несколько элементов в конец массива и возвращает результирующую длину.</p>
+
+<pre>var myArray = new Array("1", "2");
+myArray.push("3"); // myArray =["1", "2", "3"]
+</pre>
+
+<p>{{jsxref("Array.pop", "pop()")}} удаляет из массива последний элемент и возвращает его.</p>
+
+<pre>var myArray = new Array("1", "2", "3");
+var last = myArray.pop();
+// myArray =["1", "2"], last = "3"
+</pre>
+
+<p>{{jsxref("Array.shift", "shift()")}} удаляет из массива первый элемент и возвращает его.</p>
+
+<pre>var myArray = new Array ("1", "2", "3");
+var first = myArray.shift();
+// myArray = ["2", "3"], first = "1"
+</pre>
+
+<p>{{jsxref("Array.shift", "unshift()")}} добавляет один или несколько элементов в начало массива и возвращает его новую длинну.</p>
+
+<pre class="brush: js">var myArray = new Array ("1", "2", "3");
+myArray.unshift("4", "5");
+// myArray becomes ["4", "5", "1", "2", "3"]</pre>
+
+<p>{{jsxref("Array.slice", "slice(start_index, upto_index)")}} возвращает секцию массива как новый массив.</p>
+
+<pre class="brush: js">var myArray = new Array ("a", "b", "c", "d", "e");
+myArray = myArray.slice(1, 4); // начиная с индекса 1 извлекаются элементы вплоть до индекса 3
+ // myArray = [ "b", "c", "d"]
+</pre>
+
+<p>{{jsxref("Array.splice", "splice(index, count_to_remove, addElement1, addElement2, ...)")}} удаляет часть элементов из массива и (опционально) заменяет их. Возвращает удалённые элементы.</p>
+
+<pre class="brush: js">var myArray = new Array ("1", "2", "3", "4", "5");
+myArray.splice(1, 3, "a", "b", "c", "d");
+// myArray = ["1", "a", "b", "c", "d", "5"]
+// Этот код, начиная с ячейки под индексом 1 (в которой находилось значение "2"),
+// удаляет 3 элемента, и вставляет на их место
+// элеметны, переданные в качестве последующих параметров.
+</pre>
+
+<p>{{jsxref("Array.reverse", "reverse()")}} переставляет элементы массива в обратном порядке: первый элемент становится последним, а последний - первым.</p>
+
+<pre class="brush: js">var myArray = new Array ("1", "2", "3");
+myArray.reverse();
+// элементы переставлены myArray = [ "3", "2", "1" ]
+</pre>
+
+<p>{{jsxref("Array.sort", "sort()")}} сортирует элементы массива.</p>
+
+<pre class="brush: js">var myArray = new Array("Wind", "Rain", "Fire");
+myArray.sort();
+// массив отсортирован myArray = [ "Fire", "Rain", "Wind" ]
+</pre>
+
+<p><code>Метод sort()</code> может принимать в качестве аргумента <code>callback</code>-функцию, которая определяет каким образом сравнивать элементы массива при сортировке. Функция сравнивает два значения, и возвращает одно из трех значений (список вариантов значений смотрите после примера):</p>
+
+<p>Пример. Следующий код сортирует массив по последнему символу в строке:</p>
+
+<pre class="brush: js">var sortFn = function(a, b){
+ if (a[a.length - 1] &lt; b[b.length - 1]) return -1;
+ if (a[a.length - 1] &gt; b[b.length - 1]) return 1;
+ if (a[a.length - 1] == b[b.length - 1]) return 0;
+}
+myArray.sort(sortFn);
+// массив отсортирован myArray = ["Wind","Fire","Rain"]</pre>
+
+<ul>
+ <li>если <code>a</code> меньше чем <code>b</code> в выбранной системе сравнения, возвращаем <em>-1 (или любое отрицательное число)</em></li>
+ <li>если <code>a</code> больше чем <code>b</code> в выбранной системе сравнения, возвращаем <em>1 (или любое положительное число)</em></li>
+ <li>если <code>a</code> и <code>b</code> считаются равными, возвращаем <em>0</em>.</li>
+</ul>
+
+<p>{{jsxref("Array.indexOf", "indexOf(searchElement[, fromIndex])")}} ищет в массиве элемент со значением <code>searchElement</code> и возвращает индекс первого совпадения.</p>
+
+<pre class="brush: js">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' не найдено
+</pre>
+
+<p>{{jsxref("Array.lastIndexOf", "lastIndexOf(searchElement[, fromIndex])")}} тоже самое, что и <code>indexOf</code>, но поиск ведется в обратном порядке, с конца массива.</p>
+
+<pre class="brush: js">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
+</pre>
+
+<p>{{jsxref("Array.forEach", "forEach(callback[, thisObject])")}} выполняет <code>callback</code>-функцию по каждому элементу массива.</p>
+
+<pre class="brush: js">var a = ['a', 'b', 'c'];
+a.forEach(function(element) { console.log(element);} );
+// выводит в консоль каждый элемент массива по порядку
+</pre>
+
+<p>{{jsxref("Array.map", "map(callback[, thisObject])")}} возвращает новый массив, содержащий результаты вызова <code>callback</code>-функции для каждого элемента исходного массива.</p>
+
+<pre class="brush: js">var a1 = ['a', 'b', 'c'];
+var a2 = a1.map(function(item) { return item.toUpperCase(); });
+console.log(a2); // выводит A,B,C
+</pre>
+
+<p>{{jsxref("Array.filter", "filter(callback[, thisObject])")}} возвращает новый массив, содержащийт только те элементы исходного массива, для которых вызов <code>callback</code>-функции вернул true.</p>
+
+<pre class="brush: js">var a1 = ['a', 10, 'b', 20, 'c', 30];
+var a2 = a1.filter(function(item) { return typeof item == 'number'; });
+console.log(a2); // выводит 10,20,30
+</pre>
+
+<p>{{jsxref("Array.every", "every(callback[, thisObject])")}} возвращает true, если вызов <code>callback</code>-функции вернул  true для всех элементов массива.</p>
+
+<pre class="brush: js">function isNumber(value){
+ return typeof value == 'number';
+}
+var a1 = [1, 2, 3];
+console.log(a1.every(isNumber)); // выводит true
+var a2 = [1, '2', 3];
+console.log(a2.every(isNumber)); // выводит false
+</pre>
+
+<p>{{jsxref("Array.some", "some(callback[, thisObject])")}} возвращает true, если вызов <code>callback</code>-функции вернет true хотя бы для одного элемента.</p>
+
+<pre class="brush: js">function isNumber(value){
+ return typeof value == 'number';
+}
+var a1 = [1, 2, 3];
+console.log(a1.some(isNumber)); // выводит true
+var a2 = [1, '2', 3];
+console.log(a2.some(isNumber)); // выводит true
+var a3 = ['1', '2', '3'];
+console.log(a3.some(isNumber)); // выводит false
+</pre>
+
+<p>Те из методов выше, что принимают <code>callback</code>-функцию в качестве аргумента, известны как методы итерации (<em>iterative methods)</em>, потому что определенным образом проходятся по всем элементам массива. Каждый из таких методов принимает второй, опциональный элемент, называемый <code>thisObject</code>. Если этот аргумент присутствует, то его значение присваивается ключевому слову <code>this</code> в теле <code>callback</code>-функции. Иначе, как и в любом другом случае вызова функции вне явного контекста, <code>this</code> будет ссылаться на глобальный объект ({{domxref("window")}}).</p>
+
+<p>В действительности <code>callback</code>-функция вызывается с тремя аргументами. Первый аргумент - текущий элемен массива, второй - индекс этого элемента, и третий - ссылка на сам массив. Однако, в JavaScript, функции игнорируют любые аргументы, которые не перечислены в списке аргументов. Таким образом, нет ничего страшного в использовании функции с одним аргументом, такой как <code>alert</code>.</p>
+
+<p>{{jsxref("Array.reduce", "reduce(callback[, initialValue])")}} последовательно применяет <code>callback</code>-функцию <code>callback(firstValue, secondValue)</code> для того, чтобы свести все элементы массива к одному значению. В первый параметр функции передаётся предыдущий результат работы функции или первый элемент, а во второй - текущий элемент. Третьим параметром передаётся индекс текущего элемента.</p>
+
+<pre class="brush: js">var a = [10, 20, 30];
+var total = a.reduce(function(first, second, index) { return first + second; }, 0);
+console.log(total) // выводит 60
+</pre>
+
+<p>{{jsxref("Array.reduceRight", "reduceRight(callback[, initalvalue])")}} работает так же как и <code>reduce()</code>, но порядок обхода ведется от конца к началу.</p>
+
+<p><code>Методы reduce</code> и <code>reduceRight</code> являются наименее очевидными методами объекта Array. Они должны использоваться в алгоритмах, которые рекурсивно совмещают два элемента массива, для сведения всей последовательности к одному значению.</p>
+
+<h3 id="Многомерные_массивы">Многомерные массивы</h3>
+
+<p>Массивы могут быть вложенными, то есть массив может содержать массивы в элементах. Используя эту возможность массивов JavaScript, можно построить многомерные массивы.</p>
+
+<p>Следующий код создает двумерный массив:</p>
+
+<pre class="brush: js">var a = new Array(4);
+for (i = 0; i &lt; 4; i++) {
+ a[i] = new Array(4);
+ for (j = 0; j &lt; 4; j++) {
+ a[i][j] = "[" + i + "," + j + "]";
+ }
+}
+</pre>
+
+<p>В этом примере создается массив со следующим содержимым:</p>
+
+<pre>Ряд 0: [0,0] [0,1] [0,2] [0,3]
+Ряд 1: [1,0] [1,1] [1,2] [1,3]
+Ряд 2: [2,0] [2,1] [2,2] [2,3]
+Ряд 3: [3,0] [3,1] [3,2] [3,3]
+</pre>
+
+<h3 id="Массивы_и_регулярные_выражения">Массивы и регулярные выражения</h3>
+
+<p>Когда массив является результатом вычислений регулярного выражения над строкой, он содержит свойтсва и элементы с информацией о совпадениях. Массив возвращается функциями  {{jsxref("Global_Objects/RegExp/exec","RegExp.exec()")}}, {{jsxref("Global_Objects/String/match","String.match()")}} и  {{jsxref("Global_Objects/String/split","String.split()")}} Подробнее о том, как использовать массивы с регулярными выражениями смотрите в <a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions" title="en-US/docs/JavaScript/Guide/Regular Expressions">Regular Expressions</a>.</p>
+
+<h3 id="Работа_с_массивоподобными_объектами">Работа с массивоподобными объектами</h3>
+
+<p>Некоторые объекты в JavaScript, такие как {{domxref("NodeList")}}, возвращаемые методом {{domxref("document.getElementsByTagName()")}}, или специальный объект  {{jsxref("Functions/arguments","arguments")}}, доступный внутри функции, выглядят и ведут себя как обычные массивы, однако не имеет всех присущих массиву методов. Так например, объект <code>arguments</code> имеет свойство {{jsxref("Global_Objects/Function/length","length")}}, но не имеет метода {{jsxref("Array.forEach", "forEach()")}}.</p>
+
+<p>Методы из прототипа Array, могут быть вызваны для массивоподобных объектов. Например:</p>
+
+<pre><code>function printArguments() {
+ Array.prototype.forEach.call(arguments, function(item) {
+ console.log(item);
+ });
+}</code></pre>
+
+<p>Также методы из прототипа Array могут быть применены и к строкам, потому как строки предоставляют доступ к своим символам сходным образом:</p>
+
+<pre class="brush: js"><code>Array.prototype.forEach.call</code>("a string", function(chr) {
+ console.log(chr);
+});</pre>
+
+<h2 id="Типизированные_массивы">Типизированные массивы</h2>
+
+<p><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a> (типизированные массивы) являются массивоподобными объектами, которые предоставляют механизм доступа к сырым бинарным данным. Как вы уже знаете, {{jsxref("Array")}} массивы динамически растут, сокращаются и могут содержать значения любых типов JavaScript. Движки JavaScript производят оптимизации, благодаря чему, эти операции происходят быстро. Однако, веб приложения становятся все более мощными, добавляются возможности манипуляции со звуковыми и видеоданными, доступ к сырым данным <a href="/en-US/docs/WebSockets">WebSockets</a>, и тому подобное. Становится очевидным, что возможность быстрой и эффективной работы с двоичными данными в JavaScript будет очень полезной. Для чего типизированные массивы и предназначены.</p>
+
+<h3 id="Буферы_и_представления_архитектура_типизированных_массивов">Буферы и представления: архитектура типизированных массивов</h3>
+
+<p>Для достижения максимальной гибкости и производительности, реализация типизированных массивов в JavaScript разделена на <strong>буферы</strong> и <strong>представления</strong>. Буфер ({{jsxref("ArrayBuffer")}}) это объект, представляющий из себя блок данных; он не имеет формата и не предоставляет возможности доступа к своему содержимому. Для доступа к памяти буфера вам нужно использовать представление. Представление являет собой контекст, имеющий тип данных, начальную позицию в буфере, и количество элементов — это позволяет представить данные в виде актуального типизированного массива.</p>
+
+<p><img alt="Typed arrays in an ArrayBuffer" src="https://mdn.mozillademos.org/files/8629/typed_arrays.png" style="height: 278px; width: 666px;"></p>
+
+<h3 id="ArrayBuffer">ArrayBuffer</h3>
+
+<p>Объект {{jsxref("ArrayBuffer")}} это стандартный набор бинарных данных с фиксированной длиной. Вы не можете манипулировать содержимым <code>ArrayBuffer</code> напрямую. Вместо этого необходимо создать типизированное представление {{jsxref("DataView")}}, которое будет отображать буфер в определенном формате, и даст доступ на запись и чтение его содержимого.</p>
+
+<h3 id="Типизированные_представления">Типизированные представления</h3>
+
+<p>Название типизированного представления массива говорит само за себя. Оно представляет массив в распространенных числовых форматах, таких как  <code>Int8</code>, <code>Uint32</code>, <code>Float64</code> и так далее. Среди прочих существует специальное представление <code>Uint8ClampedArray</code>. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при <a href="/en-US/docs/Web/API/ImageData">Обработке данных изображения в Canvas</a>.</p>
+
+<p>{{page("en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", "TypedArray_objects")}}</p>
+
+<p>Для получения подробных сведений смотрите <a href="/en-US/docs/Web/JavaScript/Typed_arrays">Типизированные массивы JavaScript</a> и справочную документацию для  {{jsxref("TypedArray")}}.</p>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Keyed_Collections")}}</p>
diff --git a/files/ru/web/javascript/guide/ispolzovanie_promisov/index.html b/files/ru/web/javascript/guide/ispolzovanie_promisov/index.html
new file mode 100644
index 0000000000..a910dfca09
--- /dev/null
+++ b/files/ru/web/javascript/guide/ispolzovanie_promisov/index.html
@@ -0,0 +1,321 @@
+---
+title: Использование промисов
+slug: Web/JavaScript/Guide/Ispolzovanie_promisov
+tags:
+ - JavaScript
+ - Асинхронность
+ - Гайд
+ - промис
+translation_of: Web/JavaScript/Guide/Using_promises
+---
+<div>
+<p>{{jsSidebar("Руководство по JavaScript")}}{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Iterators_and_Generators")}}</p>
+</div>
+
+<p class="summary">{{jsxref("Promise")}} (промис, англ. "обещание") - это объект, представляющий результат успешного или неудачного завершения асинхронной операции. Так как большинство людей пользуются уже созданными промисами, это руководство начнем с объяснения использования вернувшихся промисов до объяснения принципов создания. </p>
+
+<p>В сущности, промис - это возвращаемый объект, в который вы записываете два коллбэка вместо того, чтобы передать их функции.</p>
+
+<p>Например, вместо старомодной функции, которая принимает два коллбэка и вызывает один из них в зависимости от успешного или неудачного завершения операции:</p>
+
+<pre class="brush: js line-numbers language-js">function doSomethingOldStyle(successCallback, failureCallback) {
+ console.log("Готово.");
+ // Успех в половине случаев.
+ if (Math.random() &gt; .5) {
+ successCallback("Успех")
+ } else {
+ failureCallback("Ошибка")
+ }
+}
+
+function successCallback(result) {
+ console.log("Успешно завершено с результатом " + result);
+}
+
+function failureCallback(error) {
+ console.log("Завершено с ошибкой " + error);
+}
+
+doSomethingOldStyle(successCallback, failureCallback);
+</pre>
+
+<p>…современные функции возвращают промис, в который вы записываете ваши коллбэки:</p>
+
+<pre class="brush: js line-numbers language-js">function doSomething() {
+ return new Promise((resolve, reject) =&gt; {
+ console.log("Готово.");
+ // Успех в половине случаев.
+ if (Math.random() &gt; .5) {
+ resolve("Успех")
+ } else {
+ reject("Ошибка")
+ }
+ })
+}
+
+const promise = doSomething();
+promise.then(successCallback, failureCallback);</pre>
+
+<p>…или просто:</p>
+
+<pre class="brush: js line-numbers language-js">doSomething().then(successCallback, failureCallback);</pre>
+
+<p>Мы называем это <em>асинхронным вызовом функции</em>. У этого соглашения есть несколько преимуществ. Давайте рассмотрим их.</p>
+
+<h2 id="Гарантии">Гарантии</h2>
+
+<p>В отличие от старомодных переданных коллбэков промис дает некоторые гарантии:</p>
+
+<ul>
+ <li>Коллбэки никогда не будут вызваны до <a href="/ru/docs/Web/JavaScript/EventLoop#Никогда_не_блокируется">завершения обработки текущего события</a> в событийном цикле JavaScript.</li>
+ <li>Коллбеки, добавленные через .then даже <em>после </em>успешного или неудачного завершения асинхронной операции, будут также вызваны.</li>
+ <li>Несколько коллбэков может быть добавлено вызовом .then нужное количество раз, и они будут выполняться независимо в порядке добавления.</li>
+</ul>
+
+<p>Но наиболее непосредственная польза от промисов - цепочка вызовов (<em>chaining</em>).</p>
+
+<h2 id="Цепочка_вызовов">Цепочка вызовов</h2>
+
+<p>Общая нужда - выполнять две или более асинхронных операции одна за другой, причём каждая следующая начинается при успешном завершении предыдущей и использует результат её выполнения. Мы реализуем это, создавая цепочку вызовов промисов (<em>promise chain</em>).</p>
+
+<p>Вот в чём магия: функция <code>then</code> возвращает новый промис, отличающийся от первоначального:</p>
+
+<pre class="brush: js">let promise = doSomething();
+let promise2 = promise.then(successCallback, failureCallback);
+</pre>
+
+<p>или</p>
+
+<pre class="brush: js">let promise2 = doSomething().then(successCallback, failureCallback);
+</pre>
+
+<p>Второй промис представляет завершение не только <code>doSomething()</code>, но и функций <code>successCallback</code> или <code>failureCallback</code>, переданных Вами, а они тоже могут быть асинхронными функциями, возвращающими промис. В этом случае все коллбэки, добавленные к <code>promise2</code> будут поставлены в очередь за промисом, возвращаемым <code>successCallback</code> или <code>failureCallback</code>.</p>
+
+<p>По сути, каждый вызванный промис означает успешное завершение предыдущих шагов в цепочке.</p>
+
+<p>Раньше выполнение нескольких асинхронных операций друг за другом приводило к классической "Вавилонской башне" коллбэков:</p>
+
+<pre class="brush: js">doSomething(function(result) {
+ doSomethingElse(result, function(newResult) {
+ doThirdThing(newResult, function(finalResult) {
+ console.log('Итоговый результат: ' + finalResult);
+ }, failureCallback);
+ }, failureCallback);
+}, failureCallback);
+</pre>
+
+<p>В современных функциях мы записываем коллбэки в возвращаемые промисы - формируем цепочку промисов:</p>
+
+<pre class="brush: js">doSomething().then(function(result) {
+ return doSomethingElse(result);
+})
+.then(function(newResult) {
+ return doThirdThing(newResult);
+})
+.then(function(finalResult) {
+ console.log('Итоговый результат: ' + finalResult);
+})
+.catch(failureCallback);
+</pre>
+
+<p>Аргументы <code>then</code> необязательны, а <code>catch(failureCallback)</code> - это сокращение для <code>then(null, failureCallback)</code>. Вот как это выражено с помощью <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочных функций</a>:</p>
+
+<pre class="brush: js">doSomething()
+.then(result =&gt; doSomethingElse(result))
+.then(newResult =&gt; doThirdThing(newResult))
+.then(finalResult =&gt; {
+ console.log(`Итоговый результат: ${finalResult}`);
+})
+.catch(failureCallback);
+</pre>
+
+<p><strong>Важно:</strong> Всегда возвращайте промисы в return, иначе коллбэки не будут сцеплены и ошибки могут быть не пойманы (стрелочные функции неявно возвращают результат, если скобки {} вокруг тела функции опущены).</p>
+
+<h3 id="Цепочка_вызовов_после_catch">Цепочка вызовов после catch</h3>
+
+<p>Можно продолжить цепочку вызовов <em>после </em>ошибки, т. е. после <code>catch</code>, что полезно для выполнения новых действий даже после того, как действие вернет ошибку в цепочке вызовов. Ниже приведен пример:</p>
+
+<pre class="syntaxbox"><code class="language-js"><span class="keyword token">new</span> <span class="class-name token">Promise</span><span class="punctuation token">(</span><span class="punctuation token">(</span>resolve<span class="punctuation token">,</span> reject<span class="punctuation token">)</span> <span class="operator token">=</span><span class="operator token">&gt;</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'</span></code>Начало<code class="language-js"><span class="string token">'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+</code>
+ resolve();
+})
+.then(() =&gt; {
+ throw new Error('Где-то произошла ошибка');
+
+ console.log('Выведи это');
+})
+.catch(() =&gt; {
+ console.log('Выведи то');
+})
+.then(() =&gt; {
+ console.log('Выведи это, несмотря ни на что');
+});</pre>
+
+<p>В результате выведется данный текст:</p>
+
+<pre>Начало
+Выведи то
+Выведи это, несмотря ни на что</pre>
+
+<p>Заметьте, что текст "Выведи это" не вывелся, потому что "Где то произошла ошибка" привела к отказу</p>
+
+<h2 id="Распространение_ошибки">Распространение ошибки</h2>
+
+<p>Вы могли ранее заметить, что <code>failureCallback</code>  повторяется три раза  в <strong>"pyramid of doom", </strong>а в цепочке промисов всего лишь один раз:</p>
+
+<pre><code>doSomething()
+.then(result =&gt; doSomethingElse(result))
+.then(newResult =&gt; doThirdThing(newResult))
+.then(finalResult =&gt; console.log(`</code>Итоговый результат<code>: ${finalResult}`))
+.catch(failureCallback);</code></pre>
+
+<p>В основном, цепочка промисов останавливает выполнение кода, если где-либо произошла ошибка, и вместо этого ищет далее по цепочке обработчики ошибок. Это очень похоже на то, как работает синхронный код:</p>
+
+<pre><code>try {
+ let result = syncDoSomething();
+ let newResult = syncDoSomethingElse(result);
+ let finalResult = syncDoThirdThing(newResult);
+ console.log(`</code>Итоговый результат<code>: ${finalResult}`);
+} catch(error) {
+ failureCallback(error);
+}</code>
+</pre>
+
+<p>Эта симметрия с синхронным кодом лучше всего показывает себя в синтаксическом сахаре <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function"><code>async</code>/<code>await</code></a> в ECMAScript 2017:</p>
+
+<pre><code>async function foo() {
+ try {
+ let result = await doSomething();
+ let newResult = await doSomethingElse(result);
+ let finalResult = await doThirdThing(newResult);
+ console.log(`</code>Итоговый результат<code>: ${finalResult}`);
+ } catch(error) {
+ failureCallback(error);
+ }
+}</code>
+</pre>
+
+<p>Работа данного кода основана на промисах. Для примера здесь используется функция <code>doSomething()</code>, которая встречалась ранее. Вы можете прочитать больше о синтаксисе <a href="https://developers.google.com/web/fundamentals/getting-started/primers/async-functions">здесь</a></p>
+
+<p>Примисы решают основную проблему  пирамид, обработку всех ошибок, даже вызовов исключений и программных ошибок. Это основа для функционального построения асинхронных операций.</p>
+
+<h2 id="Создание_промиса_вокруг_старого_коллбэка">Создание промиса вокруг старого коллбэка</h2>
+
+<p>{{jsxref("Promise")}} может быть создан с помощью конструктора. Это может понадобится только для старых API.</p>
+
+<p>В идеале, все асинхронные функции уже должны возвращать промис. Но увы, некоторые APIs до сих пор ожидают успешного или неудачного  коллбека переданных по старинке. Типичный пример: {{domxref("WindowTimers.setTimeout", "setTimeout()")}} функция:</p>
+
+<pre><code>setTimeout(() =&gt; saySomething("10 seconds passed"), 10000);</code></pre>
+
+<p>Смешивание старого коллбэк-стиля и промисов проблематично. В случае неудачного завершения <code>saySomething</code> или программной ошибки, нельзя обработать ошибку.</p>
+
+<p>К с частью мы можем обернуть функцию в промис. Хороший тон оборачивать проблематичные функции на самом низком возможном уровне, и больше никогда их не вызывать на прямую:</p>
+
+<pre><code>const wait = ms =&gt; new Promise(resolve =&gt; setTimeout(resolve, ms));
+
+wait(10000).then(() =&gt; saySomething("10 seconds")).catch(failureCallback);</code></pre>
+
+<p>В сущности, конструктор промиса становится исполнителем функции, который позволяет нам резолвить или режектить промис вручную. Так как <code>setTimeout</code> всегда успешен, мы опустили reject в этом случае.</p>
+
+<h2 id="Композиция">Композиция</h2>
+
+<p>{{jsxref("Promise.resolve()")}} и {{jsxref("Promise.reject()")}} короткий способ создать уже успешные или отклоненные промисы соответственно. Это иногда бывает полезно.</p>
+
+<p>{{jsxref("Promise.all()")}} и {{jsxref("Promise.race()")}} - два метода запустить асинхронные операции параллельно.</p>
+
+<p>Последовательное выполнение композиции возможно при помощи хитрости JavaScript:</p>
+
+<pre><code>[func1, func2].reduce((p, f) =&gt; p.then(f), Promise.resolve());</code></pre>
+
+<p>Фактически, мы превращаем массив асинхронных функций в цепочку промисов равносильно: <code>Promise.resolve().then(func1).then(func2);</code></p>
+
+<p>Это также можно сделать, объеденив композицию в функцию, в функциональном стиле программирования:</p>
+
+<pre><code>const applyAsync = (acc,val) =&gt; acc.then(val);
+const composeAsync = (...funcs) =&gt; x =&gt; funcs.reduce(applyAsync, Promise.resolve(x));</code></pre>
+
+<p><code>composeAsync</code> функция примет любое количество функций в качестве аргументов и вернет новую функцию которая примет в параметрах начальное значение, переданное по цепочке. Это удобно, потому что некоторые или все функции могут быть либо асинхронными либо синхронными, и они гарантированно выполнятся в правильной последовательности:</p>
+
+<pre><code>const transformData = composeAsync(func1, asyncFunc1, asyncFunc2, func2);
+transformData(data);</code></pre>
+
+<p>В ECMAScript 2017, последовательные композиции могут быть выполненны более простым способом с помощью async/await:</p>
+
+<pre><code>for (const f of [func1, func2]) {
+ await f();
+}</code></pre>
+
+<h2 id="Порядок_выполнения">Порядок выполнения</h2>
+
+<p>Чтобы избежать сюрпризов, функции, переданные в <code>then</code> никогда не будут вызванны синхронно, даже с уже разрешенным промисом:</p>
+
+<pre><code>Promise.resolve().then(() =&gt; console.log(2));
+console.log(1); // 1, 2</code></pre>
+
+<p>Вместо немедленного выполнения, переданная функция встанет в очередь микрозадач, а значит выполнится, когда очередь будет пустой  в конце текущего вызова JavaScript цикла событий (event loop), т.е. очень скоро:</p>
+
+<pre><code>const wait = ms =&gt; new Promise(resolve =&gt; setTimeout(resolve, ms));
+
+wait().then(() =&gt; console.log(4));
+Promise.resolve().then(() =&gt; console.log(2)).then(() =&gt; console.log(3));
+console.log(1); // 1, 2, 3, 4</code></pre>
+
+<h2 id="Вложенность">Вложенность</h2>
+
+<p>Простые цепочки promise лучше оставлять без вложений, так как вложеность может быть результатом небрежной структуры. Смотрите <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Ispolzovanie_promisov$edit#Common_mistakes">распространенные ошибки</a>.</p>
+
+<p>Вложенность - это управляющая структура, ограничивающая область действия операторов catch. В частности, вложенный catch только перехватывает сбои в своей области и ниже, а не ошибки выше в цепочке за пределами вложенной области. При правильном использовании это дает большую точность в извлечение ошибок:</p>
+
+<pre><code>doSomethingCritical()
+.then(result =&gt; doSomethingOptional()
+ .then(optionalResult =&gt; doSomethingExtraNice(optionalResult))
+ .catch(e =&gt; {})) // Игнорируется если необязательные параметр не выкинул исключение
+.then(() =&gt; moreCriticalStuff())
+.catch(e =&gt; console.log("Критическая ошибка: " + e.message));</code></pre>
+
+<p>Обратите внимание, что необязательный шаги здесь выделены отступом.</p>
+
+<p>Внутренний оператор catch нейтрализует и перехватывает ошибки только от doSomethingOptional() и doSomethingExtraNice(), после чего код возобновляется с помощью moreCriticalStuff(). Важно, что в случае сбоя doSomethingCritical() его ошибка перехватывается только последним (внешним) catch.</p>
+
+<h2 id="Частые_ошибки">Частые ошибки</h2>
+
+<p>В этом разделе собраны частые ошибки, возникающие при создании цепочек обещаний. Несколько таких ошибок можно увидеть в следующем примере:</p>
+
+<pre><code>// Плохой пример! Три ошибки!
+
+doSomething().then(function(result) {
+ doSomethingElse(result) // Забыл вернуть обещание из внутренней цепочки + неуместное влаживание
+ .then(newResult =&gt; doThirdThing(newResult));
+}).then(() =&gt; doFourthThing());
+// Забыл закончить цепочку методом catch</code></pre>
+
+<p>Первая ошибка это неправильно сцепить вещи между собой. Такое происходит когда мы создаем промис но забываем вернуть его. Как следствие, цепочка сломана, но правильнее было бы сказать что теперь у нас есть две независимые цепочки, соревнующиеся за право разрешится первой. Это означает <code>doFourthThing()</code> не будет ждать <code>doSomethingElse()</code> или <code>doThirdThing()</code> пока тот закончится, и будет исполнятся параллельно с ними, это ,вероятно, не то что хотел разработчик. Отдельные цепочки также имеют отдельную обработку ошибок, что приводит к необработанным ошибкам.</p>
+
+<p>Вторая ошибка это излишняя вложенность, включая первую ошибку. Вложенность также ограничивает область видимости внутренних обработчиков ошибок, если это не то чего хотел разработчик, это может привести к необработанным ошибкам. Примером этого является <a href="https://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it">пример как не нужно создавать обещания</a>, который комбинирует вложенность с чрезмерным использованием конструктора обещаний для оборачивания кода который уже использует промисы.</p>
+
+<p>Третяя ошибка это забыть закончить цепочку ключевым словом <code>catch</code>. Незаконченные цепочки приводят к необработанным отторжениям обещаний в большинстве браузеров.</p>
+
+<p>Хорошим примером является всегда либо возвращать либо заканчивать цепочки обещаний, и как только вы получаете новое обещание, возвращайте его сразу же, чтобы не усложнять код излишней вложенностью:</p>
+
+<pre><code>doSomething()
+.then(function(result) {
+ return doSomethingElse(result);
+})
+.then(newResult =&gt; doThirdThing(newResult))
+.then(() =&gt; doFourthThing())
+.catch(error =&gt; console.log(error));</code></pre>
+
+<p>Обратите внимание что <code>() =&gt; x</code>  это сокращенная форма <code>() =&gt; { return x; }</code>.</p>
+
+<p>Теперь у нас имеется единственная определенная цепочка с правильной обработкой ошибок.</p>
+
+<p>Использование <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function"><code>async</code>/<code>await</code></a> предотвращает большинство, если не все вышеуказанные ошибки—но взамен появляется другая частая ошибка—забыть ключевое слово <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function"><code>await</code></a>.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise.then()")}}</li>
+ <li><a href="http://promisesaplus.com/">Спецификация Promises/A+ (EN)</a></li>
+ <li><a href="http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html">Нолан Лоусон (Nolan Lawson): У нас проблемы с промисами - распространенные ошибки (EN)</a></li>
+</ul>
diff --git a/files/ru/web/javascript/guide/iterators_and_generators/index.html b/files/ru/web/javascript/guide/iterators_and_generators/index.html
new file mode 100644
index 0000000000..a04e4b6384
--- /dev/null
+++ b/files/ru/web/javascript/guide/iterators_and_generators/index.html
@@ -0,0 +1,159 @@
+---
+title: Итераторы и генераторы
+slug: Web/JavaScript/Guide/Iterators_and_Generators
+tags:
+ - yield
+ - Генераторы
+ - Итераторы
+translation_of: Web/JavaScript/Guide/Iterators_and_Generators
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Meta_programming")}}</div>
+
+<p class="summary">Обработка каждого элемента коллекции является весьма распространенной операцией. JavaScript предоставляет несколько способов перебора коллекции, от простого цикла <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for" title="en/Core_JavaScript_1.5_Reference/Statements/for">for</a></code> до <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Array/map">map()</a></code>, <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter" title="en/Core_JavaScript_1.5_Reference/Global_Objects/Array/filter">filter()</a></code> и <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions" title="en/JavaScript/Guide/Predefined Core Objects#Array comprehensions">array comprehensions</a>. Итераторы и генераторы внедряют концепцию перебора непосредственно в ядро языка и обеспечивают механизм настройки поведения <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of" title="en/Core_JavaScript_1.5_Reference/Statements/for...in">for...of</a></code> циклов.</p>
+
+<p>Подробнее см. также:</p>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols">Iteration protocols</a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">function*</a></code> и {{jsxref("Generator")}}</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code> и <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield*">yield*</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Generator_comprehensions">Generator comprehensions</a> {{experimental_inline}}</li>
+</ul>
+
+<h2 id="Итераторы">Итераторы</h2>
+
+<p>Объект является итератором, если он умеет обращаться к элементам коллекции по одному за раз, при этом отслеживая свое текущее положение внутри этой последовательности. В JavaScript итератор - это объект, который предоставляет метод next(), возвращающий следующий элемент последовательности. Этот метод возвращает объект с двумя свойствами: done и value.</p>
+
+<p>После создания, объект-итератор может быть явно использован, с помощью вызовов метода next().</p>
+
+<pre class="brush: js">function makeIterator(array){
+ var nextIndex = 0;
+
+ return {
+ next: function(){
+ return nextIndex &lt; array.length ?
+ {value: array[nextIndex++], done: false} :
+ {done: true};
+ }
+ }
+}</pre>
+
+<p>После инициализации, метод next() может быть вызван для поочередного доступа к парам ключ-значение в объекте:</p>
+
+<pre class="brush: js">var it = makeIterator(['yo', 'ya']);
+console.log(it.next().value); // 'yo'
+console.log(it.next().value); // 'ya'
+console.log(it.next().done); // true</pre>
+
+<h2 id="Генераторы">Генераторы</h2>
+
+<p>В то время как пользовательские итераторы могут быть весьма полезны, при их программировании требуется уделять серьезное внимание поддержке внутреннего состояния. <strong>{{jsxref("Global_Objects/Generator","Генераторы","","true")}}</strong> предоставляют мощную альтернативу: они позволяют определить алгоритм перебора, написав единственную функцию, которая умеет поддерживать собственное состояние.</p>
+
+<p>Генераторы - это специальный тип функции, который работает как фабрика итераторов. Функция становится генератором, если содержит один или более {{jsxref("Operators/yield","yield")}} операторов и использует {{jsxref("Statements/function*","function*")}} синтаксис.</p>
+
+<pre class="brush: js">function* idMaker(){
+ var index = 0;
+ while(true)
+ yield index++;
+}
+
+var it = idMaker();
+
+console.log(it.next().value); // 0
+console.log(it.next().value); // 1
+console.log(it.next().value); // 2
+// ...</pre>
+
+<h2 id="Итерируемые_объекты">Итерируемые объекты</h2>
+
+<p>Объект является итерируемым, если в нем определен способ перебора значений, то есть, например, как значения перебираются в конструкции {{jsxref("Statements/for...of", "for..of")}}. Некоторые встроенные типы, такие как {{jsxref("Array")}} или {{jsxref("Map")}}, по умолчанию являются итерируемыми, в то время как другие типы, как, например, {{jsxref("Object")}}, таковыми не являются.</p>
+
+<p>Чтобы быть итерируемым, объект обязан реализовать метод <strong>@@iterator</strong>, что означает, что он (или один из объектов выше по <a href="/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain">цепочке прототипов</a>) обязан иметь свойство с именем {{jsxref("Symbol.iterator")}}:</p>
+
+<h3 id="Пользовательские_итерируемые_объекты">Пользовательские итерируемые объекты</h3>
+
+<p>Мы можем создать свои собственные итерируемые объекты так:</p>
+
+<pre class="brush: js">var myIterable = {}
+myIterable[Symbol.iterator] = function* () {
+    yield 1;
+    yield 2;
+    yield 3;
+};
+[...myIterable] // [1, 2, 3]
+</pre>
+
+<h3 id="Встроенные_итерируемые_объекты">Встроенные итерируемые объекты</h3>
+
+<p>Объекты {{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} и {{jsxref("Set")}} являются итерируемыми, потому что их прототипы содержат метод {{jsxref("Symbol.iterator")}}.</p>
+
+<h3 id="Синтаксис_для_итерируемых_объектов">Синтаксис для итерируемых объектов</h3>
+
+<p>Некоторые выражения работают с итерируемыми объектами, например, <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for-of</a></code> циклы, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread operator</a>, <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield*">yield*</a></code>, и <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">destructuring assignment</a>.</p>
+
+<pre class="brush: js">for(let value of ["a", "b", "c"]){
+ console.log(value)
+}
+// "a"
+// "b"
+// "c"
+
+[..."abc"] // ["a", "b", "c"]
+
+function* gen(){
+ yield* ["a", "b", "c"]
+}
+
+gen().next() // { value:"a", done:false }
+
+[a, b, c] = new Set(["a", "b", "c"])
+a // "a"
+
+</pre>
+
+<h2 id="Продвинутые_генераторы">Продвинутые генераторы</h2>
+
+<p>Генераторы вычисляют результаты своих yield выражений по требованию, что позволяет им эффективно работать с последовательностями с высокой вычислительной сложностью, или даже с бесконечными последовательностями, как продемонстрировано выше.</p>
+
+<p><code>Метод</code> {{jsxref("Global_Objects/Generator/next","next()")}} также принимает значение, которое может использоваться для изменения внутреннего состояния генератора. Значение, переданное в next(), будет рассматриваться как результат последнего yield выражения, которое приостановило генератор.</p>
+
+<p>Вот генератор чисел Фибоначи, использующий <code>next(x)</code> для перезапуска последовательности:</p>
+
+<pre class="brush: js">function* fibonacci(){
+ var fn1 = 1;
+ var fn2 = 1;
+ while (true){
+ var current = fn2;
+ fn2 = fn1;
+ fn1 = fn1 + current;
+ var reset = yield current;
+ if (reset){
+ fn1 = 1;
+ fn2 = 1;
+ }
+ }
+}
+
+var sequence = fibonacci();
+console.log(sequence.next().value); // 1
+console.log(sequence.next().value); // 1
+console.log(sequence.next().value); // 2
+console.log(sequence.next().value); // 3
+console.log(sequence.next().value); // 5
+console.log(sequence.next().value); // 8
+console.log(sequence.next().value); // 13
+console.log(sequence.next(true).value); // 1
+console.log(sequence.next().value); // 1
+console.log(sequence.next().value); // 2
+console.log(sequence.next().value); // 3</pre>
+
+<div class="note"><strong>Примечание:</strong> Интересно, что вызов <code>next(undefined)</code> равносилен вызову <code>next()</code>. При этом вызов next() для нового генератора с любым аргументом, кроме undefined, спровоцирует исключение <code>TypeError</code>.</div>
+
+<p>Можно заставить генератор выбросить исключение, вызвав его метод {{jsxref("Global_Objects/Generator/throw","throw()")}} и передав в качестве параметра значение исключения, которое должно быть выброшено. Это исключение будет выброшено из текущего приостановленного контекста генератора так, будто текущий приостановленный <code>yield</code> оператор являлся <code>throw</code> оператором.</p>
+
+<p>Если <code>yield</code> оператор не встречается во время обработки выброшенного исключения, то исключение передается выше через вызов <code>throw()</code>, и результатом последующих вызовов <code>next()</code> будет свойство <code>done</code> равное <code>true</code>.</p>
+
+<p>У генераторов есть метод  {{jsxref("Global_Objects/Generator/return","return(value)")}}, который возвращает заданное значение и останавливает работу генератора.</p>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Details_of_the_Object_Model", "Web/JavaScript/Guide/Meta_programming")}}</p>
diff --git a/files/ru/web/javascript/guide/javascript_overview/index.html b/files/ru/web/javascript/guide/javascript_overview/index.html
new file mode 100644
index 0000000000..ab3e38c0f6
--- /dev/null
+++ b/files/ru/web/javascript/guide/javascript_overview/index.html
@@ -0,0 +1,141 @@
+---
+title: Обзор JavaScript
+slug: Web/JavaScript/Guide/JavaScript_Overview
+translation_of: Web/JavaScript/Guide/Introduction
+---
+<p>Эта глава является введением в JavaScript и описывает некоторые из базовых понятий.</p>
+
+<h3 id="What_is_JavaScript.3F" name="What_is_JavaScript.3F">Что такое JavaScript?</h3>
+
+<p>JavaScript это кросс-платформенный, объектно-ориентированный, скриптовый язык. JavaScript - это маленький и легковесный язык; он спроектирован не для создания законченных, полноценных приложений,  а для легкого встраивания в другие продукты и приложения, например, в веб браузеры. Внутри основного приложения, JavaScript может соединяться с объектами этого приложения и осуществлять программный контроль над ними.</p>
+
+<p>Ядро JavaScript содержит набор базовых объектов, например Array, Date и Math, и набор элементов языка: операторов, управляющих структур, и выражений. Ядро JavaScript может быть расширено для различных целей с помощью дополнений, например:</p>
+
+<ul>
+ <li><em>Client-side JavaScript</em> расширяет ядро ​​языка предоставляя объекты управления браузером (Navigator или другой веб-браузер) и его Document Object Model (DOM). Например, клиентские расширения позволяют приложению размещать элементы в HTML-форме и реагировать на пользовательские события, такие как щелчок мыши, ввод данных в форму и навигация по страницам.</li>
+ <li><em>Server-side JavaScript</em> расширяет ядро языка предоставляя объекты для запуска JavaScript на сервере. Например, server-side расширения позволяют приложению соединяться с реляционной базой данных, обеспечивать непрерывность информации между вызовами приложения, или выполнять операции над файлами на сервере.</li>
+</ul>
+
+<p>Используя функции JavaScript LiveConnect, Вы можете позволить коду на Java и JavaScript общаться между собой. Вы можете создать экземпляр объекта Java из JavaScript и получить доступ к его публичным методам и свойствам. Из Java, Вы можете получить доступ к объектам, свойствам и методам JavaScript.</p>
+
+<p>Впервые JavaScript был использован в браузерах Netscape.</p>
+
+<h3 id="JavaScript_and_Java" name="JavaScript_and_Java">JavaScript и Java</h3>
+
+<p>JavaScript и Java схожи в некоторых отношениях, но принципиально отличаются в других. Язык JavaScript напоминает Java, но не имеет статической типизации и строгой проверки типов. В основном, JavaScript следует большей части синтакса Java в выражениях, именованиях и основного потока управления конструкциями, что стало причиной, почему он был переименован из LiveScript в JavaScript.</p>
+
+<p>В отличии от системы компилированных классов в Java, построенной на объявлениях, JavaScript поддерживает систему исполнения, основанную на небольшом количестве типов данных, представляющих числовые, логические и строковые значения. JavaScript обладает моделью объектов на базе прототипов вместо более общей модели объектов на базе классов. Модель объектов на базе прототипов делает возможным динамическое наследование; то есть, то, что унаследовано, может различаться для отдельных объектов. JavaScript также поддерживает функции без каких-либо специальных декларативных требований. Функции могут быть свойствами объектов, выполняться как слабо типизированные методы.</p>
+
+<p>По сравнению с Java, JavaScript - это язык с очень свободной формой языка. Вам не надо объявлять переменные, классы или методы. Вы не должны беспокоиться, является ли метод public, private или protected, Вам не надо реализовывать интерфейсы. Переменные, параметры и возвращаемые функциями типы не являются явно типизированными.</p>
+
+<p>Java - язык программирования на основе классов, предназначенный для быстрого выполнения и безопасности типов. Безопасность типов означает, например, что Вы не можете взять тип Java integer и привести его к типу object reference или получить доступ к закрытой памяти изменяя байт-код Java. Ориентированная на классы модель Java означает, что программы состоят исключительно из классов и их методов. Наследование классов и строгая типизация в Java обычно тербуют тесно связанную иерархию объектов. Эти требования делают программирование на Java более сложным чем на JavaScript.</p>
+
+<p>По духу JavaScript происходит от нескольких небольших, динамически типизированных языков программирования, таких как HyperTalk и dBASE. Эти скриптовые языки предлагают инструменты программирования для гораздо более широкой аудитории благодаря более простому синтаксису, специальной встроенной функциональности и минимальным требованиям для создания объектов.</p>
+
+<table class="standard-table">
+ <caption>Таблица 1.1 Сравнение JavaScript и Java</caption>
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Объектно-ориентированный. Нет различий между типами объектов. Наследование реализовано через механизм прототипов, свойства и методы могут быть динамически добавлены к любому объекту.</td>
+ <td>На базе классов. Объекты делятся на классы и экземпляры с наследованием через иерархию классов. Классы и экземпляры не могут иметь динамически добавленные свойства и методы.</td>
+ </tr>
+ <tr>
+ <td>Типы данных переменных не объявлены (динамическая типизация).</td>
+ <td>Типы данных переменных должны быть объявлены (статическая типизация).</td>
+ </tr>
+ <tr>
+ <td>Не может автоматически записывать на жесткий диск.</td>
+ <td>Может автоматически записывать на жесткий диск.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Для получения дополнительной информации о различиях между JavaScript и Java, см. раздел <a href="/en/JavaScript/Guide/Details_of_the_Object_Model" title="en/JavaScript/Guide/Details of the Object Model">Details of the Object Model</a>.</p>
+
+<h3 id="JavaScript_and_the_ECMAScript_Specification" name="JavaScript_and_the_ECMAScript_Specification">JavaScript and the ECMAScript Specification</h3>
+
+<p>Netscape invented JavaScript, and JavaScript was first used in Netscape browsers. However, Netscape is working with <a class="external" href="http://www.ecma-international.org/">Ecma International</a> — the European association for standardizing information and communication systems (ECMA was formerly an acronym for the European Computer Manufacturers Association) to deliver a standardized, international programming language based on core JavaScript. This standardized version of JavaScript, called ECMAScript, behaves the same way in all applications that support the standard. Companies can use the open standard language to develop their implementation of JavaScript. The ECMAScript standard is documented in the ECMA-262 specification.</p>
+
+<p>The ECMA-262 standard is also approved by the <a class="external" href="http://www.iso.ch/">ISO</a> (International Organization for Standardization) as ISO-16262. You can find a <a class="external" href="http://www-archive.mozilla.org/js/language/E262-3.pdf" title="http://www-archive.mozilla.org/js/language/E262-3.pdf">PDF version of ECMA-262</a> (outdated version) at the Mozilla website. You can also find the specification on <a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">the Ecma International website</a>. The ECMAScript specification does not describe the Document Object Model (DOM), which is standardized by the <a class="external" href="http://www.w3.org/">World Wide Web Consortium (W3C)</a>. The DOM defines the way in which HTML document objects are exposed to your script.</p>
+
+<h4 id="Relationship_between_JavaScript_Versions_and_ECMAScript_Editions" name="Relationship_between_JavaScript_Versions_and_ECMAScript_Editions">Relationship between JavaScript Versions and ECMAScript Editions</h4>
+
+<p>Netscape worked closely with Ecma International to produce the ECMAScript Specification (ECMA-262). The following table describes the relationship between JavaScript versions and ECMAScript editions.</p>
+
+<table class="standard-table">
+ <caption>Table 1.2 JavaScript versions and ECMAScript editions</caption>
+ <thead>
+ <tr>
+ <th scope="row">JavaScript version</th>
+ <th scope="col">Relationship to ECMAScript edition</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>JavaScript 1.1</td>
+ <td>ECMA-262, Edition 1 is based on JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.2</td>
+ <td>ECMA-262 was not complete when JavaScript 1.2 was released. JavaScript 1.2 is not fully compatible with ECMA-262, Edition 1, for the following reasons:
+ <ul>
+ <li>Netscape developed additional features in JavaScript 1.2 that were not considered for ECMA-262.</li>
+ <li>ECMA-262 adds two new features: internationalization using Unicode, and uniform behavior across all platforms. Several features of JavaScript 1.2, such as the <code>Date</code> object, were platform-dependent and used platform-specific behavior.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>JavaScript 1.3</p>
+ </td>
+ <td>
+ <p>JavaScript 1.3 is fully compatible with ECMA-262, Edition 1.</p>
+
+ <p>JavaScript 1.3 resolved the inconsistencies that JavaScript 1.2 had with ECMA-262, while keeping all the additional features of JavaScript 1.2 except == and !=, which were changed to conform with ECMA-262.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <p>JavaScript 1.4</p>
+ </td>
+ <td>
+ <p>JavaScript 1.4 is fully compatible with ECMA-262, Edition 1.</p>
+
+ <p>The third version of the ECMAScript specification was not finalized when JavaScript 1.4 was released.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>JavaScript 1.5</td>
+ <td>JavaScript 1.5 is fully compatible with ECMA-262, Edition 3.</td>
+ </tr>
+ </tbody>
+</table>
+
+<div class="note"><strong>Note</strong>: ECMA-262, Edition 2 consisted of minor editorial changes and bug fixes to the Edition 1 specification. The  current release by the TC39 working group of Ecma International is ECMAScript Edition 5.1</div>
+
+<p>The <a href="/en/JavaScript/Reference" title="en/JavaScript/Reference">JavaScript Reference</a> indicates which features of the language are ECMAScript-compliant.</p>
+
+<p>JavaScript will always include features that are not part of the ECMAScript Specification; JavaScript is compatible with ECMAScript, while providing additional features.</p>
+
+<h4 id="JavaScript_Documentation_versus_the_ECMAScript_Specification" name="JavaScript_Documentation_versus_the_ECMAScript_Specification">JavaScript Documentation versus the ECMAScript Specification</h4>
+
+<p>The ECMAScript specification is a set of requirements for implementing ECMAScript; it is useful if you want to determine whether a JavaScript feature is supported in other ECMAScript implementations. If you plan to write JavaScript code that uses only features supported by ECMAScript, then you may need to review the ECMAScript specification.</p>
+
+<p>The ECMAScript document is not intended to help script programmers; use the JavaScript documentation for information on writing scripts.</p>
+
+<h4 id="JavaScript_and_ECMAScript_Terminology">JavaScript and ECMAScript Terminology</h4>
+
+<p>The ECMAScript specification uses terminology and syntax that may be unfamiliar to a JavaScript programmer. Although the description of the language may differ in ECMAScript, the language itself remains the same. JavaScript supports all functionality outlined in the ECMAScript specification.</p>
+
+<p>The JavaScript documentation describes aspects of the language that are appropriate for a JavaScript programmer. For example:</p>
+
+<ul>
+ <li>The Global Object is not discussed in the JavaScript documentation because you do not use it directly. The methods and properties of the Global Object, which you do use, are discussed in the JavaScript documentation but are called top-level functions and properties.</li>
+ <li>The no parameter (zero-argument) constructor with the <code>Number</code> and <code>String</code> objects is not discussed in the JavaScript documentation, because what is generated is of little use. A <code>Number</code> constructor without an argument returns +0, and a <code>String</code> constructor without an argument returns "" (an empty string).</li>
+</ul>
diff --git a/files/ru/web/javascript/guide/keyed_collections/index.html b/files/ru/web/javascript/guide/keyed_collections/index.html
new file mode 100644
index 0000000000..2b2d128801
--- /dev/null
+++ b/files/ru/web/javascript/guide/keyed_collections/index.html
@@ -0,0 +1,172 @@
+---
+title: Коллекции
+slug: Web/JavaScript/Guide/Keyed_collections
+tags:
+ - коллекции
+ - словари
+ - структура данных
+translation_of: Web/JavaScript/Guide/Keyed_collections
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}</div>
+
+<p class="summary">Этот раздел содержит обзор коллекций {{jsxref("Set")}} и словарей {{jsxref("Map")}} - встроенных {{Glossary("Data_structure","структур данных")}} с доступом по ключу.</p>
+
+<h2 id="Словари">Словари</h2>
+
+<h3 id="Тип_Map"><code>Тип Map</code> </h3>
+
+<p>{{jsxref("Map")}} - реализация простого ассоциативного массива (словаря). Он содержит данные в виде набора пар ключ/значение(ключи уникальны) и предоставляет методы для доступа и манипулирования этими данными.  </p>
+
+<p>Также как и {{jsxref("Object", "объект", "", 1)}}, словарь позволяет</p>
+
+<ul>
+ <li>получать значение  по ключу, а также проверять наличие ключа</li>
+ <li>добавлять/удалять пары ключ/значение</li>
+ <li>перезаписывать значение по ключу (ключи уникальны).</li>
+ <li>итерироваться по ключам</li>
+</ul>
+
+<p>Словари, как специализированная структура данных, имеют существенные преимущества по сравнению с объектами<font face="Consolas, Liberation Mono, Courier, monospace">:</font></p>
+
+<ul>
+ <li>Ключи словаря могут быть любого типа (а не только строки).</li>
+ <li>Словарь хранит свой размер (не надо вычислять).</li>
+ <li>Натуральный порядок обхода элементов ( в порядке добавления) с помощью {{jsxref("Statements/for...of","for...of")}}.</li>
+ <li>Словарь не подмешивает ключи из прототипа (в отличие от объекта).</li>
+</ul>
+
+<p>В следующем примере приведены основные операции со словарём:</p>
+
+<pre class="brush: js">var sayings = new Map();
+sayings.set("dog", "woof");
+sayings.set("cat", "meow").set("elephant", "toot");
+//вызов функции .set возвращает Map, поэтому set можно объединять в цепочки
+
+sayings.set("dog", "гав-гав"); // заменить значение по ключу
+
+sayings.size; // 3
+sayings.get("fox"); // undefined
+sayings.has("bird"); // false
+sayings.delete("dog");
+
+for (var [key, value] of sayings) {
+  console.log(key + " goes " + value);
+}
+// "cat goes meow"
+// "elephant goes toot"
+</pre>
+
+<p>Больше примеров и полное описание на странице справочника {{jsxref("Map")}} .</p>
+
+<h3 id="Тип_WeakMap"><code>Тип WeakMap</code> </h3>
+
+<p>{{jsxref("WeakMap")}} это специальный вид словаря, <strong>ключами которого могут быть только объекты</strong>, причём ссылки на них в WeakMap являются  <em>слабыми </em>(не учитываются  сборщиком мусора (garbage collector GC)).</p>
+
+<div class="note">
+<p>Интерфейс <code>WeakMap</code> совпадает с <code>Map</code>, единственное отличие - <strong>ключи <code>WeakMap</code> нельзя итерировать</strong> (т.e. нельзя получить список ключей). Это понятно, поскольку в таком случае возникла бы неопределённость с достоверностью этого списка в зависимости от состояния garbage collection.</p>
+</div>
+
+<p>Больше примеров, полное описание, а также обсуждение "Зачем <s>козе баян</s> <em>WeakMap</em>?"  на странице справочника {{jsxref("WeakMap")}}.</p>
+
+<p>Отметим, что <code>WeakMap,</code> в частности, может элегантно использоваться для упаковки приватных данных или деталей реализации. Следующий пример из статьи Nick Fitzgerald <a href="http://fitzgeraldnick.com/weblog/53/">"Hiding Implementation Details with ECMAScript 6 WeakMaps"</a>. Приватная часть сохраняется как значение в <code>privates</code> и имеет время жизни такое же как и сущность класса. Сам класс и его методы публичны; прочее недоступно извне модуля:</p>
+
+<pre class="brush: js">const privates = new WeakMap();
+
+export class Public() {
+
+  constructor() {
+ const me = {
+ // Приватные данные идут здесь
+ };
+  // 'me' будет освобождён вместе с 'this' !!!
+ privates.set(this, me);
+ }
+
+ method () {
+ const me = privates.get(this);
+ // Сделайте что-нибудь с приватными данными в 'me'...
+  }
+}
+</pre>
+
+<h2 id="Коллекции">Коллекции</h2>
+
+<h3 id="Тип_Set"><code>Тип Set</code> </h3>
+
+<p>{{jsxref("Set")}} реализация коллекции - структура данных, которая содержит список уникальных элементов в порядке их добавления. </p>
+
+<p>В следующем примере приведены основные операции по работе с коллекцией <code>Set:</code></p>
+
+<pre class="brush: js">var mySet = new Set();
+mySet.add(1);
+mySet.add("some text");
+mySet.add("foo");
+
+mySet.has(1); // true
+mySet.delete("foo");
+mySet.size; // 2
+
+for (let item of mySet) console.log(item);
+// 1
+// "some text"
+</pre>
+
+<p>Больше примеров и полное описание на странице справочника {{jsxref("Set")}}</p>
+
+<h4 id="Преобразования_между_Array_и_Set">Преобразования между Array и Set</h4>
+
+<p>Можно создать {{jsxref("Array")}} из Set с помощью {{jsxref("Array.from")}} или используя <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread operator</a>.</p>
+
+<p>В свою очередь, конструктор <code>Set</code> может принимать <code>Array</code> в качестве аргумента.</p>
+
+<div class="note">
+<p>Поскольку <code>Set</code> структура работает с уникальными значениями, любые повторяющиеся элементы из Array будут проигнорированы.</p>
+</div>
+
+<pre class="brush: js">Array.from(mySet);
+[...mySet2];
+
+mySet2 = new Set([1,2,3,4]);
+</pre>
+
+<h4 id="Сравнение_Array_и_Set"><code>Сравнение Array</code> и <code>Set</code> </h4>
+
+<p>Словари, как специализированная структура данных, имеют существенные отличия по сравнению с массивами:</p>
+
+<ul>
+ <li>{{jsxref("Set.has")}} работает быстрее чем {{jsxref("Array.indexOf")}}.</li>
+ <li><font face="Consolas, Liberation Mono, Courier, monospace">можно удалять элементы по значению (а не по индексу как массивах)</font>.</li>
+ <li>{{jsxref("NaN")}} обрабатывается корректно.</li>
+ <li><font face="Consolas, Liberation Mono, Courier, monospace">поддерживается уникальность значений</font>.</li>
+</ul>
+
+<h3 id="Тип_WeakSet"><code>Тип WeakSet</code> </h3>
+
+<p>{{jsxref("WeakSet")}} это специальный вид коллекции, элементами которой могут быть только объекты. Ссылки на эти объекты в WeakSet являютя <em>слабыми </em>(не учитываются  сборщиком мусора (garbage collector GC)).</p>
+
+<div class="note">
+<p>Элементы <code>WeakSet</code> уникальны и могут быть добавлены только один раз, также как и в {{jsxref("Set")}}. </p>
+</div>
+
+<p>Основные отличия от {{jsxref("Set")}}:</p>
+
+<ul>
+ <li><code>WeakSet</code> это коллекция <em>объектов</em> ( примитивные значения не могут быть добавлены).</li>
+ <li><code>WeakSet</code> <em>нельзя итерировать</em>. А также нельзя получить список (итератор) элементов.</li>
+</ul>
+
+<p>Использование <code>WeakSet</code> достаточно специфическое. Пользуясь тем, что они не могут создавать утечек памяти, в них можно, например, безопасно помещать ссылки на DOM элементы.</p>
+
+<p>Больше примеров и полное описание на странице справочника {{jsxref("WeakSet")}}</p>
+
+<h2 id="Проверка_на_равенство_в_Map_и_Set">Проверка на равенство в <code>Map</code> и <code>Set</code></h2>
+
+<p>Сравнение на равенство ключей в <code>Map</code> objects или объектов в <code>Set</code> основано на "<a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero">same-value-zero algorithm</a>":</p>
+
+<ul>
+ <li>алгоритм сравнения в целом совпадает с оператором <code>===</code>.</li>
+ <li><code>-0</code> и <code>+0</code> считаются равными (в отличие от <code>===</code>).</li>
+ <li>{{jsxref("NaN")}} считается равным самому себе (в отличие от <code>===</code>).</li>
+</ul>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Indexed_Collections", "Web/JavaScript/Guide/Working_with_Objects")}}</p>
diff --git a/files/ru/web/javascript/guide/liveconnect_overview/index.html b/files/ru/web/javascript/guide/liveconnect_overview/index.html
new file mode 100644
index 0000000000..baf6f2577c
--- /dev/null
+++ b/files/ru/web/javascript/guide/liveconnect_overview/index.html
@@ -0,0 +1,795 @@
+---
+title: LiveConnect Overview
+slug: Web/JavaScript/Guide/LiveConnect_Overview
+translation_of: Archive/Web/LiveConnect/LiveConnect_Overview
+---
+<p>Эта глава описывает технолонию <a href="/en-US/docs/LiveConnect" title="en-US/docs/LiveConnect">LiveConnect</a> которая позволяет Java и JavaScript взаимодейстовать между собой. В этой главе полагается что вы имеет представление о языке программирования Java.</p>
+
+<h2 id="Working_with_Wrappers">Working with Wrappers</h2>
+
+<p>В JavaScript, <em>обертка </em>это объект s an object of the target language data type that encloses an object of the source language. When programming in JavaScript, you can use a wrapper object to access methods and fields of the Java object; calling a method or accessing a property on the wrapper results in a call on the Java object. On the Java side, JavaScript objects are wrapped in an instance of the class <code>netscape.javascript.JSObject</code> and passed to Java.</p>
+
+<p>When a JavaScript object is sent to Java, the runtime engine creates a Java wrapper of type <code>JSObject</code>; when a <code>JSObject</code> is sent from Java to JavaScript, the runtime engine unwraps it to its original JavaScript object type. The <code>JSObject</code> class provides an interface for invoking JavaScript methods and examining JavaScript properties.</p>
+
+<h2 id="JavaScript_to_Java_Communication">JavaScript to Java Communication</h2>
+
+<p>When you refer to a Java package or class, or work with a Java object or array, you use one of the special LiveConnect objects. All JavaScript access to Java takes place with these objects, which are summarized in the following table.</p>
+
+<table class="standard-table">
+ <caption>Table 9.1 The LiveConnect Objects</caption>
+ <thead>
+ <tr>
+ <th scope="col">Object</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>JavaArray</code></td>
+ <td>A wrapped Java array, accessed from within JavaScript code.</td>
+ </tr>
+ <tr>
+ <td><code>JavaClass</code></td>
+ <td>A JavaScript reference to a Java class.</td>
+ </tr>
+ <tr>
+ <td><code>JavaObject</code></td>
+ <td>A wrapped Java object, accessed from within JavaScript code.</td>
+ </tr>
+ <tr>
+ <td><code>JavaPackage</code></td>
+ <td>A JavaScript reference to a Java package.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p><strong>Note:</strong> Because Java is a strongly typed language and JavaScript is weakly typed, the JavaScript runtime engine converts argument values into the appropriate data types for the other language when you use LiveConnect. See <a href="/en-US/docs/JavaScript/Guide/Values,_Variables,_and_Literals#Data_Type_Conversion" title="en-US/docs/JavaScript/Guide/Values, Variables, and Literals#Data Type Conversion">Data Type Conversion</a> for complete information.</p>
+
+<p>In some ways, the existence of the LiveConnect objects is transparent, because you interact with Java in a fairly intuitive way. For example, you can create a Java <code>String</code> object and assign it to the JavaScript variable <code>myString</code> by using the <code>new</code> operator with the Java constructor, as follows:</p>
+
+<pre class="brush: js">var myString = new java.lang.String("Hello world");
+</pre>
+
+<p>In the previous example, the variable <code>myString</code> is a <code>JavaObject</code> because it holds an instance of the Java object <code>String</code>. As a <code>JavaObject</code>, <code>myString</code> has access to the public instance methods of <code>java.lang.String</code> and its superclass, <code>java.lang.Object</code>. These Java methods are available in JavaScript as methods of the <code>JavaObject</code>, and you can call them as follows:</p>
+
+<pre class="brush: js">myString.length(); // returns 11
+</pre>
+
+<p>Static members can be called directly on the JavaClass object.</p>
+
+<pre class="brush: js">alert(java.lang.Integer.MAX_VALUE); //alerts 2147483647
+</pre>
+
+<h3 id="The_Packages_Object">The Packages Object</h3>
+
+<p>If a Java class is not part of the <code>java</code>, <code>sun</code>, or <code>netscape</code> packages, you access it with the <code>Packages</code> object. For example, suppose the Redwood corporation uses a Java package called <code>redwood</code> to contain various Java classes that it implements. To create an instance of the <code>HelloWorld</code> class in <code>redwood</code>, you access the constructor of the class as follows:</p>
+
+<pre class="brush: js">var red = new Packages.redwood.HelloWorld();
+</pre>
+
+<p>You can also access classes in the default package (that is, classes that don't explicitly name a package). For example, if the HelloWorld class is directly in the <code>CLASSPATH</code> and not in a package, you can access it as follows:</p>
+
+<pre class="brush: js">var red = new Packages.HelloWorld();
+</pre>
+
+<p>The LiveConnect <code>java</code>, <code>sun</code>, and <code>netscape</code> objects provide shortcuts for commonly used Java packages. For example, you can use the following:</p>
+
+<pre class="brush: js">var myString = new java.lang.String("Hello world");
+</pre>
+
+<p>instead of the longer version:</p>
+
+<pre class="brush: js">var myString = new Packages.java.lang.String("Hello world");
+</pre>
+
+<h3 id="Working_with_Java_Arrays">Working with Java Arrays</h3>
+
+<p>When any Java method creates an array and you reference that array in JavaScript, you are working with a <code>JavaArray</code>. For example, the following code creates the <code>JavaArray x</code> with ten elements of type int:</p>
+
+<pre class="brush: js">var x = java.lang.reflect.Array.newInstance(java.lang.Integer, 10);
+</pre>
+
+<p>Like the JavaScript <code>Array</code> object, <code>JavaArray</code> has a <code>length</code> property which returns the number of elements in the array. Unlike <code>Array.length</code>, <code>JavaArray.length</code> is a read-only property, because the number of elements in a Java array are fixed at the time of creation.</p>
+
+<h3 id="Package_and_Class_References">Package and Class References</h3>
+
+<p>Simple references to Java packages and classes from JavaScript create the <code>JavaPackage</code> and <code>JavaClass</code> objects. In the earlier example about the Redwood corporation, for example, the reference Packages.redwood is a JavaPackage object. Similarly, a reference such as <code>java.lang.String</code> is a <code>JavaClass</code> object.</p>
+
+<p>Most of the time, you don't have to worry about the <code>JavaPackage</code> and <code>JavaClass</code> objects—you just work with Java packages and classes, and LiveConnect creates these objects transparently. There are cases where LiveConnect will fail to load a class, and you will need to manually load it like this:</p>
+
+<pre class="brush: js">var Widgetry = java.lang.Thread.currentThread().getContextClassLoader().loadClass("org.mywidgets.Widgetry");
+</pre>
+
+<p>In JavaScript 1.3 and earlier, <code>JavaClass</code> objects are not automatically converted to instances of <code>java.lang.Class</code> when you pass them as parameters to Java methods—you must create a wrapper around an instance of <code>java.lang.Class</code>. In the following example, the <code>forName</code> method creates a wrapper object <code>theClass</code>, which is then passed to the <code>newInstance</code> method to create an array.</p>
+
+<pre class="brush: js">// JavaScript 1.3
+var theClass = java.lang.Class.forName("java.lang.String");
+var theArray = java.lang.reflect.Array.newInstance(theClass, 5);
+</pre>
+
+<p>In JavaScript 1.4 and later, you can pass a <code>JavaClass</code> object directly to a method, as shown in the following example:</p>
+
+<pre class="brush: js">// JavaScript 1.4
+var theArray = java.lang.reflect.Array.newInstance(java.lang.String, 5);
+</pre>
+
+<h3 id="Arguments_of_Type_char">Arguments of Type char</h3>
+
+<p>In JavaScript 1.4 and later, you can pass a one-character string to a Java method which requires an argument of type <code>char</code>. For example, you can pass the string "H" to the <code>Character</code> constructor as follows:</p>
+
+<pre class="brush: js">var c = new java.lang.Character("H");
+</pre>
+
+<p>In JavaScript 1.3 and earlier, you must pass such methods an integer which corresponds to the Unicode value of the character. For example, the following code also assigns the value "H" to the variable <code>c</code>:</p>
+
+<pre class="brush: js">var c = new java.lang.Character(72);
+</pre>
+
+<h3 id="Handling_Java_Exceptions_in_JavaScript">Handling Java Exceptions in JavaScript</h3>
+
+<p>When Java code fails at run time, it throws an exception. If your JavaScript code accesses a Java data member or method and fails, the Java exception is passed on to JavaScript for you to handle. Beginning with JavaScript 1.4, you can catch this exception in a <code>try...catch</code> statement. (Although this functionality (along with some others) had been broken in Gecko 1.9 (see {{ bug("391642") }}) as the Mozilla-specific LiveConnect code had not been maintained inside Mozilla, with Java 6 update 11 and 12 building support for reliance on Mozilla's implementation of the generic (and cross-browser) <a href="/en-US/docs/Plugins" title="en-US/docs/Plugins">NPAPI</a> plugin code, this has again been fixed.)</p>
+
+<p>For example, suppose you are using the Java <code>forName</code> method to assign the name of a Java class to a variable called <code>theClass</code>. The <code>forName</code> method throws an exception if the value you pass it does not evaluate to the name of a Java class. Place the <code>forName</code> assignment statement in a <code>try</code> block to handle the exception, as follows:</p>
+
+<pre class="brush: js">function getClass(javaClassName) {
+ try {
+ var theClass = java.lang.Class.forName(javaClassName);
+ } catch (e) {
+ return ("The Java exception is " + e);
+ }
+ return theClass;
+}
+</pre>
+
+<p>In this example, if <code>javaClassName</code> evaluates to a legal class name, such as "java.lang.String", the assignment succeeds. If <code>javaClassName</code> evaluates to an invalid class name, such as "String", the <code>getClass</code> function catches the exception and returns something similar to the following:</p>
+
+<pre>The Java exception is java.lang.ClassNotFoundException: String
+</pre>
+
+<p>For specialized handling based on the exception type, use the <code>instanceof</code> operator:</p>
+
+<pre class="brush: js">try {
+ // ...
+} catch (e) {
+ if (e instanceof java.io.FileNotFound) {
+ // handling for FileNotFound
+ } else {
+ throw e;
+ }
+}
+</pre>
+
+<p>See <a href="/en-US/docs/JavaScript/Guide/Statements#Exception_Handling_Statements" title="en-US/docs/JavaScript/Guide/Statements#Exception Handling Statements">Exception Handling Statements</a> for more information about JavaScript exceptions.</p>
+
+<h2 id="Java_to_JavaScript_Communication">Java to JavaScript Communication</h2>
+
+<p>If you want to use JavaScript objects in Java, you must import the <code>netscape.javascript</code> package into your Java file. This package defines the following classes:</p>
+
+<ul>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/LiveConnect/JSObject" title="en-US/docs/JavaScript/Reference/LiveConnect/JSObject">netscape.javascript.JSObject</a></code> allows Java code to access JavaScript methods and properties.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/LiveConnect/JSException" title="en-US/docs/JavaScript/Reference/LiveConnect/JSException">netscape.javascript.JSException</a></code> allows Java code to handle JavaScript errors.</li>
+</ul>
+
+<p>See the <a href="/en-US/docs/JavaScript/Reference" title="en-US/docs/JavaScript/Reference">JavaScript Reference</a> for more information about these classes.</p>
+
+<h3 id="Locating_the_LiveConnect_classes" name="Locating_the_LiveConnect_classes">Locating the LiveConnect classes</h3>
+
+<p>In older versions of the Netscape browser, these classes were distributed along with the browser. Starting with JavaScript 1.2, these classes are delivered in a .jar file; in previous versions of JavaScript, these classes are delivered in a .zip file. For example, with Netscape Navigator 4 for Windows NT, the classes are delivered in the <code>java40.jar</code> file in the <code>Program\Java\Classes</code> directory beneath the Navigator directory.</p>
+
+<p>More recently, the classes have been distributed with Sun's Java Runtime; initially in the file "jaws.jar" in the "jre/lib" directory of the runtime distribution (for JRE 1.3), then in "plugin.jar" in the same location (JRE 1.4 and up).</p>
+
+<h3 id="Using_the_LiveConnect_classes_with_the_JDK" name="Using_the_LiveConnect_classes_with_the_JDK">Using the LiveConnect classes with the JDK</h3>
+
+<p>To access the LiveConnect classes, place the .jar or .zip file in the <code>CLASSPATH</code> of the JDK compiler in either of the following ways:</p>
+
+<ul>
+ <li>Create a <code>CLASSPATH</code> environment variable to specify the path and name of .jar or .zip file.</li>
+ <li>Specify the location of .jar or .zip file when you compile by using the <code>-classpath</code> command line parameter.</li>
+</ul>
+
+<p>You can specify an environment variable in Windows NT by double-clicking the System icon in the Control Panel and creating a user environment variable called <code>CLASSPATH</code> with a value similar to the following:</p>
+
+<pre class="eval">C:\Program Files\Java\jre1.4.1\lib\plugin.jar
+</pre>
+
+<p>See the Sun JDK documentation for more information about <code>CLASSPATH</code>.</p>
+
+<p><strong>Note:</strong> Because Java is a strongly typed language and JavaScript is weakly typed, the JavaScript runtime engine converts argument values into the appropriate data types for the other language when you use LiveConnect. See <a href="#Data_Type_Conversions">Data Type Conversions</a> for complete information.</p>
+
+<h3 id="Using_the_LiveConnect_Classes">Using the LiveConnect Classes</h3>
+
+<p>All JavaScript objects appear within Java code as instances of <code>netscape.javascript.JSObject</code>. When you call a method in your Java code, you can pass it a JavaScript object as one of its argument. To do so, you must define the corresponding formal parameter of the method to be of type <code>JSObject</code>.</p>
+
+<p>Also, any time you use JavaScript objects in your Java code, you should put the call to the JavaScript object inside a <code>try...catch</code> statement which handles exceptions of type <code>netscape.javascript.JSException</code>. This allows your Java code to handle errors in JavaScript code execution which appear in Java as exceptions of type <code>JSException</code>.</p>
+
+<h4 id="Accessing_JavaScript_with_JSObject" name="Accessing_JavaScript_with_JSObject">Accessing JavaScript with JSObject</h4>
+
+<p>For example, suppose you are working with the Java class called <code>JavaDog</code>. As shown in the following code, the <code>JavaDog</code> constructor takes the JavaScript object <code>jsDog</code>, which is defined as type <code>JSObject</code>, as an argument:</p>
+
+<pre class="brush: java">import netscape.javascript.*;
+
+public class JavaDog{
+ public String dogBreed;
+ public String dogColor;
+ public String dogSex;
+
+ // define the class constructor
+ public JavaDog(JSObject jsDog){
+ // use try...catch to handle JSExceptions here
+ this.dogBreed = (String)jsDog.getMember("breed");
+ this.dogColor = (String)jsDog.getMember("color");
+ this.dogSex = (String)jsDog.getMember("sex");
+ }
+}
+</pre>
+
+<p>Notice that the <code>getMember</code> method of <code>JSObject</code> is used to access the properties of the JavaScript object. The previous example uses <code>getMember</code> to assign the value of the JavaScript property <code>jsDog.breed</code> to the Java data member <code>JavaDog.dogBreed</code>.</p>
+
+<p><strong>Note:</strong> A more realistic example would place the call to <code>getMember</code> inside a <code>try...catch</code> statement to handle errors of type <code>JSException</code>. See Handling JavaScript Exceptions in Java for more information.</p>
+
+<p>To get a better sense of how <code>getMember</code> works, look at the definition of the custom JavaScript object <code>Dog</code>:</p>
+
+<pre class="brush: js">function Dog(breed,color,sex){
+ this.breed = breed;
+ this.color = color;
+ this.sex = sex;
+}
+</pre>
+
+<p>You can create a JavaScript instance of <code>Dog</code> called <code>gabby</code> as follows:</p>
+
+<pre class="brush: js">var gabby = new Dog("lab", "chocolate", "female");
+</pre>
+
+<p>If you evaluate <code>gabby.color</code>, you can see that it has the value "chocolate". Now suppose you create an instance of <code>JavaDog</code> in your JavaScript code by passing the <code>gabby</code> object to the constructor as follows:</p>
+
+<pre class="brush: js">var javaDog = new Packages.JavaDog(gabby);
+</pre>
+
+<p>If you evaluate <code>javaDog.dogColor</code>, you can see that it also has the value "chocolate", because the <code>getMember</code> method in the Java constructor assigns <code>dogColor</code> the value of <code>gabby.color</code>.</p>
+
+<h4 id="Handling_JavaScript_Exceptions_in_Java" name="Handling_JavaScript_Exceptions_in_Java">Handling JavaScript Exceptions in Java</h4>
+
+<p>When JavaScript code called from Java fails at run time, it throws an exception. If you are calling the JavaScript code from Java, you can catch this exception in a <code>try...catch</code> statement. The JavaScript exception is available to your Java code as an instance of <code>netscape.javascript.JSException</code>.</p>
+
+<p><code>JSException</code> is a Java wrapper around any exception type thrown by JavaScript, similar to the way that instances of <code>JSObject</code> are wrappers for JavaScript objects. Use <code>JSException</code> when you are evaluating JavaScript code in Java.</p>
+
+<p>When you are evaluating JavaScript code in Java, the following situations can cause run-time errors:</p>
+
+<ul>
+ <li>The JavaScript code is not evaluated, either due to a JavaScript compilation error or to some other error that occurred at run time. The JavaScript interpreter generates an error message that is converted into an instance of <code>JSException</code>.</li>
+ <li>Java successfully evaluates the JavaScript code, but the JavaScript code executes an unhandled <code>throw</code> statement. JavaScript throws an exception that is wrapped as an instance of <code>JSException</code>. Use the <code>getWrappedException</code> method of <code>JSException</code> to unwrap this exception in Java.</li>
+</ul>
+
+<p>For example, suppose the Java object <code>eTest</code> evaluates the string <code>jsCode</code> that you pass to it. You can respond to either type of run-time error the evaluation causes by implementing an exception handler such as the following:</p>
+
+<pre class="brush: java">import netscape.javascript.JSObject;
+import netscape.javascript.JSException;
+
+public class eTest {
+ public static Object doit(JSObject obj, String jsCode) {
+ try {
+ obj.eval(jsCode);
+ } catch (JSException e) {
+ if (e.getWrappedException() == null)
+ return e;
+ return e.getWrappedException();
+ }
+ return null;
+ }
+}
+</pre>
+
+<p>In this example, the code in the <code>try</code> block attempts to evaluate the string <code>jsCode</code> that you pass to it. Let's say you pass the string "<code>myFunction()</code>" as the value of <code>jsCode</code>. If <code>myFunction</code> is not defined as a JavaScript function, the JavaScript interpreter cannot evaluate <code>jsCode</code>. The interpreter generates an error message, the Java handler catches the message, and the <code>doit</code> method returns an instance of <code>netscape.javascript.JSException</code>.</p>
+
+<p>However, suppose <code>myFunction</code> is defined in JavaScript as follows:</p>
+
+<pre class="brush: js">function myFunction() {
+ try {
+ if (theCondition == true) {
+ return "Everything's ok";
+ } else {
+ throw "JavaScript error occurred";
+ }
+ } catch (e) {
+ if (canHandle == true) {
+ handleIt();
+ } else {
+ throw e;
+ }
+ }
+}
+</pre>
+
+<p>If <code>theCondition</code> is false, the function throws an exception. The exception is caught in the JavaScript code, and if <code>canHandle</code> is true, JavaScript handles it. If <code>canHandle</code> is false, the exception is rethrown, the Java handler catches it, and the <code>doit</code> method returns a Java string:</p>
+
+<pre>JavaScript error occurred
+</pre>
+
+<p>See <a href="/en-US/docs/JavaScript/Guide/Statements#Exception_Handling_Statements" title="en-US/docs/JavaScript/Guide/Statements#Exception Handling Statements">Exception Handling Statements</a> for complete information about JavaScript exceptions.</p>
+
+<h4 id="Backward_Compatibility" name="Backward_Compatibility">Backward Compatibility</h4>
+
+<p>In JavaScript 1.3 and earlier versions, the <code>JSException</code> class had three public constructors which optionally took a string argument, specifying the detail message or other information for the exception. The <code>getWrappedException</code> method was not available.</p>
+
+<p>Use a <code>try...catch</code> statement such as the following to handle LiveConnect exceptions in JavaScript 1.3 and earlier versions:</p>
+
+<pre class="brush: js">try {
+ global.eval("foo.bar = 999;");
+} catch (Exception e) {
+ if (e instanceof JSException) {
+ jsCodeFailed();
+ } else {
+ otherCodeFailed();
+ }
+}
+</pre>
+
+<p>In this example, the <code>eval</code> statement fails if <code>foo</code> is not defined. The <code>catch</code> block executes the <code>jsCodeFailed</code> method if the <code>eval</code> statement in the <code>try</code> block throws a <code>JSException</code>; the <code>otherCodeFailed</code> method executes if the <code>try</code> block throws any other error.</p>
+
+<h2 id="Data_Type_Conversions">Data Type Conversions</h2>
+
+<p>Because Java is a strongly typed language and JavaScript is weakly typed, the JavaScript runtime engine converts argument values into the appropriate data types for the other language when you use LiveConnect. These conversions are described in the following sections:</p>
+
+<ul>
+ <li><a href="#JavaScript_to_Java_Conversions">JavaScript to Java Conversions</a></li>
+ <li><a href="#Java_to_JavaScript_Conversions">Java to JavaScript Conversions</a></li>
+</ul>
+
+<h3 id="JavaScript_to_Java_Conversions">JavaScript to Java Conversions</h3>
+
+<p>When you call a Java method and pass it parameters from JavaScript, the data types of the parameters you pass in are converted according to the rules described in the following sections:</p>
+
+<ul>
+ <li><a href="#Number_Values">Number Values</a></li>
+ <li><a href="#Boolean_Values">Boolean Values</a></li>
+ <li><a href="#String_Values">String Values</a></li>
+ <li><a href="#Undefined_Values">Undefined Values</a></li>
+ <li><a href="#Null_Values">Null Values</a></li>
+ <li><a href="#JavaArray_and_JavaObject_objects">JavaArray and JavaObject objects</a></li>
+ <li><a href="#JavaClass_objects">JavaClass objects</a></li>
+ <li><a href="#Other_JavaScript_objects">Other JavaScript objects</a></li>
+</ul>
+
+<p>The return values of methods of <code>netscape.javascript.JSObject</code> are always converted to instances of <code>java.lang.Object</code>. The rules for converting these return values are also described in these sections.</p>
+
+<p>For example, if <code>JSObject.eval</code> returns a JavaScript number, you can find the rules for converting this number to an instance of <code>java.lang.Object</code> in <a href="#Number_Values">Number Values</a>.</p>
+
+<h4 id="Number_Values" name="Number_Values">Number Values</h4>
+
+<p>When you pass JavaScript number types as parameters to Java methods, Java converts the values according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>double</td>
+ <td>
+ <ul>
+ <li>The exact value is transferred to Java without rounding and without a loss of magnitude or sign.</li>
+ <li><code>NaN</code> is converted to NaN.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>java.lang.Double<br>
+ java.lang.Object</td>
+ <td>A new instance of <code>java.lang.Double</code> is created, and the exact value is transferred to Java without rounding and without a loss of magnitude or sign.</td>
+ </tr>
+ <tr>
+ <td>float</td>
+ <td>
+ <ul>
+ <li>Values are rounded to float precision.</li>
+ <li>Values which are too large or small to be represented are rounded to +infinity or -infinity.</li>
+ <li><code>NaN</code> is converted to <code>NaN</code>.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>
+ <ul>
+ <li>Values are rounded using round-to-negative-infinity mode.</li>
+ <li>Values which are too large or small to be represented result in a run-time error.</li>
+ <li><code>NaN</code> can not be converted and results in a run-time error.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td><code>java.lang.String</code></td>
+ <td>Values are converted to strings. For example:
+ <ul>
+ <li>237 becomes "237"</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>
+ <ul>
+ <li>0 and <code>NaN</code> values are converted to false.</li>
+ <li>Other values are converted to true.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>When a JavaScript number is passed as a parameter to a Java method which expects an instance of <code>java.lang.String</code>, the number is converted to a string. Use the <code>equals()</code> method to compare the result of this conversion with other string values.</p>
+
+<h4 id="Boolean_Values" name="Boolean_Values">Boolean Values</h4>
+
+<p>When you pass JavaScript Boolean types as parameters to Java methods, Java converts the values according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>boolean</td>
+ <td>All values are converted directly to the Java equivalents.</td>
+ </tr>
+ <tr>
+ <td><code>java.lang.Boolean</code><br>
+ <code>java.lang.Object</code></td>
+ <td>A new instance of <code>java.lang.Boolean</code> is created. Each parameter creates a new instance, not one instance with the same primitive value.</td>
+ </tr>
+ <tr>
+ <td><code>java.lang.String</code></td>
+ <td>Values are converted to strings. For example:
+ <ul>
+ <li>true becomes "true"</li>
+ <li>false becomes "false"</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ double<br>
+ float<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>
+ <ul>
+ <li>true becomes 1</li>
+ <li>false becomes 0</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>When a JavaScript Boolean is passed as a parameter to a Java method which expects an instance of <code>java.lang.String</code>, the Boolean is converted to a string. Use the == operator to compare the result of this conversion with other string values.</p>
+
+<h4 id="String_Values" name="String_Values">String Values</h4>
+
+<p>When you pass JavaScript string types as parameters to Java methods, Java converts the values according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>java.lang.String</code><br>
+ <code>java.lang.Object</code></td>
+ <td>JavaScript 1.4:
+ <ul>
+ <li>A JavaScript string is converted to an instance of <code>java.lang.String</code> with a Unicode value.</li>
+ </ul>
+
+ <p>JavaScript 1.3 and earlier:</p>
+
+ <ul>
+ <li>A JavaScript string is converted to an instance of <code>java.lang.String</code> with an ASCII value.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>double<br>
+ float<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>All values are converted to numbers as described in ECMA-262. The JavaScript string value is converted to a number according to the rules described in ECMA-262.</td>
+ </tr>
+ <tr>
+ <td>char</td>
+ <td>JavaScript 1.4:
+ <ul>
+ <li>One-character strings are converted to Unicode characters.</li>
+ <li>All other values are converted to numbers.</li>
+ </ul>
+
+ <p>JavaScript 1.3 and earlier:</p>
+
+ <ul>
+ <li>All values are converted to numbers.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>
+ <ul>
+ <li>The empty string becomes false.</li>
+ <li>All other values become true.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Undefined_Values" name="Undefined_Values">Undefined Values</h4>
+
+<p>When you pass undefined JavaScript values as parameters to Java methods, Java converts the values according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>java.lang.String</code><br>
+ <code>java.lang.Object</code></td>
+ <td>The value is converted to an instance of java.lang.String whose value is the string "undefined".</td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>The value becomes false.</td>
+ </tr>
+ <tr>
+ <td>double<br>
+ float</td>
+ <td>The value becomes <code>NaN</code>.</td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>The value becomes 0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>The undefined value conversion is possible in JavaScript 1.3 and later versions only. Earlier versions of JavaScript do not support undefined values.</p>
+
+<p>When a JavaScript undefined value is passed as a parameter to a Java method which expects an instance of <code>java.lang.String</code>, the undefined value is converted to a string. Use the == operator to compare the result of this conversion with other string values.</p>
+
+<h4 id="Null_Values" name="Null_Values">Null Values</h4>
+
+<p>When you pass null JavaScript values as parameters to Java methods, Java converts the values according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Any class<br>
+ Any interface type</td>
+ <td>The value becomes null.</td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ double<br>
+ float<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>The value becomes 0.</td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>The value becomes false.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="JavaArray_and_JavaObject_objects" name="JavaArray_and_JavaObject_objects">JavaArray and JavaObject objects</h4>
+
+<p>In most situations, when you pass a JavaScript <code>JavaArray</code> or <code>JavaObject</code> as a parameter to a Java method, Java simply unwraps the object; in a few situations, the object is coerced into another data type according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Any interface or class that is assignment-compatible with the unwrapped object.</td>
+ <td>The object is unwrapped.</td>
+ </tr>
+ <tr>
+ <td><code>java.lang.String</code></td>
+ <td>The object is unwrapped, the <code>toString</code> method of the unwrapped Java object is called, and the result is returned as a new instance of <code>java.lang.String</code>.</td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ double<br>
+ float<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>The object is unwrapped, and either of the following situations occur:
+ <ul>
+ <li>If the unwrapped Java object has a <code>doubleValue</code> method, the <code>JavaArray</code> or <code>JavaObject</code> is converted to the value returned by this method.</li>
+ <li>If the unwrapped Java object does not have a <code>doubleValue</code> method, an error occurs.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>In JavaScript 1.3 and later versions, the object is unwrapped and either of the following situations occur:
+ <ul>
+ <li>If the object is null, it is converted to false.</li>
+ <li>If the object has any other value, it is converted to true.</li>
+ </ul>
+
+ <p>In JavaScript 1.2 and earlier versions, the object is unwrapped and either of the following situations occur:</p>
+
+ <ul>
+ <li>If the unwrapped object has a booleanValue method, the source object is converted to the return value.</li>
+ <li>If the object does not have a booleanValue method, the conversion fails.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>An interface or class is assignment-compatible with an unwrapped object if the unwrapped object is an instance of the Java parameter type. That is, the following statement must return true:</p>
+
+<pre class="brush: js">unwrappedObject instanceof parameterType;
+</pre>
+
+<h4 id="JavaClass_objects" name="JavaClass_objects">JavaClass objects</h4>
+
+<p>When you pass a JavaScript <code>JavaClass</code> object as a parameter to a Java method, Java converts the object according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>java.lang.Class</code></td>
+ <td>The object is unwrapped.</td>
+ </tr>
+ <tr>
+ <td><code>netscape.javascript.JSObject</code><br>
+ <code>java.lang.Object</code></td>
+ <td>The <code>JavaClass</code> object is wrapped in a new instance of <code>netscape.javascript.JSObject</code>.</td>
+ </tr>
+ <tr>
+ <td><code>java.lang.String</code></td>
+ <td>The object is unwrapped, the <code>toString</code> method of the unwrapped Java object is called, and the result is returned as a new instance of <code>java.lang.String</code>.</td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>In JavaScript 1.3 and later versions, the object is unwrapped and either of the following situations occur:
+ <ul>
+ <li>If the object is null, it is converted to false.</li>
+ <li>If the object has any other value, it is converted to true.</li>
+ </ul>
+
+ <p>In JavaScript 1.2 and earlier versions, the object is unwrapped and either of the following situations occur:</p>
+
+ <ul>
+ <li>If the unwrapped object has a booleanValue method, the source object is converted to the return value.</li>
+ <li>If the object does not have a booleanValue method, the conversion fails.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 id="Other_JavaScript_objects" name="Other_JavaScript_objects">Other JavaScript objects</h4>
+
+<p>When you pass any other JavaScript object as a parameter to a Java method, Java converts the object according to the rules described in the following table:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Java parameter type</th>
+ <th scope="col">Conversion rules</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>netscape.javascript.JSObject</code><br>
+ <code>java.lang.Object</code></td>
+ <td>The object is wrapped in a new instance of <code>netscape.javascript.JSObject</code>.</td>
+ </tr>
+ <tr>
+ <td><code>java.lang.String</code></td>
+ <td>The object is unwrapped, the <code>toString</code> method of the unwrapped object is called, and the result is returned as a new instance of <code>java.lang.String</code>.</td>
+ </tr>
+ <tr>
+ <td>byte
+ <p>char<br>
+ double<br>
+ float<br>
+ int<br>
+ long</p>
+ short</td>
+ <td>The object is converted to a value using the logic of the <code>ToPrimitive</code> operator described in ECMA-262. The <em>PreferredType</em> hint used with this operator is Number.</td>
+ </tr>
+ <tr>
+ <td>boolean</td>
+ <td>In JavaScript 1.3 and later versions, the object is unwrapped and either of the following situations occur:
+ <ul>
+ <li>If the object is null, it is converted to false.</li>
+ <li>If the object has any other value, it is converted to true.</li>
+ </ul>
+
+ <p>In JavaScript 1.2 and earlier versions, the object is unwrapped and either of the following situations occur:</p>
+
+ <ul>
+ <li>If the unwrapped object has a booleanValue method, the source object is converted to the return value.</li>
+ <li>If the object does not have a booleanValue method, the conversion fails.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Java_to_JavaScript_Conversions">Java to JavaScript Conversions</h3>
+
+<p>Values passed from Java to JavaScript are converted as follows:</p>
+
+<ul>
+ <li>Java byte, char, short, int, long, float, and double are converted to JavaScript numbers.</li>
+ <li>A Java boolean is converted to a JavaScript boolean.</li>
+ <li>An object of class <code>netscape.javascript.JSObject</code> is converted to the original JavaScript object.</li>
+ <li>Java arrays are converted to a JavaScript pseudo-Array object; this object behaves just like a JavaScript <code>Array</code> object: you can access it with the syntax <code>arrayName[index]</code> (where <code>index</code> is an integer), and determine its length with <code>arrayName.length</code>.</li>
+ <li>A Java object of any other class is converted to a JavaScript wrapper, which can be used to access methods and fields of the Java object:
+ <ul>
+ <li>Converting this wrapper to a string calls the <code>toString</code> method on the original object.</li>
+ <li>Converting to a number calls the <code>doubleValue</code> method, if possible, and fails otherwise.</li>
+ <li>Converting to a boolean in JavaScript 1.3 and later versions returns false if the object is null, and true otherwise.</li>
+ <li>Converting to a boolean in JavaScript 1.2 and earlier versions calls the <code>booleanValue</code> method, if possible, and fails otherwise.</li>
+ </ul>
+ </li>
+</ul>
+
+<p>Note that instances of java.lang.Double and java.lang.Integer are converted to JavaScript objects, not to JavaScript numbers. Similarly, instances of java.lang.String are also converted to JavaScript objects, not to JavaScript strings.</p>
+
+<p>Java <code>String</code> objects also correspond to JavaScript wrappers. If you call a JavaScript method that requires a JavaScript string and pass it this wrapper, you'll get an error. Instead, convert the wrapper to a JavaScript string by appending the empty string to it, as shown here:</p>
+
+<pre class="brush: js">var JavaString = JavaObj.methodThatReturnsAString();
+var JavaScriptString = JavaString + "";</pre>
diff --git a/files/ru/web/javascript/guide/meta_programming/index.html b/files/ru/web/javascript/guide/meta_programming/index.html
new file mode 100644
index 0000000000..7ab4762677
--- /dev/null
+++ b/files/ru/web/javascript/guide/meta_programming/index.html
@@ -0,0 +1,265 @@
+---
+title: Мета-программирование
+slug: Web/JavaScript/Guide/Meta_programming
+tags:
+ - Guide
+ - JavaScript
+ - Meta
+ - Meta programming
+ - Proxy
+ - Reflect
+ - Метапрограммирование
+translation_of: Web/JavaScript/Guide/Meta_programming
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{Previous("Web/JavaScript/Guide/Iterators_and_Generators")}}</div>
+
+<p class="summary">С приходом ECMAScript 2015, в JavaScript введены объекты {{jsxref("Proxy")}} и {{jsxref("Reflect")}}, позволяющие перехватить и переопределить поведение фундаментальных процессов языка (таких как поиск свойств, присвоение, итерирование, вызов функций и так далее). С помощью этих двух объектов Вы можете программировать на мета уровне JavaScript.</p>
+
+<h2 id="Объекты_Proxy">Объекты Proxy</h2>
+
+<p>Введенный в ECMAScript 6, объект {{jsxref("Proxy")}} позволяет перехватить и определить пользовательское поведение для определенных операций. Например, получение свойства объекта:</p>
+
+<pre class="brush: js">var handler = {
+ get: function(target, name) {
+ return name in target ? target[name] : 42;
+}};
+var p = new Proxy({}, handler);
+p.a = 1;
+console.log(p.a, p.b); // 1, 42
+</pre>
+
+<p>Объект <code>Proxy</code> определяет <em>target</em> (в данном случае новый пустой объект) и <em>handler</em> - объект в котором реализована особая <em>функция-ловушка</em> <code>get</code>. "Проксированный" таким образом объект, при доступе к его несуществующему свойству вернет не <code>undefined,</code> а числовое значение 42.</p>
+
+<p>Дополнительные примеры доступны в справочнике {{jsxref("Proxy")}}.</p>
+
+<h3 id="Терминология">Терминология</h3>
+
+<p>В разговоре о функциях объекта <code>Proxy</code> применимы следующие термины:</p>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/Proxy/handler","handler","","true")}} (обработчик)</dt>
+ <dd>Объект - обертка, содержащий в себе функции-ловушки.</dd>
+ <dt>ловушки (traps)</dt>
+ <dd>Методы, реализующие доступ к свойствам. В своей концепции они аналогичны методам перехвата(hooking) в операционных системах.</dd>
+ <dt>цель (target)</dt>
+ <dd>Объект, который оборачивается в Proxy. Часто используется лишь как внутреннее хранилище для Proxy объекта. Проверка на нарушение ограничений (invariants), связанных с нерасширяемостью объекта или неконфигурируемыми свойствами объекта производится для конкретной <strong>цели</strong>. </dd>
+ <dt>неизменяемые ограничения (дословно Invariants - те что остаются неизменными)</dt>
+ <dd>Некоторые особенности поведения объекта, которые должны быть сохранены при реализации пользовательского поведения названы invariants. Если в обработчике нарушены такие ограничения, будет выброшена ошибка {{jsxref("TypeError")}}.</dd>
+</dl>
+
+<h2 id="Обработчики_и_ловушки">Обработчики и ловушки</h2>
+
+<p>В следующей таблице перечислены ловушки, доступные для использования в объекте <code>Proxy</code>. Смотрите подробные объяснения и примеры в <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">документации</a>.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th>Обработчик / ловушка</th>
+ <th>Перехватываемые методы</th>
+ <th>Неизменяемые ограничения</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}</td>
+ <td>{{jsxref("Object.getPrototypeOf()")}}<br>
+ {{jsxref("Reflect.getPrototypeOf()")}}<br>
+ {{jsxref("Object/proto", "__proto__")}}<br>
+ {{jsxref("Object.prototype.isPrototypeOf()")}}<br>
+ {{jsxref("Operators/instanceof", "instanceof")}}</td>
+ <td>
+ <ul>
+ <li><code>метод getPrototypeOf</code> должен вернуть object или <code>null</code>.</li>
+ <li>если целевой объект <code>target</code> нерасширяем, метод <code>Object.getPrototypeOf(proxy)</code> должен возвращать тот же результат что и <code>Object.getPrototypeOf(target)</code>.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}</td>
+ <td>{{jsxref("Object.setPrototypeOf()")}}<br>
+ {{jsxref("Reflect.setPrototypeOf()")}}</td>
+ <td>если целевой объект <code>target</code> нерасширяем, значение параметра <code>prototype</code> должно быть равным значению возвращаемому методом <code>Object.getPrototypeOf(target)</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}</td>
+ <td>{{jsxref("Object.isExtensible()")}}<br>
+ {{jsxref("Reflect.isExtensible()")}}</td>
+ <td><code>Object.isExtensible(proxy)</code> должно возвращать тоже значение, что и <code>Object.isExtensible(target)</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}</td>
+ <td>{{jsxref("Object.preventExtensions()")}}<br>
+ {{jsxref("Reflect.preventExtensions()")}}</td>
+ <td><code>Object.preventExtensions(proxy)</code> возвращает  <code>true</code> только в том случае, если <code>Object.isExtensible(proxy)</code> равно <code>false</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}</td>
+ <td>{{jsxref("Object.getOwnPropertyDescriptor()")}}<br>
+ {{jsxref("Reflect.getOwnPropertyDescriptor()")}}</td>
+ <td>
+ <ul>
+ <li><code>метод getOwnPropertyDescriptor</code> должен возвращать object или <code>undefined</code>.</li>
+ <li>Свойство не может быть описано как несуществующее, если оно существует и является некофигурируемым, собственным свойством целевого объекта <code>target</code>.</li>
+ <li>Свойство не может быть описано как несуществующее, если оно существует как собственное свойство целевого объекта <code>target</code> и <code>target</code> не расширяем.</li>
+ <li>Свойство не может быть описано как существующее, если оно не существует как собственное свойство  целевого объекта <code>target</code> и <code>target</code> не расширяем.</li>
+ <li>Свойство не может быть описано как неизменяемое, если оно не существует как собственное свойство целевого объекта <code>target</code> или если оно существует и является изменяемым, собственным свойством целевого объекта <code>target</code>.</li>
+ <li>Значение возвращенное методом <code>Object.getOwnPropertyDescriptor(target)</code> может быть применено к целевому объекту через метод <code>Object.defineProperty и э</code>то не вызовет ошибки.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}</td>
+ <td>{{jsxref("Object.defineProperty()")}}<br>
+ {{jsxref("Reflect.defineProperty()")}}</td>
+ <td>
+ <ul>
+ <li>Новое свойство не может быть добавлено, если целевой объект не расширяем.</li>
+ <li>Нельзя добавить новое конфигурируемое свойство, или преобразовать существующее свойство в конфигурируемое, если оно не существует как собственное свойство целевого объекта или не является конфигурируемым.</li>
+ <li>Свойство не может быть неконфигурируемым, если целевой объект имеет соответствующее собственное, конфигурируемое свойство.</li>
+ <li>Если объект имеет свойство соответствующее создаваемому свойству, то <code>Object.defineProperty(target, prop, descriptor)</code> не вызовет ошибки.</li>
+ <li>В строгом режиме ("use strict";), если обработчик <code>defineProperty</code> вернет <code>false</code>, это вызовет ошибку {{jsxref("TypeError")}}.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}</td>
+ <td>Property query: <code>foo in proxy</code><br>
+ Inherited property query: <code>foo in Object.create(proxy)</code><br>
+ {{jsxref("Reflect.has()")}}</td>
+ <td>
+ <ul>
+ <li>Свойство не может быть описано как несуществующее, если оно существует как собственное неконфигурируемое свойство целевого объекта.</li>
+ <li>Свойство не может быть описано как несуществующее, если оно существует как собственное свойство целевого объекта, и целевой объект является нерасширяемым.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}</td>
+ <td>Property access: <code>proxy[foo]</code>and <code>proxy.bar</code><br>
+ Inherited property access: <code>Object.create(proxy)[foo]</code><br>
+ {{jsxref("Reflect.get()")}}</td>
+ <td>
+ <ul>
+ <li>Значение, возвращаемое для свойства, должно равняться значению соответствующего свойства целевого объекта, если это свойство является доступным только для чтения, неконфигурируемым.</li>
+ <li>Значение, возвращаемое для свойства, должно равняться <code>undefined,</code> если соответствующее свойство целевого объекта является неконфигурируемым и обернуто в геттер и сеттер, где сеттер равен <code>undefined</code>.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}</td>
+ <td>Property assignment: <code>proxy[foo] = bar</code> and <code>proxy.foo = bar</code><br>
+ Inherited property assignment: <code>Object.create(proxy)[foo] = bar</code><br>
+ {{jsxref("Reflect.set()")}}</td>
+ <td>
+ <ul>
+ <li>Нельзя изменить значение свойства на значение, отличное от значения соответствующего свойства целевого объекта, если это свойство целевого объекта доступно только для чтения, и является неконфигурируемым.</li>
+ <li>Нельзя установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым, и обернуто в геттер и сеттер, где сеттер равен <code>undefined</code>.</li>
+ <li>В строгом режиме, возвращение <code>false</code> из обработчика <code>set</code> вызовет ошибку {{jsxref("TypeError")}}.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}</td>
+ <td>Property deletion: <code>delete proxy[foo]</code> and <code>delete proxy.foo</code><br>
+ {{jsxref("Reflect.deleteProperty()")}}</td>
+ <td>Свойство не может быть удалено, если оно существует в целевом объекте как собственное, неконфигурируемое свойство.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/enumerate", "handler.enumerate()")}}</td>
+ <td>Property enumeration / for...in: <code>for (var name in proxy) {...}</code><br>
+ {{jsxref("Reflect.enumerate()")}}</td>
+ <td><code><font face="Open Sans, Arial, sans-serif">Метод </font>enumerate</code> должен возвращать объект.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}</td>
+ <td>{{jsxref("Object.getOwnPropertyNames()")}}<br>
+ {{jsxref("Object.getOwnPropertySymbols()")}}<br>
+ {{jsxref("Object.keys()")}}<br>
+ {{jsxref("Reflect.ownKeys()")}}</td>
+ <td>
+ <ul>
+ <li>Метод <code>ownKeys</code> должен возвращать список.</li>
+ <li>Типом каждого элемента в возвращаемом списке должен быть {{jsxref("String")}} или {{jsxref("Symbol")}}.</li>
+ <li>Возвращаемый список должен содержать ключи для всех неконфигурируемых, собственных свойств целевого объекта.</li>
+ <li>Если целевой объект является нерасширяемым, возвращаемый список должен содержать все ключи для собственных полей целевого объекта и больше никаких других значений.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}</td>
+ <td><code>proxy(..args)</code><br>
+ {{jsxref("Function.prototype.apply()")}} and {{jsxref("Function.prototype.call()")}}<br>
+ {{jsxref("Reflect.apply()")}}</td>
+ <td>Ограничений нет.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}</td>
+ <td><code>new proxy(...args)</code><br>
+ {{jsxref("Reflect.construct()")}}</td>
+ <td>Обработчик должен возвращать <code>Object</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Отзываемый_Proxy">Отзываемый <code>Proxy</code></h2>
+
+<p>Метод {{jsxref("Proxy.revocable()")}} создает отзываемый объект <code>Proxy</code>. Такой прокси объект может быть отозван функцией <code>revoke</code>, которая отключает все ловушки-обработчики. После этого любые операции над прокси объектом вызовут ошибку {{jsxref("TypeError")}}.</p>
+
+<pre class="brush: js">var revocable = Proxy.revocable({}, {
+ get: function(target, name) {
+ return '[[' + name + ']]';
+ }
+});
+var proxy = revocable.proxy;
+console.log(proxy.foo); // "[[foo]]"
+
+revocable.revoke();
+
+console.log(proxy.foo); // ошибка TypeError
+proxy.foo = 1; // снова ошибка TypeError
+delete proxy.foo; // опять TypeError
+typeof proxy; // "object", для метода typeof нет ловушек</pre>
+
+<h2 id="Рефлексия">Рефлексия</h2>
+
+<p>{{jsxref("Reflect")}} это встроенный объект, предоставляющий методы для перехватываемых операций JavaScript. Это те же самые методы, что имеются в {{jsxref("Global_Objects/Proxy/handler","обработчиках Proxy","","true")}}. Объект <code>Reflect</code> не является функцией.</p>
+
+<p><code>Reflect</code> помогает при пересылке стандартных операций из обработчика к целевому объекту.</p>
+
+<p>Например, метод {{jsxref("Reflect.has()")}} это тот же <a href="/ru/docs/Web/JavaScript/Reference/Operators/in"><code>оператор in</code></a> но в виде функции:</p>
+
+<pre class="brush: js">Reflect.has(Object, 'assign'); // true
+</pre>
+
+<h3 id="Улучшенная_функция_apply">Улучшенная функция <code>apply</code></h3>
+
+<p>В ES5 обычно используется метод {{jsxref("Function.prototype.apply()")}} для вызова функции в определенном контексте (с определенным <code>this)</code> и с параметрами, заданными в виде массива (или <a href="/ru/docs/Web/JavaScript/Guide/Indexed_collections#Working_with_array-like_objects">массиво-подобного объекта</a>).</p>
+
+<pre class="brush: js">Function.prototype.apply.call(Math.floor, undefined, [1.75]);</pre>
+
+<p>С методом {{jsxref("Reflect.apply")}} эта операция менее громоздка и более понятна:</p>
+
+<pre class="brush: js">Reflect.apply(Math.floor, undefined, [1.75]);
+// 1;
+
+Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
+// "hello"
+
+Reflect.apply(RegExp.prototype.exec, /ab/, ['confabulation']).index;
+// 4
+
+Reflect.apply(''.charAt, 'ponies', [3]);
+// "i"
+</pre>
+
+<h3 id="Проверка_успешности_определения_нового_свойства">Проверка успешности определения нового свойства</h3>
+
+<p>Метод {{jsxref("Object.defineProperty")}}, в случае успеха операции, возвращает объект, а при неудаче вызывает ошибку {{jsxref("TypeError")}}. Из-за этого определение свойств требует обработки блоком {{jsxref("Statements/try...catch","try...catch")}} для перехвата возможных ошибок. Метод {{jsxref("Reflect.defineProperty")}}, в свою очередь, возвращает успешность операции в виде булева значения, благодаря чему возможно использование простого {{jsxref("Statements/if...else","if...else")}} условия:</p>
+
+<pre class="brush: js">if (Reflect.defineProperty(target, property, attributes)) {
+ // успех
+} else {
+ // что-то пошло не так
+}</pre>
+
+<p>{{Previous("Web/JavaScript/Guide/Iterators_and_Generators")}}</p>
diff --git a/files/ru/web/javascript/guide/modules/index.html b/files/ru/web/javascript/guide/modules/index.html
new file mode 100644
index 0000000000..0664a4d93f
--- /dev/null
+++ b/files/ru/web/javascript/guide/modules/index.html
@@ -0,0 +1,451 @@
+---
+title: Модули JavaScript
+slug: Web/JavaScript/Guide/Modules
+translation_of: Web/JavaScript/Guide/Modules
+---
+<div>{{JSSidebar("JavaScript Guide")}}{{Previous("Web/JavaScript/Guide/Meta_programming")}}</div>
+
+<div>Это руководство содержит всю необходимую информацию для начала работы с модулями JavaScript.</div>
+
+<h2 id="Модули_история_вопроса">Модули: история вопроса</h2>
+
+<p>Сначала программы на JavaSctipt были небольшими — в прежние времена они использовались для изолированных задач, добавляя при необходимости немного интерактивности веб-страница, так что большие скрипты в основном не требовались. Прошло несколько лет, и вот уже мы видим полномасштабные приложения, работающие в броузерах и содержащие массу кода на JavaScript; кроме того, язык стал использоваться и в других контекстах (например, <a href="/en-US/docs/Glossary/Node.js">Node.js</a>).</p>
+
+<p>Таким образом, в последние годы появились причины на то, чтобы подумать о механизмах деления программ на JavaScript на отдельные модули, которые можно импортировать по мере нужды. Node.js включала такую возможность уже давно, кроме того, некоторые библиотеки и фреймворки JavaSctipt разрешали использование модулей (например, <a href="https://en.wikipedia.org/wiki/CommonJS">CommonJS</a> и основанные на <a href="https://github.com/amdjs/amdjs-api/blob/master/AMD.md">AMD</a> системы модулей типа <a href="https://requirejs.org/">RequireJS</a>, а позднее также <a href="https://webpack.github.io/">Webpack</a> и <a href="https://babeljs.io/">Babel</a>).</p>
+
+<p>К счастью, современные броузера стали сами поддерживать функциональность модулей, о чем и рассказывает эта статья. Этому можно только порадоваться — броузеры могут оптимизировать загрузку модулей, что было бы гораздо эффективнее использования библиотеки, и взять на себя обработку на стороне клиента и прочие накладные расходы.</p>
+
+<h2 id="Поддержка_в_броузерах">Поддержка в броузерах</h2>
+
+<p>Встроенная обработка модулей JavaScript свяазана с функциями {{JSxRef("Statements/import", "import")}} и {{JSxRef("Statements/export", "export")}}, которые поддерживаются броузерами следующим образом:</p>
+
+<h3 id="import">import</h3>
+
+<p>{{Compat("javascript.statements.import")}}</p>
+
+<h3 id="export">export</h3>
+
+<p>{{Compat("javascript.statements.export")}}</p>
+
+<h2 id="Introducing_an_example">Introducing an example</h2>
+
+<p>To demonstrate usage of modules, we've created a <a href="https://github.com/mdn/js-examples/tree/master/modules">simple set of examples</a> that you can find on GitHub. These examples demonstrate a simple set of modules that create a <a href="/en-US/docs/Web/HTML/Element/canvas" title="Use the HTML &lt;canvas> element with either the canvas scripting API or the WebGL API to draw graphics and animations."><code>&lt;canvas&gt;</code></a> element on a webpage, and then draw (and report information about) different shapes on the canvas.</p>
+
+<p>These are fairly trivial, but have been kept deliberately simple to demonstrate modules clearly.</p>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: If you want to download the examples and run them locally, you'll need to run them through a local web server.</p>
+</div>
+
+<h2 id="Basic_example_structure">Basic example structure</h2>
+
+<p>In our first example (see <a href="https://github.com/mdn/js-examples/tree/master/modules/basic-modules">basic-modules</a>) we have a file structure as follows:</p>
+
+<pre class="notranslate">index.html
+main.js
+modules/
+ canvas.js
+ square.js</pre>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: All of the examples in this guide have basically the same structure; the above should start getting pretty familiar.</p>
+</div>
+
+<p>The modules directory's two modules are described below:</p>
+
+<ul>
+ <li><code>canvas.js</code> — contains functions related to setting up the canvas:
+
+ <ul>
+ <li><code>create()</code> — creates a canvas with a specified <code>width</code> and <code>height</code> inside a wrapper <a href="/en-US/docs/Web/HTML/Element/div" title="The HTML Content Division element (&lt;div>) is the generic container for flow content. It has no effect on the content or layout until styled using CSS."><code>&lt;div&gt;</code></a> with a specified ID, which is itself appended inside a specified parent element. Returns an object containing the canvas's 2D context and the wrapper's ID.</li>
+ <li><code>createReportList()</code> — creates an unordered list appended inside a specified wrapper element, which can be used to output report data into. Returns the list's ID.</li>
+ </ul>
+ </li>
+ <li><code>square.js</code> — contains:
+ <ul>
+ <li><code>name</code> — a constant containing the string 'square'.</li>
+ <li><code>draw()</code> — draws a square on a specified canvas, with a specified size, position, and color. Returns an object containing the square's size, position, and color.</li>
+ <li><code>reportArea()</code> — writes a square's area to a specific report list, given its length.</li>
+ <li><code>reportPerimeter()</code> — writes a square's perimeter to a specific report list, given its length.</li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="Aside_—_.mjs_versus_.js">Aside — <code>.mjs</code> versus <code>.js</code></h2>
+
+<p>Throughout this article, we've used <code>.js</code> extensions for our module files, but in other resources you may see the <code>.mjs</code> extension used instead. <a href="https://v8.dev/features/modules#mjs">V8's documentation recommends this</a>, for example. The reasons given are:</p>
+
+<ul>
+ <li>It is good for clarity, i.e. it makes it clear which files are modules, and which are regular JavaScript.</li>
+ <li>It ensures that your module files are parsed as a module by runtimes such as <a href="https://nodejs.org/api/esm.html#esm_enabling">Node.js</a>, and build tools such as <a href="https://babeljs.io/docs/en/options#sourcetype">Babel</a>.</li>
+</ul>
+
+<p>However, we decided to keep to using <code>.js</code>, at least for the moment. To get modules to work correctly in a browser, you need to make sure that your server is serving them with a <code>Content-Type</code> header that contains a JavaScript MIME type such as <code>text/javascript</code>. If you don't, you'll get a strict MIME type checking error along the lines of "The server responded with a non-JavaScript MIME type" and the browser won't run your JavaScript. Most servers already set the correct type for <code>.js</code> files, but not yet for <code>.mjs</code> files. Servers that already serve <code>.mjs</code> files correctly include <a href="https://pages.github.com/">GitHub Pages</a> and <code><a href="https://github.com/http-party/http-server#readme">http-server</a></code> for Node.js.</p>
+
+<p>This is OK if you are using such an environment already, or if you aren't but you know what you are doing and have access (i.e. you can configure your server to set the correct <code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type">Content-Type</a></code> for <code>.mjs</code> files). It could however cause confusion if you don't control the server you are serving files from, or are publishing files for public use, as we are here.</p>
+
+<p>For learning and portability purposes, we decided to keep to <code>.js</code>.</p>
+
+<p>If you really value the clarity of using <code>.mjs</code> for modules versus using <code>.js</code> for "normal" JavaScript files, but don't want to run into the problem described above, you could always use <code>.mjs</code> during development and convert them to <code>.js</code> during your build step.</p>
+
+<p>It is also worth noting that:</p>
+
+<ul>
+ <li>Some tools may never support <code>.mjs</code>, such as <a href="https://www.typescriptlang.org/">TypeScript</a>.</li>
+ <li>The <code>&lt;script type="module"&gt;</code> attribute is used to denote when a module is being pointed to, as you'll see below.</li>
+</ul>
+
+<h2 id="Exporting_module_features">Exporting module features</h2>
+
+<p>The first thing you do to get access to module features is export them. This is done using the {{JSxRef("Statements/export", "export")}} statement.</p>
+
+<p>The easiest way to use it is to place it in front of any items you want exported out of the module, for example:</p>
+
+<pre class="brush: js; notranslate">export const name = 'square';
+
+export function draw(ctx, length, x, y, color) {
+ ctx.fillStyle = color;
+ ctx.fillRect(x, y, length, length);
+
+ return {
+ length: length,
+ x: x,
+ y: y,
+ color: color
+ };
+}</pre>
+
+<p>You can export functions, <code>var</code>, <code>let</code>, <code>const</code>, and — as we'll see later — classes. They need to be top-level items; you can't use <code>export</code> inside a function, for example.</p>
+
+<p>A more convenient way of exporting all the items you want to export is to use a single export statement at the end of your module file, followed by a comma-separated list of the features you want to export wrapped in curly braces. For example:</p>
+
+<pre class="brush: js; notranslate">export { name, draw, reportArea, reportPerimeter };</pre>
+
+<h2 id="Importing_features_into_your_script">Importing features into your script</h2>
+
+<p>Once you've exported some features out of your module, you need to import them into your script to be able to use them. The simplest way to do this is as follows:</p>
+
+<pre class="brush: js; notranslate">import { name, draw, reportArea, reportPerimeter } from './modules/square.js';</pre>
+
+<p>You use the {{JSxRef("Statements/import", "import")}} statement, followed by a comma-separated list of the features you want to import wrapped in curly braces, followed by the keyword from, followed by the path to the module file — a path relative to the site root, which for our <code>basic-modules</code> example would be <code>/js-examples/modules/basic-modules</code>.</p>
+
+<p>However, we've written the path a bit differently — we are using the dot (<code>.</code>) syntax to mean "the current location", followed by the path beyond that to the file we are trying to find. This is much better than writing out the entire relative path each time, as it is shorter, and it makes the URL portable — the example will still work if you move it to a different location in the site hierarchy.</p>
+
+<p>So for example:</p>
+
+<pre class="notranslate">/js-examples/modules/basic-modules/modules/square.js</pre>
+
+<p>becomes</p>
+
+<pre class="notranslate">./modules/square.js</pre>
+
+<p>You can see such lines in action in <code><a href="https://github.com/mdn/js-examples/blob/master/modules/basic-modules/main.js">main.js</a></code>.</p>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: In some module systems, you can omit the file extension and the leading <code>/</code>, <code>./</code>, or <code>../</code> (e.g. <code>'modules/square'</code>). This doesn't work in native JavaScript modules.</p>
+</div>
+
+<p>Once you've imported the features into your script, you can use them just like they were defined inside the same file. The following is found in <code>main.js</code>, below the import lines:</p>
+
+<pre class="brush: js; notranslate">let myCanvas = create('myCanvas', document.body, 480, 320);
+let reportList = createReportList(myCanvas.id);
+
+let square1 = draw(myCanvas.ctx, 50, 50, 100, 'blue');
+reportArea(square1.length, reportList);
+reportPerimeter(square1.length, reportList);
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Note: </strong>Although imported features are available in the file, they are read only views of the feature that was exported. You cannot change the variable that was imported, but you can still modify properties similar to <code>const</code>. Additionally, these features are imported as live bindings, meaning that they can change in value even if you cannot modify the binding unlike <code>const</code>.</p>
+</div>
+
+<h2 id="Applying_the_module_to_your_HTML">Applying the module to your HTML</h2>
+
+<p>Now we just need to apply the <code>main.js</code> module to our HTML page. This is very similar to how we apply a regular script to a page, with a few notable differences.</p>
+
+<p>First of all, you need to include <code>type="module"</code> in the <a href="/en-US/docs/Web/HTML/Element/script" title="The HTML &lt;script> element is used to embed or reference executable code; this is typically used to embed or refer to JavaScript code."><code>&lt;script&gt;</code></a> element, to declare this script as a module. To import the <code>main.js</code> script, we use this:</p>
+
+<pre class="brush: html; no-line-numbers notranslate">&lt;script type="module" src="main.js"&gt;&lt;/script&gt;</pre>
+
+<p>You can also embed the module's script directly into the HTML file by placing the JavaScript code within the body of the <code>&lt;script&gt;</code> element:</p>
+
+<pre class="brush: js notranslate">&lt;script type="module"&gt;
+  /* JavaScript module code here */
+&lt;/script&gt;</pre>
+
+<p>The script into which you import the module features basically acts as the top-level module. If you omit it, Firefox for example gives you an error of "SyntaxError: import declarations may only appear at top level of a module".</p>
+
+<p>You can only use <code>import</code> and <code>export</code> statements inside modules, not regular scripts.</p>
+
+<h2 id="Other_differences_between_modules_and_standard_scripts">Other differences between modules and standard scripts</h2>
+
+<ul>
+ <li>You need to pay attention to local testing — if you try to load the HTML file locally (i.e. with a <code>file://</code> URL), you'll run into CORS errors due to JavaScript module security requirements. You need to do your testing through a server.</li>
+ <li>Also, note that you might get different behavior from sections of script defined inside modules as opposed to in standard scripts. This is because modules use {{JSxRef("Strict_mode", "strict mode", "", 1)}} automatically.</li>
+ <li>There is no need to use the <code>defer</code> attribute (see <a href="/en-US/docs/Web/HTML/Element/script#Attributes" title="The HTML &lt;script> element is used to embed or reference executable code; this is typically used to embed or refer to JavaScript code."><code>&lt;script&gt;</code> attributes</a>) when loading a module script; modules are deferred automatically.</li>
+ <li>Modules are only executed once, even if they have been referenced in multiple <code>&lt;script&gt;</code> tags.</li>
+ <li>Last but not least, let's make this clear — module features are imported into the scope of a single script — they aren't available in the global scope. Therefore, you will only be able to access imported features in the script they are imported into, and you won't be able to access them from the JavaScript console, for example. You'll still get syntax errors shown in the DevTools, but you'll not be able to use some of the debugging techniques you might have expected to use.</li>
+</ul>
+
+<h2 id="Default_exports_versus_named_exports">Default exports versus named exports</h2>
+
+<p>The functionality we've exported so far has been comprised of <strong>named exports</strong> — each item (be it a function, <code>const</code>, etc.) has been referred to by its name upon export, and that name has been used to refer to it on import as well.</p>
+
+<p>There is also a type of export called the <strong>default export</strong> — this is designed to make it easy to have a default function provided by a module, and also helps JavaScript modules to interoperate with existing CommonJS and AMD module systems (as explained nicely in <a href="https://hacks.mozilla.org/2015/08/es6-in-depth-modules/">ES6 In Depth: Modules</a> by Jason Orendorff; search for "Default exports").</p>
+
+<p>Let's look at an example as we explain how it works. In our basic-modules <code>square.js</code> you can find a function called <code>randomSquare()</code> that creates a square with a random color, size, and position. We want to export this as our default, so at the bottom of the file we write this:</p>
+
+<pre class="brush: js; notranslate">export default randomSquare;</pre>
+
+<p>Note the lack of curly braces.</p>
+
+<p>We could instead prepend <code>export default</code> onto the function and define it as an anonymous function, like this:</p>
+
+<pre class="brush: js; notranslate">export default function(ctx) {
+ ...
+}</pre>
+
+<p>Over in our <code>main.js</code> file, we import the default function using this line:</p>
+
+<pre class="brush: js; notranslate">import randomSquare from './modules/square.js';</pre>
+
+<p>Again, note the lack of curly braces. This is because there is only one default export allowed per module, and we know that <code>randomSquare</code> is it. The above line is basically shorthand for:</p>
+
+<pre class="brush: js; notranslate">import {default as randomSquare} from './modules/square.js';</pre>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: The as syntax for renaming exported items is explained below in the <a href="#Renaming_imports_and_exports">Renaming imports and exports</a> section.</p>
+</div>
+
+<h2 id="Avoiding_naming_conflicts">Avoiding naming conflicts</h2>
+
+<p>So far, our canvas shape drawing modules seem to be working OK. But what happens if we try to add a module that deals with drawing another shape, like a circle or triangle? These shapes would probably have associated functions like <code>draw()</code>, <code>reportArea()</code>, etc. too; if we tried to import different functions of the same name into the same top-level module file, we'd end up with conflicts and errors.</p>
+
+<p>Fortunately there are a number of ways to get around this. We'll look at these in the following sections.</p>
+
+<h2 id="Renaming_imports_and_exports">Renaming imports and exports</h2>
+
+<p>Inside your <code>import</code> and <code>export</code> statement's curly braces, you can use the keyword <code>as</code> along with a new feature name, to change the identifying name you will use for a feature inside the top-level module.</p>
+
+<p>So for example, both of the following would do the same job, albeit in a slightly different way:</p>
+
+<pre class="brush: js; notranslate">// inside module.js
+export {
+ function1 as newFunctionName,
+ function2 as anotherNewFunctionName
+};
+
+// inside main.js
+import { newFunctionName, anotherNewFunctionName } from './modules/module.js';</pre>
+
+<pre class="brush: js; notranslate">// inside module.js
+export { function1, function2 };
+
+// inside main.js
+import { function1 as newFunctionName,
+ function2 as anotherNewFunctionName } from './modules/module.js';</pre>
+
+<p>Let's look at a real example. In our <a href="https://github.com/mdn/js-examples/tree/master/modules/renaming">renaming</a> directory you'll see the same module system as in the previous example, except that we've added <code>circle.js</code> and <code>triangle.js</code> modules to draw and report on circles and triangles.</p>
+
+<p>Inside each of these modules, we've got features with the same names being exported, and therefore each has the same <code>export</code> statement at the bottom:</p>
+
+<pre class="brush: js; notranslate">export { name, draw, reportArea, reportPerimeter };</pre>
+
+<p>When importing these into <code>main.js</code>, if we tried to use</p>
+
+<pre class="brush: js; notranslate">import { name, draw, reportArea, reportPerimeter } from './modules/square.js';
+import { name, draw, reportArea, reportPerimeter } from './modules/circle.js';
+import { name, draw, reportArea, reportPerimeter } from './modules/triangle.js';</pre>
+
+<p>The browser would throw an error such as "SyntaxError: redeclaration of import name" (Firefox).</p>
+
+<p>Instead we need to rename the imports so that they are unique:</p>
+
+<pre class="brush: js; notranslate">import { name as squareName,
+ draw as drawSquare,
+ reportArea as reportSquareArea,
+ reportPerimeter as reportSquarePerimeter } from './modules/square.js';
+
+import { name as circleName,
+ draw as drawCircle,
+ reportArea as reportCircleArea,
+ reportPerimeter as reportCirclePerimeter } from './modules/circle.js';
+
+import { name as triangleName,
+ draw as drawTriangle,
+ reportArea as reportTriangleArea,
+ reportPerimeter as reportTrianglePerimeter } from './modules/triangle.js';</pre>
+
+<p>Note that you could solve the problem in the module files instead, e.g.</p>
+
+<pre class="brush: js; notranslate">// in square.js
+export { name as squareName,
+ draw as drawSquare,
+ reportArea as reportSquareArea,
+ reportPerimeter as reportSquarePerimeter };</pre>
+
+<pre class="brush: js; notranslate">// in main.js
+import { squareName, drawSquare, reportSquareArea, reportSquarePerimeter } from './modules/square.js';</pre>
+
+<p>And it would work just the same. What style you use is up to you, however it arguably makes more sense to leave your module code alone, and make the changes in the imports. This especially makes sense when you are importing from third party modules that you don't have any control over.</p>
+
+<h2 id="Creating_a_module_object">Creating a module object</h2>
+
+<p>The above method works OK, but it's a little messy and longwinded. An even better solution is to import each module's features inside a module object. The following syntax form does that:</p>
+
+<pre class="brush: js; notranslate">import * as Module from './modules/module.js';</pre>
+
+<p>This grabs all the exports available inside <code>module.js</code>, and makes them available as members of an object <code>Module</code>, effectively giving it its own namespace. So for example:</p>
+
+<pre class="brush: js; notranslate">Module.function1()
+Module.function2()
+etc.</pre>
+
+<p>Again, let's look at a real example. If you go to our <a href="https://github.com/mdn/js-examples/tree/master/modules/module-objects">module-objects</a> directory, you'll see the same example again, but rewritten to take advantage of this new syntax. In the modules, the exports are all in the following simple form:</p>
+
+<pre class="brush: js; notranslate">export { name, draw, reportArea, reportPerimeter };</pre>
+
+<p>The imports on the other hand look like this:</p>
+
+<pre class="brush: js; notranslate">import * as Canvas from './modules/canvas.js';
+
+import * as Square from './modules/square.js';
+import * as Circle from './modules/circle.js';
+import * as Triangle from './modules/triangle.js';</pre>
+
+<p>In each case, you can now access the module's imports underneath the specified object name, for example:</p>
+
+<pre class="brush: js; notranslate">let square1 = Square.draw(myCanvas.ctx, 50, 50, 100, 'blue');
+Square.reportArea(square1.length, reportList);
+Square.reportPerimeter(square1.length, reportList);</pre>
+
+<p>So you can now write the code just the same as before (as long as you include the object names where needed), and the imports are much neater.</p>
+
+<h2 id="Modules_and_classes">Modules and classes</h2>
+
+<p>As we hinted at earlier, you can also export and import classes; this is another option for avoiding conflicts in your code, and is especially useful if you've already got your module code written in an object-oriented style.</p>
+
+<p>You can see an example of our shape drawing module rewritten with ES classes in our <a href="https://github.com/mdn/js-examples/tree/master/modules/classes">classes</a> directory. As an example, the <code><a href="https://github.com/mdn/js-examples/blob/master/modules/classes/modules/square.js">square.js</a></code> file now contains all its functionality in a single class:</p>
+
+<pre class="brush: js; notranslate">class Square {
+ constructor(ctx, listId, length, x, y, color) {
+ ...
+ }
+
+ draw() {
+ ...
+ }
+
+ ...
+}</pre>
+
+<p>which we then export:</p>
+
+<pre class="brush: js; notranslate">export { Square };</pre>
+
+<p>Over in <code><a href="https://github.com/mdn/js-examples/blob/master/modules/classes/main.js">main.js</a></code>, we import it like this:</p>
+
+<pre class="brush: js; notranslate">import { Square } from './modules/square.js';</pre>
+
+<p>And then use the class to draw our square:</p>
+
+<pre class="brush: js; notranslate">let square1 = new Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+square1.draw();
+square1.reportArea();
+square1.reportPerimeter();</pre>
+
+<h2 id="Aggregating_modules">Aggregating modules</h2>
+
+<p>There will be times where you'll want to aggregate modules together. You might have multiple levels of dependencies, where you want to simplify things, combining several submodules into one parent module. This is possible using export syntax of the following forms in the parent module:</p>
+
+<pre class="brush: js; notranslate">export * from 'x.js'
+export { name } from 'x.js'</pre>
+
+<p>For an example, see our <a href="https://github.com/mdn/js-examples/tree/master/modules/module-aggregation">module-aggregation</a> directory. In this example (based on our earlier classes example) we've got an extra module called <code>shapes.js</code>, which aggregates all the functionality from <code>circle.js</code>, <code>square.js</code>, and <code>triangle.js</code> together. We've also moved our submodules inside a subdirectory inside the <code>modules</code> directory called <code>shapes</code>. So the module structure in this example is:</p>
+
+<pre class="notranslate">modules/
+ canvas.js
+ shapes.js
+ shapes/
+ circle.js
+ square.js
+ triangle.js</pre>
+
+<p>In each of the submodules, the export is of the same form, e.g.</p>
+
+<pre class="brush: js; notranslate">export { Square };</pre>
+
+<p>Next up comes the aggregation part. Inside <code><a href="https://github.com/mdn/js-examples/blob/master/modules/module-aggregation/modules/shapes.js">shapes.js</a></code>, we include the following lines:</p>
+
+<pre class="brush: js; notranslate">export { Square } from './shapes/square.js';
+export { Triangle } from './shapes/triangle.js';
+export { Circle } from './shapes/circle.js';</pre>
+
+<p>These grab the exports from the individual submodules and effectively make them available from the <code>shapes.js</code> module.</p>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: The exports referenced in <code>shapes.js</code> basically get redirected through the file and don't really exist there, so you won't be able to write any useful related code inside the same file.</p>
+</div>
+
+<p>So now in the <code>main.js</code> file, we can get access to all three module classes by replacing</p>
+
+<pre class="brush: js; notranslate">import { Square } from './modules/square.js';
+import { Circle } from './modules/circle.js';
+import { Triangle } from './modules/triangle.js';</pre>
+
+<p>with the following single line:</p>
+
+<pre class="brush: js; notranslate">import { Square, Circle, Triangle } from './modules/shapes.js';</pre>
+
+<h2 id="Dynamic_module_loading">Dynamic module loading</h2>
+
+<p>The newest part of the JavaScript modules functionality to be available in browsers is dynamic module loading. This allows you to dynamically load modules only when they are needed, rather than having to load everything up front. This has some obvious performance advantages; let's read on and see how it works.</p>
+
+<p>This new functionality allows you to call {{JSxRef("Statements/import", "import()", "#Dynamic_Imports")}} as a function, passing it the path to the module as a parameter. It returns a {{JSxRef("Promise")}}, which fulfills with a module object (see <a href="#Creating_a_module_object">Creating a module object</a>) giving you access to that object's exports, e.g.</p>
+
+<pre class="brush: js; notranslate">import('./modules/myModule.js')
+ .then((module) =&gt; {
+ // Do something with the module.
+ });</pre>
+
+<p>Let's look at an example. In the <a href="https://github.com/mdn/js-examples/tree/master/modules/dynamic-module-imports">dynamic-module-imports</a> directory we've got another example based on our classes example. This time however we are not drawing anything on the canvas when the example loads. Instead, we include three buttons — "Circle", "Square", and "Triangle" — that, when pressed, dynamically load the required module and then use it to draw the associated shape.</p>
+
+<p>In this example we've only made changes to our <code><a href="https://github.com/mdn/js-examples/blob/master/modules/dynamic-module-imports/index.html">index.html</a></code> and <code><a href="https://github.com/mdn/js-examples/blob/master/modules/dynamic-module-imports/main.mjs">main.js</a></code> files — the module exports remain the same as before.</p>
+
+<p>Over in <code>main.js</code> we've grabbed a reference to each button using a <a href="/en-US/docs/Web/API/Document/querySelector"><code>Document.querySelector()</code></a> call, for example:</p>
+
+<pre class="brush: js; notranslate">let squareBtn = document.querySelector('.square');</pre>
+
+<p>We then attach an event listener to each button so that when pressed, the relevant module is dynamically loaded and used to draw the shape:</p>
+
+<pre class="brush: js; notranslate">squareBtn.addEventListener('click', () =&gt; {
+ import('./modules/square.js').then((Module) =&gt; {
+ let square1 = new Module.Square(myCanvas.ctx, myCanvas.listId, 50, 50, 100, 'blue');
+ square1.draw();
+ square1.reportArea();
+ square1.reportPerimeter();
+ })
+});</pre>
+
+<p>Note that, because the promise fulfillment returns a module object, the class is then made a subfeature of the object, hence we now need to access the constructor with <code>Module.</code> prepended to it, e.g. <code>Module.Square( ... )</code>.</p>
+
+<h2 id="Troubleshooting">Troubleshooting</h2>
+
+<p>Here are a few tips that may help you if you are having trouble getting your modules to work. Feel free to add to the list if you discover more!</p>
+
+<ul>
+ <li>We mentioned this before, but to reiterate: <code>.js</code> files need to be loaded with a MIME-type of <code>text/javascript</code> (or another JavaScript-compatible MIME-type, but <code>text/javascript</code> is recommended), otherwise you'll get a strict MIME type checking error like "The server responded with a non-JavaScript MIME type".</li>
+ <li>If you try to load the HTML file locally (i.e. with a <code>file://</code> URL), you'll run into CORS errors due to JavaScript module security requirements. You need to do your testing through a server. GitHub pages is ideal as it also serves <code>.js</code> files with the correct MIME type.</li>
+ <li>Because <code>.mjs</code> is a non-standard file extension, some operating systems might not recognise it, or try to replace it with something else. For example, we found that macOS was silently adding on <code>.js</code> to the end of <code>.mjs</code> files and then automatically hiding the file extension. So all of our files were actually coming out as <code>x.mjs.js</code>. Once we turned off automatically hiding file extensions, and trained it to accept <code>.mjs</code>, it was OK.</li>
+</ul>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="https://developers.google.com/web/fundamentals/primers/modules#mjs">Using JavaScript modules on the web</a>, by Addy Osmani and Mathias Bynens</li>
+ <li><a href="https://hacks.mozilla.org/2018/03/es-modules-a-cartoon-deep-dive/">ES modules: A cartoon deep-dive</a>, Hacks blog post by Lin Clark</li>
+ <li><a href="https://hacks.mozilla.org/2015/08/es6-in-depth-modules/">ES6 in Depth: Modules</a>, Hacks blog post by Jason Orendorff</li>
+ <li>Axel Rauschmayer's book <a href="http://exploringjs.com/es6/ch_modules.html">Exploring JS: Modules</a></li>
+</ul>
+
+<p>{{Previous("Web/JavaScript/Guide/Meta_programming")}}</p>
diff --git a/files/ru/web/javascript/guide/numbers_and_dates/index.html b/files/ru/web/javascript/guide/numbers_and_dates/index.html
new file mode 100644
index 0000000000..7022834e0d
--- /dev/null
+++ b/files/ru/web/javascript/guide/numbers_and_dates/index.html
@@ -0,0 +1,378 @@
+---
+title: Числа и даты
+slug: Web/JavaScript/Guide/Numbers_and_dates
+translation_of: Web/JavaScript/Guide/Numbers_and_dates
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}</div>
+
+<p class="summary">Данный раздел представляет собой введение в работу с числами и датами в JavaScript.</p>
+
+<h2 id="Числа">Числа</h2>
+
+<p>В JavaScript все числа являются <a class="external external-icon" href="https://en.wikipedia.org/wiki/Double-precision_floating-point_format">числами двойной точности в соответствии с 64-битным двоичным форматом IEEE 754</a> (т.е. числами, пренадлежащими диапазону между -(2<sup>53</sup> -1) и 2<sup>53</sup> -1). <strong>Целые числа не рассматриваются как отдельный тип чисел</strong>. В дополнение к числам с плавающей запятой, к числовому типу данных относятся также три символьные величины: <code>+</code>{{jsxref("бесконечность")}}, <code>-</code>{{jsxref("бесконечность")}}, и {{jsxref("NaN")}} (не-число). В разделе <a href="/en-US/docs/Web/JavaScript/Data_structures">типы и структуры данных в JavaScript</a> числовой тип данных описан в контексте с другими примитивными типами в JavaScript.</p>
+
+<p>Вы можете использовать четыре типа числовых литералов: десятичный, двоичный, восьмеричный и шестнадцатеричный.</p>
+
+<h3 id="Десятичные_числа">Десятичные числа</h3>
+
+<pre class="brush: js">1234567890
+42
+
+// Будьте внимательны при использование нулей в начале чисел:
+
+0888 // 888 обрабатывается как десятичное
+0777 // обрабатывается как восьмеричное в нестрогой форме (511 в десятичной)
+</pre>
+
+<p>Обратите внимание, что десятичные литералы могут начинаться с нуля (<code>0</code>) за которым следует другая десятичная цифра, но если следующая за нулем цифра меньше 8, то число обрабатывается как восьмеричное.</p>
+
+<h3 id="Двоичные_числа">Двоичные числа</h3>
+
+<p>Систаксис двоичных чисел использует ведущий 0 за которым следует латинская буква "B" в верхнем или нижнем регистре (<code>0b</code> or <code>0B</code>). Если цифры после <code>0b</code> не являются 0 или 1, то будет сгенерированно <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError">SyntaxError</a></code> с сообщением: "Missing binary digits after 0b".</p>
+
+<pre class="brush: js">var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607</pre>
+
+<h3 id="Восьмеричные_числа">Восьмеричные числа</h3>
+
+<p>Синтаксис восмеричных чисел использует ноль в начале. Если цифры после 0 не входят в диапазон от 0 до 7, число будет интерпретированно как десятичное.</p>
+
+<pre class="brush: js">var n = 0755; // 493
+var m = 0644; // 420
+</pre>
+
+<h3 id="Шестнадцатеричные_числа">Шестнадцатеричные числа</h3>
+
+<p>Синтаксис  шестнадцатеричных чисел исользует ведущий 0 за которым следует латинская буква "X" в верхнем или нижнем регистре (<code>0x</code> or <code>0X</code>). Если цифры после 0x не входят в диапазон (0123456789ABCDEF),  то будет сгенерированно <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError">SyntaxError</a></code> с сообщением: "Identifier starts immediately after numeric literal".</p>
+
+<pre class="brush: js">0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF // 81985529216486900
+0XA // 10
+</pre>
+
+<h2 id="Объект_Number">Объект Number</h2>
+
+<p>У этого встроенного объекта {{jsxref("Number")}} есть свойства для целочисленных констант, таких как максимальное число, не-число и бесконечность. Вы не можете изменить значения этих свойств, и Вы должны использовать их следующим образом:</p>
+
+<pre class="brush: js">var biggestNum = Number.MAX_VALUE;
+var smallestNum = Number.MIN_VALUE;
+var infiniteNum = Number.POSITIVE_INFINITY;
+var negInfiniteNum = Number.NEGATIVE_INFINITY;
+var notANum = Number.NaN;
+</pre>
+
+<p>Как видно из примера выше, для получения перечисленных значений, нужно обращаться к свойствам предопределенного глобального объекта <code>Number</code>. Тогда как у экземпляра этого объекта, созданного вами при работе программы, этих свойств не будет. </p>
+
+<p>В следующей таблице приведен список свойств объекта <code>Number</code>.</p>
+
+<table class="standard-table">
+ <caption>Свойства объекта <code>Number</code></caption>
+ <thead>
+ <tr>
+ <th scope="col">Свойство</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Number.MAX_VALUE")}}</td>
+ <td>Наибольшее число из возможных для представления</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.MIN_VALUE")}}</td>
+ <td>Наименьшее число из возможных для представления</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.NaN")}}</td>
+ <td>Специальное "Не числовое" ("not a number") значение</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.NEGATIVE_INFINITY")}}</td>
+ <td>Специальное значение "Минус бесконечность"; возвращается при переполнении</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.POSITIVE_INFINITY")}}</td>
+ <td>Специальное значение "Плюс бесконечность"; возвращается при переполнении</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.EPSILON")}}</td>
+ <td>Разница между единицей и наименьшим значением, большим единицы, которое может быть представлено типом {{jsxref("Number")}}.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.MIN_SAFE_INTEGER")}}</td>
+ <td>Минимальное целое, безопасное число в JavaScript.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.MAX_SAFE_INTEGER")}}</td>
+ <td>Максимальное целое, безопасное число в JavaScript.</td>
+ </tr>
+ </tbody>
+</table>
+
+<table class="standard-table">
+ <caption>Методы объекта <code>Number</code></caption>
+ <thead>
+ <tr>
+ <th>Метод</th>
+ <th>Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Number.parseFloat()")}}</td>
+ <td>Принимает строку как аргумент, и возвращает числовое значение с плавающей точкой, которое удалось распознать.<br>
+ Тоже самое что и глобальная функция {{jsxref("parseFloat", "parseFloat()")}}.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.parseInt()")}}</td>
+ <td>Принимает строку как аргумент, и возвращает целочисленное значение в заданной системе исчисления, которое удалось распознать.<br>
+ Тоже самое что и глобальная функция {{jsxref("parseInt", "parseInt()")}}.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.isFinite()")}}</td>
+ <td>Определяет, является ли число, переданное в качестве аргумента, конечным.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.isInteger()")}}</td>
+ <td>Определяет, является ли число, переданное в качестве аргумента, целым.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.isNaN()")}}</td>
+ <td>Определяет, является ли число, переданное в качестве аргумента, {{jsxref("Global_Objects/NaN", "NaN")}} (не числом). Аналогичный, но более надежный метод чем глобальная функция {{jsxref("Global_Objects/isNaN", "isNaN()")}}.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.isSafeInteger()")}}</td>
+ <td>Определяет, является ли .число, переданное в качестве аргумента, целым и безопасным.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p><code><font face="Open Sans, Arial, sans-serif">Прототип </font>Number</code> предоставляет ряд методов, для получения значения числа в различных форматах. В следующей таблице перечислены методы, доступные через <code>Number.prototype</code>.</p>
+
+<table class="standard-table">
+ <caption>Методы <code>Number.prototype</code></caption>
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Number.toExponential", "toExponential()")}}</td>
+ <td>Возвращает строку, представляющую число в экспоненциальном представлении.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.toFixed", "toFixed()")}}</td>
+ <td>Возвращает строку, представляющую число с заданным количеством разрядов после запятой.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.toPrecision", "toPrecision()")}}</td>
+ <td>Возвращает строку, представляющую число с указанной точностью.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Объект_Math"><code>Объект Math</code></h2>
+
+<p>Встроенный глобальный объект {{jsxref("Math")}} содержит свойства и методы для математических констант и функций. Например, свойство объекта <code>Math </code><code>PI</code> содержит значение математической константы "Пи" (3.141...), которые вы можете использовать в программе как</p>
+
+<pre class="brush: js">Math.PI
+</pre>
+
+<p>Подобным образом, математические функции являются методами объекта <code>Math</code>. Они включают тригонометрические, логорифмические, экспоненциальные и другие функции. Например, если вы хотите использовать тригонометрическую функцию синуса, вы напишете следующий код</p>
+
+<pre class="brush: js">Math.sin(1.56)
+</pre>
+
+<p>Заметьте, что все тригонометрические методы объекта <code>Math</code> принимают аргументы в радианах.</p>
+
+<p>В следующей таблице перечислены методы объекта <code>Math</code>.</p>
+
+<table class="standard-table">
+ <caption>Методы объекта <code>Math</code></caption>
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Math.abs", "abs()")}}</td>
+ <td>Возвращает абсолютное значение (модуль) аргумента</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.sin", "sin()")}}, {{jsxref("Math.cos", "cos()")}}, {{jsxref("Math.tan", "tan()")}}</td>
+ <td>Стандартные тригонометрические функции; принимают аргументы в радианах</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.asin", "asin()")}}, {{jsxref("Math.acos", "acos()")}}, {{jsxref("Math.atan", "atan()")}}, {{jsxref("Math.atan2", "atan2()")}}</td>
+ <td>Обратные тригонометрические функции; возвращают значения в радианах</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.sinh", "sinh()")}}, {{jsxref("Math.cosh", "cosh()")}}, {{jsxref("Math.tanh", "tanh()")}}</td>
+ <td>Гиперболические тригонометрические функции; принимают аргументы в гиперболических углах</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.asinh", "asinh()")}}, {{jsxref("Math.acosh", "acosh()")}}, {{jsxref("Math.atanh", "atanh()")}}</td>
+ <td>Обратные гиперболические тригонометрические функции; возвращают значения в гиперболических углах</td>
+ </tr>
+ <tr>
+ <td>
+ <p>{{jsxref("Math.pow", "pow()")}}, {{jsxref("Math.exp", "exp()")}}, {{jsxref("Math.expm1", "expm1()")}}, {{jsxref("Math.log10", "log10()")}}, {{jsxref("Math.log1p", "log1p()")}}, {{jsxref("Math.log2", "log2()")}}</p>
+ </td>
+ <td>Экпоненциальные и логорифмические функции</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.floor", "floor()")}}, {{jsxref("Math.ceil", "ceil()")}}</td>
+ <td>Возвращают наибольшее/наименьшее целое, которое меньше/больше или равно входному значению</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.min", "min()")}}, {{jsxref("Math.max", "max()")}}</td>
+ <td>Возвращают наибольшее или наименьшее (соответственно) из входных числовых значений, перечисленных через запятую</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.random", "random()")}}</td>
+ <td>Возвращает случайное число от 0 до 1</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.round", "round()")}}, {{jsxref("Math.fround", "fround()")}}, {{jsxref("Math.trunc", "trunc()")}},</td>
+ <td>Функции округления и отсечения дробной части</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.sqrt", "sqrt()")}}, {{jsxref("Math.cbrt", "cbrt()")}}, {{jsxref("Math.hypot", "hypot()")}}</td>
+ <td>Корень квадратный, корень кубический, корень квадратный из суммы квадратов аргументов</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.sign", "sign()")}}</td>
+ <td>Знак числа, показывает является ли входное число позитивным, негативным или равным нулю</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Math.clz32", "clz32()")}},<br>
+ {{jsxref("Math.imul", "imul()")}}</td>
+ <td>Количество первых нулевых бит в 32-битном двоичном представлении.<br>
+ Возвращает результат Cи-подобного 32-битного целочисленного умножения двух аргументов.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>В отличии от большинства других объектов, вам не нужно создавать свои экземпляры объекта <code>Math</code>. Всегда следует использовать глобальный объект <code>Math</code> непосредственно.</p>
+
+<h2 id="Объект_Date"><code>Объект Date</code></h2>
+
+<p>JavaScript не имеет отдельного типа данных для хранения дат. Однако, вы можете использовать объект {{jsxref("Date")}} и его методы для работы с датами и времененем в вашем приложении. Объект <code>Date</code> имеет большое количество методов для записи, чтения и оперирования датой и временем, а свойств не имеет ни одного.</p>
+
+<p>JavaScript оперирует датами во многом аналогично языку Java. Для работы с датой эти два языка имеют множество одинаковых методов, и оба они хранят даты как количество миллисекунд, прошедших с 00:00:00 1 Января 1970 года.</p>
+
+<p>Период значений, которые может принимать Data, простирается от -100 000 000 до100 000 000 дней, относительно 1 Января 1970 года.</p>
+
+<p>Чтобы создать свой экземпляр объекта <code>Date используйте такой код</code>:</p>
+
+<pre class="brush: js">var dateObjectName = new Date([parameters]);
+</pre>
+
+<p>где <code>dateObjectName</code> это имя переменной, которой будет присвоено созданное значение с типом <code>Date</code>; вместо этой переменной, присвоить созданное значение можно как свойство, любому существующему объекту.</p>
+
+<p>Вызов <code>Date</code> как функции, без ключевого слова <code>new,</code> возвращает текущую дату и время в виде текстовой строки.</p>
+
+<p>Содержимым блока <code>parameters</code> в коде представленном выше, могут выступать любая из следующих конструкций:</p>
+
+<ul>
+ <li>Пусто: создает текущую дату и время. Пример: <code>today = new Date();</code>.</li>
+ <li>Текстовая строка, содержащая дату и время в следующем формате: "Месяц день, год часы:минуты:секунды". Например: <code>var Xmas95 = new Date("December 25, 1995 13:30:00")</code>. Если не указать секунды, минуты или часы, то их значение будет принято за 0.</li>
+ <li>Набор целочисленных значений для года, месяца и дня. Например: <code>var Xmas95 = new Date(1995, 11, 25)</code>.</li>
+ <li>Набор целочисленных значений для года, месяца, дня, часов, минут и секунд. Например: <code>var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);</code>.</li>
+</ul>
+
+<h3 id="Получение_даты_в_русскоязычном_формате">Получение даты в русскоязычном формате</h3>
+
+<pre>new Date().toLocaleString('ru',
+ {
+ day: 'numeric',
+ month: 'long',
+ year: 'numeric'
+ });
+// текущая дата в формате: '10 января 2019 г.'
+</pre>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString">Подробнее про метод toLocalString</a></p>
+
+<h3 id="Методы_объекта_Date">Методы объекта <code>Date</code></h3>
+
+<p>Методы объекта <code>Date</code> для работы с датой и временем делятся на следующие категории:</p>
+
+<ul>
+ <li>"set" методы, служат для установки параметров объекта <code>Date</code>.</li>
+ <li>"get" методы, служат для получения параметров объекта <code>Date</code>.</li>
+ <li>"to" методы, служат для получения значения объекта <code>Date</code> в текстовом виде.</li>
+ <li>"parse" и UTC методы, служат для распознавания дат и времени <font face="Consolas, Liberation Mono, Courier, monospace">из тектового формата</font>.</li>
+</ul>
+
+<p>При помощи методов групп "get" и"set", вы можете получить и установить значения секунд, минут, часов, дня месяца, дня недели, месяца и года по отдельности. Отдельно выделим метод <code>getDay</code>, который возвращает день недели, однако соответствующего ему метода <code>setDay</code> не существует, потому-что день недели высчитывается автоматически. Все эти методы используют в своей работе целочисленные значения по следующим правилам:</p>
+
+<ul>
+ <li>Секунды и минуты: от 0 до 59</li>
+ <li>Часы: от 0 до 23</li>
+ <li>Дни недели: от 0 (Воскресенье) до 6 (Суббота)</li>
+ <li>Дни месяца: от 1 до 31</li>
+ <li>Месяцы: от 0 (Январь) до 11 (Декабрь)</li>
+ <li>Год: год относительно 1900 года.</li>
+</ul>
+
+<p>Например, предположим, что вы определили дату следующим образом:</p>
+
+<pre class="brush: js">var Xmas95 = new Date("December 25, 1995");
+</pre>
+
+<p>Тогда <code>Xmas95.getMonth()</code> вернет 11, а <code>Xmas95.getFullYear()</code> вернет 1995.</p>
+
+<p>Методы <code>getTime</code> и <code>setTime могут быть</code> полезны при сравнении дат. Метод <code>getTime</code> возвращает количество миллисекунд, прошедших с 00:00:00 1 Января, 1970 года.</p>
+
+<p>Для примера рассмотрим следующий код, показывающий количество дней оставшихся до конца текущего года:</p>
+
+<pre class="brush: js">var today = new Date(); // Получаем текущую дату
+var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Устанавливаем месяц и день на конец года
+endYear.setFullYear(today.getFullYear()); // Устанавливаем текущий год
+var msPerDay = 24 * 60 * 60 * 1000; // Количество миллисекунд в одних сутках
+var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
+var daysLeft = Math.round(daysLeft); // возвращает количество дней, оставшихся до конца года
+</pre>
+
+<p>Этот пример создает объект <code>Date</code> названный <code>today, который содержит текущую дату и время</code>. Затем, создается воспомогательный <code>Date</code> объект, названный <code>endYear,</code> которому устанавливаются значения, указывающие на конец года. После этого, при помощи расчитанного количества миллисекунд в сутках, вычисляется количество дней между  <code>today</code> и <code>endYear</code>, При этом используются метод <code>getTime</code> и округление, для получения количества полных дней.</p>
+
+<p>Метод <code>parse</code> полезен для присвоения значений существующим объектам <code>Date</code> из текстового формата. Например, следующий код использует мотоды <code>parse</code> и <code>setTime</code> чтобы установить значение переменной <code>IPOdate</code>:</p>
+
+<pre class="brush: js">var IPOdate = new Date();
+IPOdate.setTime(Date.parse("Aug 9, 1995"));
+</pre>
+
+<h3 id="Пример">Пример</h3>
+
+<p>В следующем примере приведена функция <code>JSClock(), которая возвращает время в формате электронных часов:</code></p>
+
+<pre class="brush: js">function JSClock() {
+ var time = new Date();
+ var hour = time.getHours();
+ var minute = time.getMinutes();
+ var second = time.getSeconds();
+ var temp = "" + ((hour &gt; 12) ? hour - 12 : hour);
+ if (hour == 0)
+ temp = "12";
+ temp += ((minute &lt; 10) ? ":0" : ":") + minute;
+ temp += ((second &lt; 10) ? ":0" : ":") + second;
+ temp += (hour &gt;= 12) ? " P.M." : " A.M.";
+ return temp;
+}
+</pre>
+
+<p>Первым делом, функция JSClock создает новый объект <code>Date</code>, названный <code>time</code>; так как объект создается баз параметров, переменная <code>time </code>содержит текущую дату и время. Затем вызываются методы <code>getHours</code>, <code>getMinutes </code>и <code>getSeconds</code>, чтобы установить значения переменным <code>hour</code>, <code>minute </code>и <code>second</code>.</p>
+
+<p>Следующие четыре выражения строят текстовую строку на основе time. Первое из них создает переменную <code>temp</code>, присваивая ей значение при помощи условия; Если <code>hour</code> больше чем 12, то (<code>hour - 12</code>), иначе просто <code>hour.</code> В случае же, когда <code>hour</code> равно 0, берется фиксированное значение "12".</p>
+
+<p>Следующее выражение приращивает минуты к переменной <code>temp</code>. Если количество минут меньше 10, то условное выражение добавляет строку с двоеточием и заполняющим нулем, иначе, просто строку с двоеточием. Секунды приращиваются к переменной <code>temp</code> тем же путем.</p>
+
+<p>В завершение всего, последнее условное выражение добавляет строку "P.M." к переменной <code>temp</code> если <code>hour</code> равно или больше 12, иначе, добавляется строка "A.M.".</p>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Expressions_and_Operators", "Web/JavaScript/Guide/Text_formatting")}}</p>
diff --git a/files/ru/web/javascript/guide/predefined_core_objects/index.html b/files/ru/web/javascript/guide/predefined_core_objects/index.html
new file mode 100644
index 0000000000..d7fd638b6d
--- /dev/null
+++ b/files/ru/web/javascript/guide/predefined_core_objects/index.html
@@ -0,0 +1,922 @@
+---
+title: Predefined Core Objects
+slug: Web/JavaScript/Guide/Predefined_Core_Objects
+translation_of: Web/JavaScript/Guide
+---
+<p>Эта глава описывает предопределённые объекты в стандартном JavaScript: <code>Array</code>, <code>Boolean</code>, <code>Date</code>, <code>Function</code>, <code>Math</code>, <code>Number</code>, <code>RegExp</code>, и <code>String</code>.</p>
+
+<h2 id="Объект_Array">Объект Array</h2>
+
+<p>В JavaScript массив как тип данных отсутствует. Тем не менее, вы можете использовать предопределённый объект <code>Array</code> и его методы, чтобы работать с массивами в ваших приложениях. Объект <code>Array</code> содержит различные методы для манипуляций с массивами, такими как объединение, обращение и сортировка. У него есть свойство для определения длины массива и другие свойства для работы с регулярными выражениями.</p>
+
+<p><em>Массив</em> - это упорядоченный набор значений, обращаться к которым можно с помощью имени и индекса. Например, можно создать массив <code>emp</code>, который содержит имена сотрудников фирмы, проиндексированные номерами. Тогда <code>emp[1]</code> будет соответствовать сотруднику номер один, <code>emp[2]</code> сотруднику номер два и так далее.</p>
+
+<h3 id="Создание_объекта_Array">Создание объекта Array</h3>
+
+<p>Следующие инструкции создают эквивалентные массивы:</p>
+
+<div style="margin-right: 270px;">
+<pre class="brush: js">var arr = new Array(element0, element1, ..., elementN);
+var arr = Array(element0, element1, ..., elementN);
+var arr = [element0, element1, ..., elementN];
+</pre>
+</div>
+
+<p><code>element0, element1, ..., elementN</code> это список значений во вновь создаваемом массиве. Когда эти значения заданы, массив инициализирует ими свои эелементы. Длина массива определяется по числу аргументов и сохраняется в свойстве <code>length </code>(длина).</p>
+
+<p>Синтаксис с квадратными скобками называется "литералом массива" (array literal) или "инициализатором массива" (array initializer). Такая запись короче других и используется чаще. Подробности смотрите в <a href="/en-US/docs/JavaScript/Guide/Values,_Variables,_and_Literals#Array_Literals" title="en-US/docs/JavaScript/Guide/Values, Variables, and Literals#Array Literals">Array Literals</a>.</p>
+
+<p>Создать массив ненулевой длины, но без элементов, можно одним из следующих способов:</p>
+
+<pre class="brush: js">var arr = new Array(arrayLength);
+var arr = Array(arrayLength);
+
+// This has exactly the same effect
+var arr = [];
+arr.length = arrayLength;
+</pre>
+
+<p>Обратите внимание: в приведённом выше коде <code>arrayLength</code> должен быть значением типа <code>Number</code>, то есть числом, иначе будет создан массив с одним элементом (переданным конструктору значением). Вызов <code>arr.length</code> возвратит <code>arrayLength</code>, хотя на самом деле элемент содержит пустые (неопределённые, undefined) элементы. Итерация по массиву циклом for...in не возвратит никаких элементов.</p>
+
+<p>Массивы можно не только определить как и переменные, но и присвоить существующему объекту как свойство:</p>
+
+<pre class="brush: js">var obj = {};
+// ...
+obj.prop = [element0, element1, ..., elementN];
+
+// OR
+var obj = {prop: [element0, element1, ...., elementN]}
+</pre>
+
+<p>Если же вы хотите создать одноэлементный массив, содержащий число, придётся использовать запись с квадратными скобками, так как когда конструктору Array() передаётся одно-единственное число, оно трактуется как длина массива, а не как хранимвый элемент.</p>
+
+<pre><code>var arr = [42];
+var arr = Array(42); // Creates an array with no element, but with arr.length set to 42
+
+// The above code is equivalent to
+var arr = [];
+arr.length = 42;
+</code>
+</pre>
+
+<p>Вызов <code>Array(N)</code> приводит к <code>RangeError</code>, если <code>N</code> не является целым числом, чья дробная часть не равна нулю. Следующий пример иллюстрирует это поведение.</p>
+
+<pre>var arr = Array(9.3); // RangeError: Invalid array length
+</pre>
+
+<p>Если ваш код должен создавать массивы с отдельными элементами произвольного типа, безопаснее использовать литералы массива. Или, создайте пустой массив, прежде чем добавлять элементы к нему.</p>
+
+<h3 id="Заполнение_массива">Заполнение массива</h3>
+
+<p>You can populate an array by assigning values to its elements. For example,</p>
+
+<pre class="brush: js">var emp = [];
+emp[0] = "Casey Jones";
+emp[1] = "Phil Lesh";
+emp[2] = "August West";
+</pre>
+
+<p><strong>Note:</strong> if you supply a non-integer value to the array operator in the code above, a property will be created in the object representing the array, instead of an array element.</p>
+
+<pre> var arr = [];
+arr[3.4] = "Oranges";
+console.log(arr.length); // 0
+console.log(arr.hasOwnProperty(3.4)); // true
+</pre>
+
+<p>You can also populate an array when you create it:</p>
+
+<pre class="brush: js">var myArray = new Array("Hello", myVar, 3.14159);
+var myArray = ["Mango", "Apple", "Orange"]
+</pre>
+
+<h3 id="Referring_to_Array_Elements">Referring to Array Elements</h3>
+
+<p>You refer to an array's elements by using the element's ordinal number. For example, suppose you define the following array:</p>
+
+<pre class="brush: js">var myArray = ["Wind", "Rain", "Fire"];
+</pre>
+
+<p>You then refer to the first element of the array as <code>myArray[0]</code> and the second element of the array as <code>myArray[1]</code>. The index of the elements begins with zero.</p>
+
+<p><strong>Note:</strong> the array operator (square brackets) is also used for accessing the array's properties (arrays are also objects in JavaScript). For example,</p>
+
+<pre> var arr = ["one", "two", "three"];
+arr[2]; // three
+arr["length"]; // 3
+</pre>
+
+<h3 id="Understanding_length">Understanding length</h3>
+
+<p>At the implementation level, JavaScript's arrays actually store their elements as standard object properties, using the array index as the property name. The <code>length</code> property is special; it always returns the index of the last element plus one (in following example Dusty is indexed at 30 so cats.length returns 30 + 1). Remember, Javascript Array indexes are 0-based: they start at 0, not 1. This means that the <code><code>length</code></code> property will be one more than the highest index stored in the array:</p>
+
+<pre class="brush: js">var cats = [];
+cats[30] = ['Dusty'];
+print(cats.length); // 31
+</pre>
+
+<p>You can also assign to the <code>length</code> property. Writing a value that is shorter than the number of stored items truncates the array; writing 0 empties it entirely:</p>
+
+<pre class="brush: js">var cats = ['Dusty', 'Misty', 'Twiggy'];
+console.log(cats.length); // 3
+
+cats.length = 2;
+console.log(cats); // prints "Dusty,Misty" - Twiggy has been removed
+
+cats.length = 0;
+console.log(cats); // prints nothing; the cats array is empty
+
+cats.length = 3;
+console.log(cats); // [undefined, undefined, undefined]
+</pre>
+
+<h3 id="Iterating_over_arrays">Iterating over arrays</h3>
+
+<p>A common operation is to iterate over the values of an array, processing each one in some way. The simplest way to do this is as follows:</p>
+
+<pre class="brush: js">var colors = ['red', 'green', 'blue'];
+for (var i = 0; i &lt; colors.length; i++) {
+ console.log(colors[i]);
+}
+</pre>
+
+<p>If you know that none of the elements in your array evaluate to <code>false</code> in a boolean context — if your array consists only of <a href="/en-US/docs/DOM" title="en-US/docs/DOM">DOM</a> nodes, for example, you can use a more efficient idiom:</p>
+
+<pre class="brush: js">var divs = document.getElementsByTagName('div');
+for (var i = 0, div; div = divs[i]; i++) {
+ /* Process div in some way */
+}
+</pre>
+
+<p>This avoids the overhead of checking the length of the array, and ensures that the <code>div</code> variable is reassigned to the current item each time around the loop for added convenience.</p>
+
+<p>The <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach" title="en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach"><code>forEach()</code></a> method, introduced in JavaScript 1.6, provides another way of iterating over an array:</p>
+
+<pre class="brush: js">var colors = ['red', 'green', 'blue'];
+colors.forEach(function(color) {
+ console.log(color);
+});
+</pre>
+
+<p>The function passed to <code>forEach</code> is executed once for every item in the array, with the array item passed as the argument to the function. Unassigned values are not iterated in a <code>forEach</code> loop.</p>
+
+<p>Note that the elements of array omitted when the array is defined are not listed when iterating by <code>forEach, </code>but are listed when <code>undefined</code> has been manually assigned to the element:</p>
+
+<pre class="brush: js">var array = ['first', 'second', , 'fourth'];
+
+// returns ['first', 'second', 'fourth'];
+array.forEach(function(element) {
+ console.log(element);
+})
+
+if(array[2] === undefined) { console.log('array[2] is undefined'); } // true
+
+var array = ['first', 'second', undefined, 'fourth'];
+
+// returns ['first', 'second', undefined, 'fourth'];
+array.forEach(function(element) {
+ console.log(element);
+})</pre>
+
+<p>Since JavaScript elements are saved as standard object properties, it is not advisable to iterate through JavaScript arrays using for...in loops because normal elements and all enumerable properties will be listed.</p>
+
+<h3 id="Array_Methods">Array Methods</h3>
+
+<p>The <code>Array</code> object has the following methods:</p>
+
+<ul>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/concat" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/concat"><code>concat()</code></a> joins two arrays and returns a new array.
+
+ <pre class="brush: js">var myArray = new Array("1", "2", "3");
+myArray = myArray.concat("a", "b", "c"); // myArray is now ["1", "2", "3", "a", "b", "c"]
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/join" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/join"><code>join(deliminator = ",")</code></a> joins all elements of an array into a string.
+ <pre class="brush: js">var myArray = new Array("Wind", "Rain", "Fire");
+var list = myArray.join(" - "); // list is "Wind - Rain - Fire"
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/push" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/push"><code>push()</code></a> adds one or more elements to the end of an array and returns the resulting length of the array.
+ <pre class="brush: js">var myArray = new Array("1", "2");
+myArray.push("3"); // myArray is now ["1", "2", "3"]
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/pop" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/pop"><code>pop()</code></a> removes the last element from an array and returns that element.
+ <pre class="brush: js">var myArray = new Array("1", "2", "3");
+var last = myArray.pop(); // myArray is now ["1", "2"], last = "3"
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/shift" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/shift"><code>shift()</code></a> removes the first element from an array and returns that element.
+ <pre class="brush: js">var myArray = new Array ("1", "2", "3");
+var first = myArray.shift(); // myArray is now ["2", "3"], first is "1"
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/unshift" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/unshift"><code>unshift()</code></a> adds one or more elements to the front of an array and returns the new length of the array.
+ <pre class="brush: js">var myArray = new Array ("1", "2", "3");
+myArray.unshift("4", "5"); // myArray becomes ["4", "5", "1", "2", "3"]</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/slice" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/slice"><code>slice(start_index, upto_index)</code></a> extracts a section of an array and returns a new array.
+ <pre class="brush: js">var myArray = new Array ("a", "b", "c", "d", "e");
+myArray = myArray.slice(1, 4); /* starts at index 1 and extracts all elements
+ until index 3, returning [ "b", "c", "d"] */
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/splice" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/splice"><code>splice(index, count_to_remove, addelement1, addelement2, ...)</code></a> removes elements from an array and (optionally) replaces them.
+ <pre class="brush: js">var myArray = new Array ("1", "2", "3", "4", "5");
+myArray.splice(1, 3, "a", "b", "c", "d"); // myArray is now ["1", "a", "b", "c", "d", "5"]
+ // This code started at index one (or where the "2" was), removed 3 elements there,
+ // and then inserted all consecutive elements in its place.
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/reverse" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/reverse"><code>reverse()</code></a> transposes the elements of an array: the first array element becomes the last and the last becomes the first.
+ <pre class="brush: js">var myArray = new Array ("1", "2", "3");
+myArray.reverse(); // transposes the array so that myArray = [ "3", "2", "1" ]
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/sort"><code>sort()</code></a> sorts the elements of an array.
+ <pre class="brush: js">var myArray = new Array("Wind", "Rain", "Fire");
+myArray.sort(); // sorts the array so that myArrray = [ "Fire", "Rain", "Wind" ]
+</pre>
+
+ <p><code>sort()</code> can also take a callback function to determine how array elements are compared. The function compares two values and returns one of three values:</p>
+
+ <ul>
+ <li>if <code>a</code> is less than <code>b</code> by the sorting system, return -1 (or any negative number)</li>
+ <li>if <code>a</code> is greater than <code>b</code> by the sorting system, return 1 (or any positive number)</li>
+ <li>if <code>a</code> and <code>b</code> are considered equivalent, return 0.</li>
+ </ul>
+
+ <p>For instance, the following will sort by the last letter of an array:</p>
+
+ <pre class="brush: js">var sortFn = function(a, b){
+ if (a[a.length - 1] &lt; b[b.length - 1]) return -1;
+ if (a[a.length - 1] &gt; b[b.length - 1]) return 1;
+ if (a[a.length - 1] == b[b.length - 1]) return 0;
+}
+myArray.sort(sortFn); // sorts the array so that myArray = ["Wind","Fire","Rain"]</pre>
+ </li>
+</ul>
+
+<p>Compatibility code for older browsers can be found for each of these functions on the individual pages. Native browser support for these features in various browsers can be found<a class="external" href="http://www.robertnyman.com/javascript/" title="http://www.robertnyman.com/javascript/"> here.</a></p>
+
+<ul>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/indexOf"><code>indexOf(searchElement[, fromIndex])</code></a> searches the array for <code>searchElement</code> and returns the index of the first match.
+
+ <pre class="brush: js">var a = ['a', 'b', 'a', 'b', 'a'];
+alert(a.indexOf('b')); // Alerts 1
+// Now try again, starting from after the last match
+alert(a.indexOf('b', 2)); // Alerts 3
+alert(a.indexOf('z')); // Alerts -1, because 'z' was not found
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/lastIndexOf" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/lastIndexOf"><code>lastIndexOf(searchElement[, fromIndex])</code></a> works like <code>indexOf</code>, but starts at the end and searches backwards.
+ <pre class="brush: js">var a = ['a', 'b', 'c', 'd', 'a', 'b'];
+alert(a.lastIndexOf('b')); // Alerts 5
+// Now try again, starting from before the last match
+alert(a.lastIndexOf('b', 4)); // Alerts 1
+alert(a.lastIndexOf('z')); // Alerts -1
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/forEach"><code>forEach(callback[, thisObject])</code></a> executes <code>callback</code> on every array item.
+ <pre class="brush: js">var a = ['a', 'b', 'c'];
+a.forEach(alert); // Alerts each item in turn
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/map" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/map"><code>map(callback[, thisObject])</code></a> returns a new array of the return value from executing <code>callback</code> on every array item.
+ <pre class="brush: js">var a1 = ['a', 'b', 'c'];
+var a2 = a1.map(function(item) { return item.toUpperCase(); });
+alert(a2); // Alerts A,B,C
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/filter"><code>filter(callback[, thisObject])</code></a> returns a new array containing the items for which callback returned true.
+ <pre class="brush: js">var a1 = ['a', 10, 'b', 20, 'c', 30];
+var a2 = a1.filter(function(item) { return typeof item == 'number'; });
+alert(a2); // Alerts 10,20,30
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/every" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/every"><code>every(callback[, thisObject])</code></a> returns true if <code>callback</code> returns true for every item in the array.
+ <pre class="brush: js">function isNumber(value){
+ return typeof value == 'number';
+}
+var a1 = [1, 2, 3];
+alert(a1.every(isNumber)); // Alerts true
+var a2 = [1, '2', 3];
+alert(a2.every(isNumber)); // Alerts false
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/some" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/some"><code>some(callback[, thisObject])</code></a> returns true if <code>callback</code> returns true for at least one item in the array.
+ <pre class="brush: js">function isNumber(value){
+ return typeof value == 'number';
+}
+var a1 = [1, 2, 3];
+alert(a1.some(isNumber)); // Alerts true
+var a2 = [1, '2', 3];
+alert(a2.some(isNumber)); // Alerts true
+var a3 = ['1', '2', '3'];
+alert(a3.some(isNumber)); // Alerts false
+</pre>
+ </li>
+</ul>
+
+<p>The methods above that take a callback are known as <em>iterative methods</em>, because they iterate over the entire array in some fashion. Each one takes an optional second argument called <code>thisObject</code>. If provided, <code>thisObject</code> becomes the value of the <code>this</code> keyword inside the body of the callback function. If not provided, as with other cases where a function is invoked outside of an explicit object context, <code>this</code> will refer to the global object (<a href="/en-US/docs/DOM/window" title="en-US/docs/DOM/window"><code>window</code></a>).</p>
+
+<p>The callback function is actually called with three arguments. The first is the value of the current item, the second is its array index, and the third is a reference to the array itself. JavaScript functions ignore any arguments that are not named in the parameter list so it is safe to provide a callback function that only takes a single argument, such as <code>alert</code>.</p>
+
+<ul>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/reduce"><code>reduce(callback[, initialValue])</code></a> applies <code>callback(firstValue, secondValue)</code> to reduce the list of items down to a single value.
+
+ <pre class="brush: js">var a = [10, 20, 30];
+var total = a.reduce(function(first, second) { return first + second; }, 0);
+alert(total) // Alerts 60
+</pre>
+ </li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/ReduceRight" title="en-US/docs/JavaScript/Reference/Global
+ Objects/Array/reduceRight"><code>reduceRight(callback[, initialValue])</code></a> works like <code>reduce()</code>, but starts with the last element.</li>
+</ul>
+
+<p><code>reduce</code> and <code>reduceRight</code> are the least obvious of the iterative array methods. They should be used for algorithms that combine two values recursively in order to reduce a sequence down to a single value.</p>
+
+<h3 id="Multi-Dimensional_Arrays">Multi-Dimensional Arrays</h3>
+
+<p>Arrays can be nested, meaning that an array can contain another array as an element. Using this characteristic of JavaScript arrays, multi-dimensional arrays can be created.</p>
+
+<p>The following code creates a two-dimensional array.</p>
+
+<pre class="brush: js">var a = new Array(4);
+for (i = 0; i &lt; 4; i++) {
+ a[i] = new Array(4);
+ for (j = 0; j &lt; 4; j++) {
+ a[i][j] = "[" + i + "," + j + "]";
+ }
+}
+</pre>
+
+<p>This example creates an array with the following rows:</p>
+
+<pre>Row 0: [0,0] [0,1] [0,2] [0,3]
+Row 1: [1,0] [1,1] [1,2] [1,3]
+Row 2: [2,0] [2,1] [2,2] [2,3]
+Row 3: [3,0] [3,1] [3,2] [3,3]
+</pre>
+
+<h3 id="Arrays_and_Regular_Expressions">Arrays and Regular Expressions</h3>
+
+<p>When an array is the result of a match between a regular expression and a string, the array returns properties and elements that provide information about the match. An array is the return value of <a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec" title="en-US/docs/JavaScript/Reference/Global Objects/RegExp/exec"><code>RegExp.exec()</code></a>, <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/match" title="en-US/docs/JavaScript/Reference/Global Objects/String/match"><code>String.match()</code></a>, and <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/split" title="en-US/docs/JavaScript/Reference/Global
+Objects/String/split"><code>String.split()</code></a>. For information on using arrays with regular expressions, see <a href="/en-US/docs/JavaScript/Guide/Regular_Expressions" title="en-US/docs/JavaScript/Guide/Regular Expressions">Regular Expressions</a>.</p>
+
+<h3 id="Working_with_Array-like_objects">Working with Array-like objects</h3>
+
+<p>Some JavaScript objects, such as the <a href="/en-US/docs/DOM/NodeList" title="en-US/docs/DOM/NodeList"><code>NodeList</code></a> returned by <a href="/en-US/docs/DOM/document.getElementsByTagName" title="en-US/docs/DOM/document.getElementsByTagName"><code>document.getElementsByTagName()</code></a> or the <a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments" title="en-US/docs/JavaScript/Reference/Functions and
+function
+scope/arguments"><code>arguments</code></a> object made available within the body of a function, look and behave like arrays on the surface but do not share all of their methods. The <code>arguments</code> object provides a <a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/length" title="en-US/docs/JavaScript/Reference/Functions
+and function
+scope/arguments/length"><code>length</code></a> attribute but does not implement the <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach" title="en-US/docs/JavaScript/Reference/Global Objects/Array/forEach"><code>forEach()</code></a> method, for example.</p>
+
+<p>Array generics, introduced in JavaScript 1.6, provide a way of running <code>Array</code> methods against other array-like objects. Each standard array method has a corresponding method on the <code>Array</code> object itself; for example:</p>
+
+<pre class="brush: js"> function alertArguments() {
+ Array.forEach(arguments, function(item) {
+ alert(item);
+ });
+ }
+</pre>
+
+<p>These generic methods can be emulated more verbosely in older versions of JavaScript using the call method provided by JavaScript function objects:</p>
+
+<pre class="brush: js"> Array.prototype.forEach.call(arguments, function(item) {
+ alert(item);
+ });
+</pre>
+
+<p>Array generic methods can be used on strings as well, since they provide sequential access to their characters in a similar way to arrays:</p>
+
+<pre class="brush: js">Array.forEach("a string", function(chr) {
+ alert(chr);
+});</pre>
+
+<p>Here are some further examples of applying array methods to strings, also taking advantage of <a href="/en-US/docs/JavaScript/New_in_JavaScript/1.8#Expression_closures" title="en-US/docs/New_in_JavaScript_1.8#Expression_closures">JavaScript 1.8 expression closures</a>:</p>
+
+<pre class="brush: js">var str = 'abcdef';
+var consonantsOnlyStr = Array.filter(str, function (c) !(/[aeiou]/i).test(c)).join(''); // 'bcdf'
+var vowelsPresent = Array.some(str, function (c) (/[aeiou]/i).test(c)); // true
+var allVowels = Array.every(str, function (c) (/[aeiou]/i).test(c)); // false
+var interpolatedZeros = Array.map(str, function (c) c+'0').join(''); // 'a0b0c0d0e0f0'
+var numerologicalValue = Array.reduce(str, function (c, c2) c+c2.toLowerCase().charCodeAt()-96, 0);
+// 21 (reduce() since JS v1.8)
+</pre>
+
+<p>Note that <code>filter</code> and <code>map</code> do not automatically return the characters back into being members of a string in the return result; an array is returned, so we must use <code>join</code> to return back to a string.</p>
+
+<h3 id="Array_comprehensions">Array comprehensions</h3>
+
+<p>Introduced in JavaScript 1.7, array comprehensions provide a useful shortcut for constructing a new array based on the contents of another. Comprehensions can often be used in place of calls to <code>map()</code> and <code>filter()</code>, or as a way of combining the two.</p>
+
+<p>The following comprehension takes an array of numbers and creates a new array of the double of each of those numbers.</p>
+
+<pre class="brush: js">var numbers = [1, 2, 3, 4];
+var doubled = [i * 2 for (i of numbers)];
+alert(doubled); // Alerts 2,4,6,8
+</pre>
+
+<p>This is equivalent to the following <code>map()</code> operation:</p>
+
+<pre class="brush: js">var doubled = numbers.map(function(i){return i * 2;});
+</pre>
+
+<p>Comprehensions can also be used to select items that match a particular expression. Here is a comprehension which selects only even numbers:</p>
+
+<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30];
+var evens = [i for (i of numbers) if (i % 2 === 0)];
+alert(evens); // Alerts 2,22,30
+</pre>
+
+<p><code>filter()</code> can be used for the same purpose:</p>
+
+<pre class="brush: js">var evens = numbers.filter(function(i){return i % 2 === 0;});
+</pre>
+
+<p><code>map()</code> and <code>filter()</code> style operations can be combined into a single array comprehension. Here is one that filters just the even numbers, then creates an array containing their doubles:</p>
+
+<pre class="brush: js">var numbers = [1, 2, 3, 21, 22, 30];
+var doubledEvens = [i * 2 for (i of numbers) if (i % 2 === 0)];
+alert(doubledEvens); // Alerts 4,44,60
+</pre>
+
+<p>The square brackets of an array comprehension introduce an implicit block for scoping purposes. New variables (such as i in the example) are treated as if they had been declared using <a href="/en-US/docs/JavaScript/Reference/Statements/let" title="/en-US/docs/JavaScript/Reference/Statements/let"><code>let</code></a>. This means that they will not be available outside of the comprehension.</p>
+
+<p>The input to an array comprehension does not itself need to be an array; <a href="/en-US/docs/JavaScript/Guide/Iterators_and_Generators" title="en-US/docs/JavaScript/Guide/Iterators and Generators">iterators and generators</a> can also be used.</p>
+
+<p>Even strings may be used as input; to achieve the filter and map actions (under Array-like objects) above:</p>
+
+<pre class="brush: js">var str = 'abcdef';
+var consonantsOnlyStr = [c for (c of str) if (!(/[aeiouAEIOU]/).test(c)) ].join(''); // 'bcdf'
+var interpolatedZeros = [c+'0' for (c of str) ].join(''); // 'a0b0c0d0e0f0'
+</pre>
+
+<p>Again, the input form is not preserved, so we have to use <code>join()</code> to revert back to a string.</p>
+
+<h2 id="Boolean_Object">Boolean Object</h2>
+
+<p>The <code>Boolean</code> object is a wrapper around the primitive Boolean data type. Use the following syntax to create a <code>Boolean</code> object:</p>
+
+<pre class="brush: js">var booleanObjectName = new Boolean(value);
+</pre>
+
+<p>Do not confuse the primitive Boolean values <code>true</code> and <code>false</code> with the true and false values of the <code>Boolean</code> object. Any object whose value is not <code>undefined</code> , <code>null</code>, <code>0</code>, <code>NaN</code>, or the empty string, including a <code>Boolean</code> object whose value is false, evaluates to true when passed to a conditional statement. See <a href="/en-US/docs/JavaScript/Guide/Statements#if...else_Statement" title="en-US/docs/JavaScript/Guide/Statements#if...else Statement">if...else Statement</a> for more information.</p>
+
+<h2 id="Date_Object">Date Object</h2>
+
+<p>JavaScript does not have a date data type. However, you can use the <code>Date</code> object and its methods to work with dates and times in your applications. The <code>Date</code> object has a large number of methods for setting, getting, and manipulating dates. It does not have any properties.</p>
+
+<p>JavaScript handles dates similarly to Java. The two languages have many of the same date methods, and both languages store dates as the number of milliseconds since January 1, 1970, 00:00:00.</p>
+
+<p>The <code>Date</code> object range is -100,000,000 days to 100,000,000 days relative to 01 January, 1970 UTC.</p>
+
+<p>To create a <code>Date</code> object:</p>
+
+<pre class="brush: js">var dateObjectName = new Date([parameters]);
+</pre>
+
+<p>where <code>dateObjectName</code> is the name of the <code>Date</code> object being created; it can be a new object or a property of an existing object.</p>
+
+<p>Calling <code>Date</code> without the <code>new</code> keyword simply converts the provided date to a string representation.</p>
+
+<p>The <code>parameters</code> in the preceding syntax can be any of the following:</p>
+
+<ul>
+ <li>Nothing: creates today's date and time. For example, <code>today = new Date();</code>.</li>
+ <li>A string representing a date in the following form: "Month day, year hours:minutes:seconds." For example, <code>var Xmas95 = new Date("December 25, 1995 13:30:00")</code>. If you omit hours, minutes, or seconds, the value will be set to zero.</li>
+ <li>A set of integer values for year, month, and day. For example, <code>var Xmas95 = new Date(1995, 11, 25)</code>.</li>
+ <li>A set of integer values for year, month, day, hour, minute, and seconds. For example, <code>var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);</code>.</li>
+</ul>
+
+<p><strong>JavaScript 1.2 and earlier</strong><br>
+ The <code>Date</code> object behaves as follows:</p>
+
+<ul>
+ <li>Dates prior to 1970 are not allowed.</li>
+ <li>JavaScript depends on platform-specific date facilities and behavior; the behavior of the <code>Date</code> object varies from platform to platform.</li>
+</ul>
+
+<h3 id="Methods_of_the_Date_Object">Methods of the Date Object</h3>
+
+<p>The <code>Date</code> object methods for handling dates and times fall into these broad categories:</p>
+
+<ul>
+ <li>"set" methods, for setting date and time values in <code>Date</code> objects.</li>
+ <li>"get" methods, for getting date and time values from <code>Date</code> objects.</li>
+ <li>"to" methods, for returning string values from <code>Date</code> objects.</li>
+ <li>parse and UTC methods, for parsing <code>Date</code> strings.</li>
+</ul>
+
+<p>With the "get" and "set" methods you can get and set seconds, minutes, hours, day of the month, day of the week, months, and years separately. There is a <code>getDay</code> method that returns the day of the week, but no corresponding <code>setDay</code> method, because the day of the week is set automatically. These methods use integers to represent these values as follows:</p>
+
+<ul>
+ <li>Seconds and minutes: 0 to 59</li>
+ <li>Hours: 0 to 23</li>
+ <li>Day: 0 (Sunday) to 6 (Saturday)</li>
+ <li>Date: 1 to 31 (day of the month)</li>
+ <li>Months: 0 (January) to 11 (December)</li>
+ <li>Year: years since 1900</li>
+</ul>
+
+<p>For example, suppose you define the following date:</p>
+
+<pre class="brush: js">var Xmas95 = new Date("December 25, 1995");
+</pre>
+
+<p>Then <code>Xmas95.getMonth()</code> returns 11, and <code>Xmas95.getFullYear()</code> returns 1995.</p>
+
+<p>The <code>getTime</code> and <code>setTime</code> methods are useful for comparing dates. The <code>getTime</code> method returns the number of milliseconds since January 1, 1970, 00:00:00 for a <code>Date</code> object.</p>
+
+<p>For example, the following code displays the number of days left in the current year:</p>
+
+<pre class="brush: js">var today = new Date();
+var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Set day and month
+endYear.setFullYear(today.getFullYear()); // Set year to this year
+var msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
+var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
+var daysLeft = Math.round(daysLeft); //returns days left in the year
+</pre>
+
+<p>This example creates a <code>Date</code> object named <code>today</code> that contains today's date. It then creates a <code>Date</code> object named <code>endYear</code> and sets the year to the current year. Then, using the number of milliseconds per day, it computes the number of days between <code>today</code> and <code>endYear</code>, using <code>getTime</code> and rounding to a whole number of days.</p>
+
+<p>The <code>parse</code> method is useful for assigning values from date strings to existing <code>Date</code> objects. For example, the following code uses <code>parse</code> and <code>setTime</code> to assign a date value to the <code>IPOdate</code> object:</p>
+
+<pre class="brush: js">var IPOdate = new Date();
+IPOdate.setTime(Date.parse("Aug 9, 1995"));
+</pre>
+
+<h3 id="Using_the_Date_Object_an_Example">Using the Date Object: an Example</h3>
+
+<p>In the following example, the function <code>JSClock()</code> returns the time in the format of a digital clock.</p>
+
+<pre class="brush: js">function JSClock() {
+ var time = new Date();
+ var hour = time.getHours();
+ var minute = time.getMinutes();
+ var second = time.getSeconds();
+ var temp = "" + ((hour &gt; 12) ? hour - 12 : hour);
+ if (hour == 0)
+ temp = "12";
+ temp += ((minute &lt; 10) ? ":0" : ":") + minute;
+ temp += ((second &lt; 10) ? ":0" : ":") + second;
+ temp += (hour &gt;= 12) ? " P.M." : " A.M.";
+ return temp;
+}
+</pre>
+
+<p>The <code>JSClock</code> function first creates a new <code>Date</code> object called <code>time</code>; since no arguments are given, time is created with the current date and time. Then calls to the <code>getHours</code>, <code>getMinutes</code>, and <code>getSeconds</code> methods assign the value of the current hour, minute, and second to <code>hour</code>, <code>minute</code>, and <code>second</code>.</p>
+
+<p>The next four statements build a string value based on the time. The first statement creates a variable <code>temp</code>, assigning it a value using a conditional expression; if <code>hour</code> is greater than 12, (<code>hour - 12</code>), otherwise simply hour, unless hour is 0, in which case it becomes 12.</p>
+
+<p>The next statement appends a <code>minute</code> value to <code>temp</code>. If the value of <code>minute</code> is less than 10, the conditional expression adds a string with a preceding zero; otherwise it adds a string with a demarcating colon. Then a statement appends a seconds value to <code>temp</code> in the same way.</p>
+
+<p>Finally, a conditional expression appends "P.M." to <code>temp</code> if <code>hour</code> is 12 or greater; otherwise, it appends "A.M." to <code>temp</code>.</p>
+
+<h2 id="Function_Object">Function Object</h2>
+
+<p>The predefined <code>Function</code> object specifies a string of JavaScript code to be compiled as a function.</p>
+
+<p>To create a <code>Function</code> object:</p>
+
+<pre class="brush: js">var functionObjectName = new Function ([arg1, arg2, ... argn], functionBody);
+</pre>
+
+<p><code>functionObjectName</code> is the name of a variable or a property of an existing object. It can also be an object followed by a lowercase event handler name, such as <code>window.onerror</code>.</p>
+
+<p><code>arg1</code>, <code>arg2</code>, ... <code>argn</code> are arguments to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier; for example "x" or "theForm".</p>
+
+<p><code>functionBody</code> is a string specifying the JavaScript code to be compiled as the function body.</p>
+
+<p><code>Function</code> objects are evaluated each time they are used. This is less efficient than declaring a function and calling it within your code, because declared functions are compiled.</p>
+
+<p>In addition to defining functions as described here, you can also use the <a href="/en-US/docs/JavaScript/Reference/Statements/function" title="en-US/docs/JavaScript/Reference/Statements/function"><code>function</code> statement</a> and the function expression. See the <a href="/en-US/docs/JavaScript/Reference" title="en-US/docs/JavaScript/Reference">JavaScript Reference</a> for more information.</p>
+
+<p>The following code assigns a function to the variable <code>setBGColor</code>. This function sets the current document's background color.</p>
+
+<pre class="brush: js">var setBGColor = new Function("document.bgColor = 'antiquewhite'");
+</pre>
+
+<p>To call the <code>Function</code> object, you can specify the variable name as if it were a function. The following code executes the function specified by the <code>setBGColor</code> variable:</p>
+
+<pre class="brush: js">var colorChoice="antiquewhite";
+if (colorChoice=="antiquewhite") {setBGColor()}
+</pre>
+
+<p>You can assign the function to an event handler in either of the following ways:</p>
+
+<ol>
+ <li>
+ <pre class="brush: js">document.form1.colorButton.onclick = setBGColor;
+</pre>
+ </li>
+ <li>
+ <pre class="brush: html">&lt;INPUT NAME="colorButton" TYPE="button"
+ VALUE="Change background color"
+ onClick="setBGColor()"&gt;
+</pre>
+ </li>
+</ol>
+
+<p>Creating the variable <code>setBGColor</code> shown above is similar to declaring the following function:</p>
+
+<pre class="brush: js">function setBGColor() {
+ document.bgColor = 'antiquewhite';
+}
+</pre>
+
+<p>Assigning a function to a variable is similar to declaring a function, but there are differences:</p>
+
+<ul>
+ <li>When you assign a function to a variable using <code>var setBGColor = new Function("...")</code>, <code>setBGColor</code> is a variable for which the current value is a reference to the function created with <code>new Function()</code>.</li>
+ <li>When you create a function using <code>function setBGColor() {...}</code>, <code>setBGColor</code> is not a variable, it is the name of a function.</li>
+</ul>
+
+<p>You can nest a function within a function. The nested (inner) function is private to its containing (outer) function:</p>
+
+<ul>
+ <li>The inner function can be accessed only from statements in the outer function.</li>
+ <li>The inner function can use the arguments and variables of the outer function. The outer function cannot use the arguments and variables of the inner function.</li>
+</ul>
+
+<h2 id="Math_Object">Math Object</h2>
+
+<p>The predefined <code>Math</code> object has properties and methods for mathematical constants and functions. For example, the <code>Math</code> object's <code>PI</code> property has the value of pi (3.141...), which you would use in an application as</p>
+
+<pre class="brush: js">Math.PI
+</pre>
+
+<p>Similarly, standard mathematical functions are methods of <code>Math</code>. These include trigonometric, logarithmic, exponential, and other functions. For example, if you want to use the trigonometric function sine, you would write</p>
+
+<pre class="brush: js">Math.sin(1.56)
+</pre>
+
+<p>Note that all trigonometric methods of <code>Math</code> take arguments in radians.</p>
+
+<p>The following table summarizes the <code>Math</code> object's methods.</p>
+
+<table class="standard-table">
+ <caption>Table 7.1 Methods of Math</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>abs</code></td>
+ <td>Absolute value</td>
+ </tr>
+ <tr>
+ <td><code>sin</code>, <code>cos</code>, <code>tan</code></td>
+ <td>Standard trigonometric functions; argument in radians</td>
+ </tr>
+ <tr>
+ <td><code>acos</code>, <code>asin</code>, <code>atan</code>, <code>atan2</code></td>
+ <td>Inverse trigonometric functions; return values in radians</td>
+ </tr>
+ <tr>
+ <td><code>exp</code>, <code>log</code></td>
+ <td>Exponential and natural logarithm, base <code>e</code></td>
+ </tr>
+ <tr>
+ <td><code>ceil</code></td>
+ <td>Returns least integer greater than or equal to argument</td>
+ </tr>
+ <tr>
+ <td><code>floor</code></td>
+ <td>Returns greatest integer less than or equal to argument</td>
+ </tr>
+ <tr>
+ <td><code>min</code>, <code>max</code></td>
+ <td>Returns greater or lesser (respectively) of two arguments</td>
+ </tr>
+ <tr>
+ <td><code>pow</code></td>
+ <td>Exponential; first argument is base, second is exponent</td>
+ </tr>
+ <tr>
+ <td><code>random</code></td>
+ <td>Returns a random number between 0 and 1.</td>
+ </tr>
+ <tr>
+ <td><code>round</code></td>
+ <td>Rounds argument to nearest integer</td>
+ </tr>
+ <tr>
+ <td><code>sqrt</code></td>
+ <td>Square root</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Unlike many other objects, you never create a <code>Math</code> object of your own. You always use the predefined <code>Math</code> object.</p>
+
+<h2 id="Number_Object">Number Object</h2>
+
+<p>The <code>Number</code> object has properties for numerical constants, such as maximum value, not-a-number, and infinity. You cannot change the values of these properties and you use them as follows:</p>
+
+<pre class="brush: js">var biggestNum = Number.MAX_VALUE;
+var smallestNum = Number.MIN_VALUE;
+var infiniteNum = Number.POSITIVE_INFINITY;
+var negInfiniteNum = Number.NEGATIVE_INFINITY;
+var notANum = Number.NaN;
+</pre>
+
+<p>You always refer to a property of the predefined <code>Number</code> object as shown above, and not as a property of a <code>Number</code> object you create yourself.</p>
+
+<p>The following table summarizes the <code>Number</code> object's properties.</p>
+
+<table class="standard-table">
+ <caption>Table 7.2 Properties of Number</caption>
+ <thead>
+ <tr>
+ <th scope="col">Property</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>MAX_VALUE</code></td>
+ <td>The largest representable number</td>
+ </tr>
+ <tr>
+ <td><code>MIN_VALUE</code></td>
+ <td>The smallest representable number</td>
+ </tr>
+ <tr>
+ <td><code>NaN</code></td>
+ <td>Special "not a number" value</td>
+ </tr>
+ <tr>
+ <td><code>NEGATIVE_INFINITY</code></td>
+ <td>Special negative infinite value; returned on overflow</td>
+ </tr>
+ <tr>
+ <td><code>POSITIVE_INFINITY</code></td>
+ <td>Special positive infinite value; returned on overflow</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>The Number prototype provides methods for retrieving information from Number objects in various formats. The following table summarizes the methods of <code>Number.prototype</code>.</p>
+
+<table class="fullwidth-table">
+ <caption>Table 7.3 Methods of Number.prototype</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>toExponential</code></td>
+ <td>Returns a string representing the number in exponential notation.</td>
+ </tr>
+ <tr>
+ <td><code>toFixed</code></td>
+ <td>Returns a string representing the number in fixed-point notation.</td>
+ </tr>
+ <tr>
+ <td><code>toPrecision</code></td>
+ <td>Returns a string representing the number to a specified precision in fixed-point notation.</td>
+ </tr>
+ <tr>
+ <td><code>toSource</code></td>
+ <td>Returns an object literal representing the specified <code>Number</code> object; you can use this value to create a new object. Overrides the <code>Object.toSource</code> method.</td>
+ </tr>
+ <tr>
+ <td><code>toString</code></td>
+ <td>Returns a string representing the specified object. Overrides the <code>Object.toString </code>method.</td>
+ </tr>
+ <tr>
+ <td><code>valueOf</code></td>
+ <td>Returns the primitive value of the specified object. Overrides the <code>Object.valueOf </code>method.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="RegExp_Object">RegExp Object</h2>
+
+<p>The <code>RegExp</code> object lets you work with regular expressions. It is described in <a href="/en-US/docs/JavaScript/Guide/Regular_Expressions" title="en-US/docs/JavaScript/Guide/Regular Expressions">Regular Expressions</a>.</p>
+
+<h2 id="String_Object">String Object</h2>
+
+<p>The <code>String</code> object is a wrapper around the string primitive data type. Do not confuse a string literal with the <code>String</code> object. For example, the following code creates the string literal <code>s1</code> and also the <code>String</code> object <code>s2</code>:</p>
+
+<pre class="brush: js">var s1 = "foo"; //creates a string literal value
+var s2 = new String("foo"); //creates a String object
+</pre>
+
+<p>You can call any of the methods of the <code>String</code> object on a string literal value—JavaScript automatically converts the string literal to a temporary <code>String</code> object, calls the method, then discards the temporary <code>String</code> object. You can also use the <code>String.length</code> property with a string literal.</p>
+
+<p>You should use string literals unless you specifically need to use a <code>String</code> object, because <code>String</code> objects can have counterintuitive behavior. For example:</p>
+
+<pre class="brush: js">var s1 = "2 + 2"; //creates a string literal value
+var s2 = new String("2 + 2"); //creates a String object
+eval(s1); //returns the number 4
+eval(s2); //returns the string "2 + 2"</pre>
+
+<p>A <code>String</code> object has one property, <code>length</code>, that indicates the number of characters in the string. For example, the following code assigns <code>x</code> the value 13, because "Hello, World!" has 13 characters:</p>
+
+<pre class="brush: js">var mystring = "Hello, World!";
+var x = mystring.length;
+</pre>
+
+<p>A <code>String</code> object has two types of methods: those that return a variation on the string itself, such as <code>substring</code> and <code>toUpperCase</code>, and those that return an HTML-formatted version of the string, such as <code>bold</code> and <code>link</code>.</p>
+
+<p>For example, using the previous example, both <code>mystring.toUpperCase()</code> and <code>"hello, world!".toUpperCase()</code> return the string "HELLO, WORLD!"</p>
+
+<p>The <code>substring</code> method takes two arguments and returns a subset of the string between the two arguments. Using the previous example, <code>mystring.substring(4, 9)</code> returns the string "o, Wo". See the <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/substring" title="en-US/docs/JavaScript/Reference/Global Objects/String/substring"><code>substring</code></a> method of the <code>String</code> object in the JavaScript Reference for more information.</p>
+
+<p>The <code>String</code> object also has a number of methods for automatic HTML formatting, such as <code>bold</code> to create boldface text and <code>link</code> to create a hyperlink. For example, you could create a hyperlink to a hypothetical URL with the <code>link</code> method as follows:</p>
+
+<pre class="brush: js">mystring.link("http://www.helloworld.com")
+</pre>
+
+<p>The following table summarizes the methods of <code>String</code> objects.</p>
+
+<table class="fullwidth-table">
+ <caption>Table 7.4 Methods of String Instances</caption>
+ <thead>
+ <tr>
+ <th scope="col">Method</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/anchor" title="en-US/docs/JavaScript/Reference/Global_Objects/String/anchor">anchor</a></code></td>
+ <td>Creates HTML named anchor.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/big" title="en-US/docs/JavaScript/Reference/Global_Objects/String/big">big</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/blink" title="en-US/docs/JavaScript/Reference/Global_Objects/String/blink">blink</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/bold" title="en-US/docs/JavaScript/Reference/Global_Objects/String/bold">bold</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/fixed" title="en-US/docs/JavaScript/Reference/Global_Objects/String/fixed">fixed</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/italics" title="en-US/docs/JavaScript/Reference/Global_Objects/String/italics">italics</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/small" title="en-US/docs/JavaScript/Reference/Global_Objects/String/small">small</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/strike" title="en-US/docs/JavaScript/Reference/Global_Objects/String/strike">strike</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/sub" title="en-US/docs/JavaScript/Reference/Global_Objects/String/sub">sub</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/sup" title="en-US/docs/JavaScript/Reference/Global_Objects/String/sup">sup</a></code></td>
+ <td>Create HTML formatted string.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/charAt" title="en-US/docs/JavaScript/Reference/Global_Objects/String/charAt">charAt</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt" title="en-US/docs/JavaScript/Reference/Global_Objects/String/charCodeAt">charCodeAt</a></code></td>
+ <td>Return the character or character code at the specified position in string.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf" title="en-US/docs/JavaScript/Reference/Global_Objects/String/indexOf">indexOf</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf" title="en-US/docs/JavaScript/Reference/Global_Objects/String/lastIndexOf">lastIndexOf</a></code></td>
+ <td>Return the position of specified substring in the string or last position of specified substring, respectively.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/link" title="en-US/docs/JavaScript/Reference/Global_Objects/String/link">link</a></code></td>
+ <td>Creates HTML hyperlink.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/concat" title="en-US/docs/JavaScript/Reference/Global_Objects/String/concat">concat</a></code></td>
+ <td>Combines the text of two strings and returns a new string.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode" title="en-US/docs/JavaScript/Reference/Global_Objects/String/fromCharCode">fromCharCode</a></code></td>
+ <td>Constructs a string from the specified sequence of Unicode values. This is a method of the String class, not a String instance.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/split" title="en-US/docs/JavaScript/Reference/Global_Objects/String/split">split</a></code></td>
+ <td>Splits a <code>String</code> object into an array of strings by separating the string into substrings.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/slice" title="en-US/docs/JavaScript/Reference/Global_Objects/String/slice">slice</a></code></td>
+ <td>Extracts a section of an string and returns a new string.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/substring" title="en-US/docs/JavaScript/Reference/Global_Objects/String/substring">substring</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/substr" title="en-US/docs/JavaScript/Reference/Global_Objects/String/substr">substr</a></code></td>
+ <td>Return the specified subset of the string, either by specifying the start and end indexes or the start index and a length.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/match" title="en-US/docs/JavaScript/Reference/Global_Objects/String/match">match</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/replace" title="en-US/docs/JavaScript/Reference/Global_Objects/String/replace">replace</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/search" title="en-US/docs/JavaScript/Reference/Global_Objects/String/search">search</a></code></td>
+ <td>Work with regular expressions.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/toLowerCase" title="en-US/docs/JavaScript/Reference/Global_Objects/String/toLowerCase">toLowerCase</a></code>, <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/toUpperCase" title="en-US/docs/JavaScript/Reference/Global_Objects/String/toUpperCase">toUpperCase</a></code></td>
+ <td>
+ <p>Return the string in all lowercase or all uppercase, respectively.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>autoPreviousNext("JSGChapters")</p>
diff --git a/files/ru/web/javascript/guide/regular_expressions/assertions/index.html b/files/ru/web/javascript/guide/regular_expressions/assertions/index.html
new file mode 100644
index 0000000000..2d04ed19aa
--- /dev/null
+++ b/files/ru/web/javascript/guide/regular_expressions/assertions/index.html
@@ -0,0 +1,60 @@
+---
+title: Assertions
+slug: Web/JavaScript/Guide/Regular_Expressions/Assertions
+translation_of: Web/JavaScript/Guide/Regular_Expressions/Assertions
+---
+<p>{{jsSidebar("JavaScript Guide")}}{{draft}}</p>
+
+<p>Проверка (assertion) задает возможность совпадения одним из указанных способов. Проверка может содержать условные выражения, опережающие (look-ahead) и ретроспективные (look-behind) проверки.</p>
+
+<h2 id="Типы">Типы</h2>
+
+<div class="blockIndicator note">
+<p>Символ <code>?</code> также может быть использован как обычный квантификатор.</p>
+</div>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Выражение</th>
+ <th scope="col">Что означает</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>x(?=y)</td>
+ <td>
+ <p><strong>Опережающая проверка: </strong><code><em>x</em></code> подходит только когда за <code><em>x</em></code> следует <code><em>y</em></code>. Например, /<code>Jack(?=Sprat)/</code> сработает для "Jack"  только когда за ним будет "Sprat".<br>
+ <code>/Jack(?=Sprat|Frost)/</code> подойдет для "Jack" только когда за ним будет "Sprat" или "Frost". Следует заметить, что ни "Sprat" ни "Frost" не будут выданы как часть проверки.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>x(?!y)</td>
+ <td>
+ <p><strong>Отрицательная опережающая проверка: </strong><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> подходит только когда за </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> не следует </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>y</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;">.</span> Например, <code style="font-size: 1rem; letter-spacing: -0.00278rem;">/\d+(?!\.)/</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> сработает для числа в том случае, если за ним не стоит точка. Выполнение кода </span><code>/\d+(?!\.)/.exec('3.141')</code> выдаст только число "141", поскольку за "3" следует точка.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>(?&lt;=y)x</td>
+ <td>
+ <p><strong>Ретроспективная проверка: </strong><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> подходит только когда </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> предшествует </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>y</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;">.</span> Например, <code style="font-size: 1rem; letter-spacing: -0.00278rem;">/(?&lt;=Jack)Sprat/</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> сработает для "Sprat" только если перед ним есть "Jack". </span><code>/(?&lt;=Jack|Tom)Sprat/</code> подойдет для "Sprat" если перед ним будут "Jack" или "Tom". Заметим, что ни "Jack" ни "Tom" не будут выданы.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>(?&lt;!y)x</td>
+ <td>
+ <p><strong>Отрицательная ретроспективная проверка: </strong><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> подходит только когда </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>x</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> не предшествует </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;"><em>y</em></code><span style="font-size: 1rem; letter-spacing: -0.00278rem;">.</span> Например, <code style="font-size: 1rem; letter-spacing: -0.00278rem;">/(?&lt;!-)\d+/</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> сработает для числа в том случае, если перед ним не стоит знак минус. Выполнение кода </span><code>/(?&lt;!-)\d+/.exec('3')</code> выдаст "3". Код <code>/(?&lt;!-)\d+/.exec('-3')</code> ничего не найдет, т.к. перед числом есть знак минус.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Examples">Examples</h2>
+
+<p> </p>
+
+<h2 id="Browser_support">Browser support</h2>
+
+<p> </p>
+
+<h2 id="See_also">See also</h2>
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
new file mode 100644
index 0000000000..08aa94b4c5
--- /dev/null
+++ b/files/ru/web/javascript/guide/regular_expressions/character_classes/index.html
@@ -0,0 +1,221 @@
+---
+title: Классы символов
+slug: Web/JavaScript/Guide/Regular_Expressions/Character_Classes
+tags:
+ - Guide
+ - JavaScript
+ - Reference
+ - RegExp
+ - Regular Expression
+ - character classes
+translation_of: Web/JavaScript/Guide/Regular_Expressions/Character_Classes
+---
+<p>{{JSSidebar("JavaScript Guide")}}</p>
+
+<p>Классы символов позволяют различать виды символов, к примеру, как различия между буквами и цифрами.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/regexp-character-classes.html")}}</div>
+
+<h2 id="Типы">Типы</h2>
+
+<div class="hidden">The following table is also duplicated on <a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Cheatsheet">this cheatsheet</a>. Do not forget to edit it as well, thanks!</div>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Символ</th>
+ <th scope="col">Значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ </tbody>
+ <tbody>
+ <tr>
+ <td><code>.</code></td>
+ <td>
+ <p>Точка имеет одно из следеющих смыслов:</p>
+
+ <ul>
+ <li>Сопадение с любым одним символом <em>за исключение</em> символовов завершения строки: <code>\n</code>, <code>\r</code>, <code>\u2028</code> or <code>\u2029</code>. Например, <code>/.y/</code> совпадает "my" с "ay", и не совпадает с "yes" и "yes make my day".</li>
+ <li>В набор символов, точка теряет свой специальный смысл и совпадает с литеральным символом точка.</li>
+ </ul>
+
+ <p>Замечание. <code>m</code> флаг посика по множеству строк не меняет поведения точки. Чтобы найти воспадения во многострочном поиске можно использвать набор символов <code>[^]</code> — он сопадёт с любым символом включая символы заверешния строки.</p>
+
+ <p>В ES2018 добавили <code>s</code> "dotAll" флаг, который ползволяет точке <code>(.</code>) находить все символы включая симполвы переноса строк.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\d</code></td>
+ <td>
+ <p>Совпадет с любой цифрой (арабский числа). Эквивалентно  <code>[0-9]</code>. Например, <code>/\d/</code> или <code>/[0-9]/</code> находит "2" в "B2 is the suite number"..</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\D</code></td>
+ <td>
+ <p>Совпадет с любым символом, который не является цифрой (арабский числа). Эквивалентно <code>[^0-9]</code>. Например, <code>/\D/</code> or <code>/[^0-9]/</code> находит "B" в "B2 is the suite number".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\w</code></td>
+ <td>
+ <p>Совпадет с любой бувенно-числовым симпволом из базового латинского алфавита включая нижнее подчёркивание.  Эквивалентно <code>[A-Za-z0-9_]</code>. Например, <code>/\w/</code> находит "a" в "apple", "5" в "$5.28", "3" в "3D" и "m" в "Émanuel".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\W</code></td>
+ <td>
+ <p>Совпадет с любой бувенно-числовым, которое не является симпволом базового латинского алфавита, так же исключая нижнее подчёркивание.  Эквивалентно <code>[^A-Za-z0-9_]</code>. Например, <code>/\W/</code> или <code>/[^A-Za-z0-9_]/</code> находит "%" в "50%" и "É" in "Émanuel".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\s</code></td>
+ <td>
+ <p>Совпадет с любым пробельным символом, включая пробел, символ табуляции, символ подачи странцы, символ подачи строки и другие Unicode пробелы. Эквивалентно <code>[ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>. Например, <code>/\s\w*/</code> находит " bar" в "foo bar".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\S</code></td>
+ <td>
+ <p>Совпадет с любым симвовом, не являяющимся проблельным. Эквивалентно <code>[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>. Например, <code>/\S\w*/</code> находит "foo" в "foo bar".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td>Совпадет с символом горизонтальной табуляции.</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td>Совпадет с символом возврата каретки.</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td>Совпадет с символом подачи строки.</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td>Совпадет с символом вертикальной табуляции</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td>Совпадет с символом подачи страницы (формы).</td>
+ </tr>
+ <tr>
+ <td><code>[\b]</code></td>
+ <td>Совпадет с символом возарат назад (англ. backspace). Если вы ищите символ границы слова (<code>\b</code>), смотри <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Boundaries">Границы</a>.</td>
+ </tr>
+ <tr>
+ <td><code>\0</code></td>
+ <td>Совпадет с символом NUL character. Не используйте другую цифру.</td>
+ </tr>
+ <tr>
+ <td><code>\c<em>X</em></code></td>
+ <td>
+ <p>Совпадет с котрольным символом using <a href="https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%80%D0%B5%D1%82%D0%BD%D0%B0%D1%8F_%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F">каретную нотацию</a>, где "X" быква A–Z (соответствует кодам <code>U+0001</code><em>–</em><code>U+001F</code>). For example, <code>/\cM/</code> matches "\r" in "\r\n".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\x<em>hh</em></code></td>
+ <td>Совпадет с символом, код которого <code><em>hh</em></code> (две шестнадцатеричных цифры).</td>
+ </tr>
+ <tr>
+ <td><code>\u<em>hhhh</em></code></td>
+ <td>Совпадет с код-блоком UTF-16 со значением <code><em>hhhh</em></code> (четыре шестнадцатеричных цифры).</td>
+ </tr>
+ <tr>
+ <td><code>\u<em>{hhhh} </em>or <em>\u{hhhhh}</em></code></td>
+ <td>(Только когда установлен фла <code>u</code>.) Совпадет с Unicode символом со значением  <code>U+<em>hhhh</em></code> или <code>U+<em>hhhhh</em></code> (шестнадцатеричные цифры).</td>
+ </tr>
+ <tr>
+ <td><code>\</code></td>
+ <td>
+ <p>Определяет что последующий символ должен быть интерпретирован по особому или должен быть "экранирован. Это работает в двух вариантах:</p>
+
+ <ul>
+ <li>Для символов, которые относятся к литералам, последующий символ - это специальный символ, который не должен быть интерпретирован, как литерал. Например, <code>/b/</code> совпадает с символом "b". Установ обратного слэша перед "b". Таким образом <code>/\b/</code>. Будет означать символ границы слова. </li>
+ <li>Для символов, которые относятся к специальным, определяет что это не специальным символ, а должен быть интерепретирован, как литерал. Например, <code>*</code>  - это специальный символ, который означает 0 или любое другое совпадений предыдующего символа, Например <code>/a*/</code> совпадает с любым количестовм символов "a" идущих подряд (или 0 "a") <code>a, aaaa, aaaaaa</code>. Если специальный символ <code>*</code>, как литерал, то перед ним ставится обратных слэш. Например, <code>/a\*/</code> сопадает только с "a*".</li>
+ </ul>
+
+ <div class="blockIndicator note">
+ <p>Чтобы найти литеральное совпадение с этим символова (<code>\</code> , экранируйте его самим же. Другими словами для поиска <code>\</code> используйте <code>/\\/</code>.</p>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Плиск_серии_цифр">Плиск серии цифр</h3>
+
+<pre class="brush: js notranslate">var randomData = "015 354 8787 687351 3512 8735";
+var regexpFourDigits = /\b\d{4}\b/g;
+// \b определяет границу поиска (например, не начиает поиск с середины слова)
+// \d{4} определяет цифру, четыре раза
+// определяет другую границу поиска (например, не начиает поиск с середины слова)
+
+// Вывод всех числел имеющих только 4 цифры
+console.table(randomData.match(regexpFourDigits));
+// ['8787', '3512', '8735']
+</pre>
+
+<h3 id="Поиск_слов_латинский_алфавит_начинающих_с_A">Поиск слов  (латинский алфавит), начинающих с A</h3>
+
+<pre class="brush: js notranslate">var aliceExcerpt = "I’m sure I’m not Ada,’ she said, ‘for her hair goes in such long ringlets, and mine doesn’t go in ringlets at all.";
+var regexpWordStartingWithA = /\b[aA]\w+/g;
+// \b определяет границу поиска (например, не начиает поиск с середины слова)
+// [aA] определяет букву a или A
+// \b определяет границу поиска (например, не начиает поиск с середины слова)
+
+console.table(aliceExcerpt.match(regexpWordStartingWithA));
+// ['Ada', 'and', 'at', 'all']
+</pre>
+
+<h3 id="Поиски_слов_из_Unicode_символов">Поиски слов (из Unicode символов)</h3>
+
+<p>Вместо латинского алфавита, мы может использовать диапазаон Unicode символов для определения слова (благодаря этому мы можем работать с текстами написанным, например на русском или арабском языке or Arabic). Unicode содержит большинство символов используемых на планете, мы так же можем объединять их диапазоны и классы символов.</p>
+
+<pre class="brush: js notranslate">var nonEnglishText = "Приключения Алисы в Стране чудес";
+var regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
+// BMP goes through U+0000 to U+FFFF but space is U+0020
+
+console.table(nonEnglishText.match(regexpBMPWord));
+[ 'Приключения', 'Алисы', 'в', 'Стране', 'чудес' ]
+</pre>
+
+<div class="hidden">
+<p>Note for MDN editors: please do not try to add funny examples with emoji as those characters are not handled by the platform (Kuma).</p>
+</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-characterclass', 'RegExp: Character classes')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>Для информации о совместимости с браузерами, посмотрите <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions#Browser_compatibility">основную таблицу совместимости Regular Expressions</a>.</p>
+
+<h2 id="Смотрите_по_теме">Смотрите по теме</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">Руководство по Regular expressions</a>
+
+ <ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions/Assertions">Assertions</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions/Quantifiers">Quantifiers</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions/Unicode_Property_Escapes">Unicode property escapes</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions/Groups_and_Ranges">Groups and ranges</a></li>
+ </ul>
+ </li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp">Конструктор <code>RegExp()</code></a></li>
+</ul>
diff --git a/files/ru/web/javascript/guide/regular_expressions/index.html b/files/ru/web/javascript/guide/regular_expressions/index.html
new file mode 100644
index 0000000000..834df23a39
--- /dev/null
+++ b/files/ru/web/javascript/guide/regular_expressions/index.html
@@ -0,0 +1,659 @@
+---
+title: Регулярные выражения
+slug: Web/JavaScript/Guide/Regular_Expressions
+translation_of: Web/JavaScript/Guide/Regular_Expressions
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Text_formatting", "Web/JavaScript/Guide/Indexed_collections")}}</p>
+
+<p class="summary">Регулярные выражения - это шаблоны, используемые для сопоставления последовательностей символов в строках. В JavaScript регулярные выражения также являются объектами. Эти шаблоны используются в методах <a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec" title="exec"><code>exec</code></a> и <a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test" title="test"><code>test</code></a> объекта<a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp" title="RegExp"> <code>RegExp</code></a>, а также <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/match" title="match"><code>match</code></a>, <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/replace" title="en-US/docs/JavaScript/Reference/Global_Objects/String/replace"><code>replace</code></a>,<a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/search" title="search"> <code>search</code></a> и <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/split" title="split"><code>split</code></a> объекта <a href="/en-US/docs/JavaScript/Reference/Global_Objects/String" title="String"><code>String</code></a>. Данная глава описывает регулярные выражения в JavaScript.</p>
+
+<h2 id="Создание_регулярного_выражения">Создание регулярного выражения</h2>
+
+<p>Регулярное выражение можно создать двумя способами:</p>
+
+<ul>
+ <li>Используя литерал регулярного выражения, например:
+ <div style="margin-right: 270px;">
+ <pre class="brush: js notranslate">var re = /ab+c/;
+</pre>
+ </div>
+
+ <p>Литералы регулярных выражений вызывают предварительную компиляцию регулярного выражения при анализе скрипта. Если ваше регулярное выражение постоянно, то пользуйтесь им, чтобы увеличить производительность.</p>
+ </li>
+ <li>Вызывая функцию конструктор объекта <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp" title="en-US/docs/JavaScript/Reference/Global Objects/RegExp">RegExp</a></code>, например:
+ <div style="margin-right: 270px;">
+ <pre class="brush: js notranslate">var re = new RegExp("ab+c");
+</pre>
+ </div>
+
+ <p>Использование конструктора влечет за собой компиляцию регулярного выражения во время исполнения скрипта. Используйте данный способ, если знаете, что выражение будет изменяться или не знаете шаблон заранее. Например вы получаете его из стороннего источника, при пользовательском вводе.</p>
+ </li>
+</ul>
+
+<h2 id="Написание_шаблона_регулярного_выражения">Написание шаблона регулярного выражения</h2>
+
+<p>Шаблон регулярного выражения состоит из обычных символов, например <code>/abc/</code>, или комбинаций обычных и специальных символов, например <code>/ab*c/</code> или <code>/Chapter (\d+)\.\d*/</code>. Последний пример включает в себя скобки, которые используются как "запоминающий механизм". Соответствие этой части шаблона запоминается для дальнейшего использования, как описано в {{ web.link("#Использование_скобочных_выражений_для_нахождения_подстрок", "Использование совпадений подстрок заключённых в скобки") }}.</p>
+
+<h3 id="Использование_простых_шаблонов">Использование простых шаблонов</h3>
+
+<p>Простые шаблоны используются для нахождения прямого соответствия в тексте. Например, шаблон <code>/abc/</code> соответствует комбинации символов в строке  только когда символы 'abc' встречаются вместе и в том же порядке. Такое сопоставление произойдет в строке "Hi, do you know your abc's?" и "The latest airplane designs evolved from slabcraft." В обоих случаях сопоставление произойдет с подстрокой 'abc'. Сопоставление не произойдет в строке "Grab crab", потому что она не содержит подстроку 'abc'.</p>
+
+<h3 id="Использование_специальных_символов">Использование специальных символов</h3>
+
+<p>В случае когда поиск соответствия требует чего-то большего, чем прямое сопоставление, например нахождение последовательности символов 'b' или нахождение пробела, шаблон включает в себя специальные символы. Например, шаблон <code>/ab*c/</code> соответствует любой комбинации символов, в которой за 'a' следует ноль или более символов 'b' (<code>*</code> означает ноль или более вхождений предыдущего символа), за которыми сразу же следует символ 'c'. В строке "cbbabbbbcdebc," этому шаблону сопоставляется подстрока 'abbbbc'.</p>
+
+<p>В следующей таблице приводится полный список специальных символов регулярных выражений с их описаниями.</p>
+
+<table class="fullwidth-table">
+ <caption>Таблица 4.1 Специальные символы в регулярных выражения.</caption>
+ <thead>
+ <tr>
+ <th scope="col">Символ</th>
+ <th scope="col">Значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="#special-backslash" id="special-backslash" name="special-backslash"><code>\</code></a></td>
+ <td>Одно из следующего:
+ <ul>
+ <li>Для символов обычно обрабатываемых буквально, означает что следующий символ является специальным и не должен интерпретироваться буквально.</li>
+ <li style="list-style-type: none;">Например, <code>/b/ </code>сопоставляется символу 'b'. Добавляя слэш перед b, т.е используя <code>/\b/</code>, символ становится специальным символом, означающим границу слова.</li>
+ <li>Для символов обычно обрабатываемых особым образом означает, что следующий символ не является специальным и должен интерпретироваться буквально.</li>
+ <li style="list-style-type: none;">Например, <code>*</code> является специальным символом, сопоставляемым 0 или более повторений предыдущего символа; например, <code>/a*/</code> означает соответствие 0 или более символов а. Для буквальной интерпретации *, поставьте перед ней обратный слэш; например, <code>/a\*/</code> соответствует 'a*'.</li>
+ <li style="list-style-type: none;">Также не забудьте заэкранировать сам \ при его использовании в записи new RegExp("pattern") поскольку \ также является экранирующим символом в обычных строках.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-caret" id="special-caret" name="special-caret"><code>^</code></a></td>
+ <td>
+ <p>Соответствует началу ввода. Если установлен флаг многострочности, также производит сопоставление непосредственно после переноса строки.</p>
+
+ <p>Например, <code>/^A/</code> не соответствует 'A' в "an A", но соответствует 'A' в "An E".</p>
+
+ <p><br>
+ Этот символ имеет другое значение при появлении в начале шаблона набора символов.</p>
+
+ <p>Например, <code>/[^a-z\s]/</code> соответствует 'I' в "I have 3 sisters".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-dollar" id="special-dollar" name="special-dollar"><code>$</code></a></td>
+ <td>
+ <p>Соответствует концу ввода. Если установлен битовый флаг многострочности, также сопоставляется содержимому до переноса строки.</p>
+
+ <p>Например, <code>/t$/</code> не соответствует 't' в строке "eater", но соответствует строке "eat".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-asterisk" id="special-asterisk" name="special-asterisk"><code>*</code></a></td>
+ <td>
+ <p>Соответствует предыдущему символу повторенному 0 или более раз. Эквивалентно {0,}.</p>
+
+ <p>Например, <code>/bo*/</code> соответствует 'boooo' в "A ghost booooed" и 'b' в "A bird warbled", но не в "A goat grunted".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-plus" id="special-plus" name="special-plus"><code>+</code></a></td>
+ <td>
+ <p>Соответствует предыдущему символу повторенному 1 или более раз. Эквивалентно {1,}.</p>
+
+ <p>Например, <code>/a+/</code> соответствует 'a' в "candy" и всем символам 'a' в "caaaaaaandy".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-questionmark" id="special-questionmark" name="special-questionmark"><code>?</code></a></td>
+ <td>Соответствует предыдущему символу повторенному
+ <p> 0 или 1 раз. Эквивалентно {0,1}.</p>
+
+ <p>Например, <code>/e?le?/</code> соответствует 'el' в "angel" и 'le' в "angle" а также 'l' в "oslo".</p>
+
+ <p>Если использован сразу после квалификаторов <code>*</code>, <code>+</code>, <code>?</code>, или <code>{}</code>, делает квалификатор "нежадным" (соответствующим минимальному количеству символов), в отличие от режима по умолчанию, являющимся "жадным" (соответствующим максимальному числу символов). Например, используя /\d+/ не глобальное сопоставление "123abc" возвращает "123", если использовать /\d+?/, только "1" будет возвращена.</p>
+
+ <p>Также используется в упреждающих утверждениях (assertions), описанных в строках x(?=y) и x(?!y) данной таблицы.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-dot" id="special-dot" name="special-dot"><code>.</code></a></td>
+ <td>
+ <p>(десятичная точка) соответствует любому символу кроме переноса строки.</p>
+
+ <p>Например, <code>/.n/</code> соответствует 'an' и 'on' в "nay, an apple is on the tree", но не 'nay'.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-capturing-parentheses" id="special-capturing-parentheses" name="special-capturing-parentheses"><code>(x)</code></a></td>
+ <td>
+ <p>Соответствует 'x' и запоминает это соответствие. Это называется захватывающие скобки.</p>
+
+ <p>Например, <code>/(foo)/</code> соответствует 'foo' в "foo bar." Сопоставленная строка может быть получена из элементов результирующего массива <code>[1]</code>, ..., <code>[n]</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-non-capturing-parentheses" id="special-non-capturing-parentheses" name="special-non-capturing-parentheses"><code>(?:x)</code></a></td>
+ <td>Соответствует 'x' но не запоминает соответствие. Это называется не-захватывающие скобки. Сопоставленная строка не может быть получена из элементов результирующего массива <code style="font-size: 14px; color: rgb(51, 51, 51);">[1]</code>, ..., <code style="font-size: 14px; color: rgb(51, 51, 51);">[n]</code>.</td>
+ </tr>
+ <tr>
+ <td><a href="#special-lookahead" id="special-lookahead" name="special-lookahead"><code>x(?=y)</code></a></td>
+ <td>
+ <p>Соответствует 'x' только если за 'x' следует 'y'. Это называется упреждение.</p>
+
+ <p>Например, <code>/Jack(?=Sprat)/</code> соответствует 'Jack' только если за ним следует 'Sprat'. <code>/Jack(?=Sprat|Frost)/</code> соответствует 'Jack' только если за ним следует 'Sprat' или 'Frost'. Тем не менее, ни 'Sprat' ни 'Frost' не являются частью сопоставленного результата.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-negated-look-ahead" id="special-negated-look-ahead" name="special-negated-look-ahead"><code>x(?!y)</code></a></td>
+ <td>
+ <p>Соответствует 'x' только если за 'x' не следует 'y'. Это называется отрицательное упреждение.</p>
+
+ <p>Например, <code>/\d+(?!\.)/</code> соответствует числу только если за ним не следует десятичная точка. Регулярное выражение <code>/\d+(?!\.)/.exec("3.141")</code> сопоставит '141' но не '3.141'.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-or" id="special-or" name="special-or"><code>x|y</code></a></td>
+ <td>
+ <p>Соответствует либо 'x' либо 'y'.</p>
+
+ <p>Например, <code>/green|red/</code> соответствует 'green' в "green apple" и 'red' в "red apple."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-quantifier" id="special-quantifier" name="special-quantifier"><code>{n}</code></a></td>
+ <td>
+ <p>n - положительное целое. Соответствует ровно <code>n</code> вхождениям предыдущего символа.</p>
+
+ <p>Например, <code>/a{2}/</code> не соответствует 'a' в "candy," но соответствует всем а в "caandy," первым двум а в "caaandy."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-quantifier-range" id="special-quantifier-range" name="special-quantifier-range"><code>{n,m}</code></a></td>
+ <td>
+ <p>m и n - положительные целые. Соответствует как минимум <code>n</code> и максимум <code>m</code> вхождениям предыдущего символа. При m=n=1 пропускается.</p>
+
+ <p>Например, <code>/a{1,3}/</code> ничему не соответствует в строке "cndy", символу 'a' в "candy," двум а в "caandy," и трем первым а в "caaaaaaandy". Отметим, что при сопоставлении "caaaaaaandy", совпадает "aaa", хотя изначальная строка содержит больше а.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-character-set" id="special-character-set" name="special-character-set"><code>[xyz]</code></a></td>
+ <td>
+ <p>Набор символов. Соответствует любому символу из перечисленных. Можно указать диапазон символов, используя тире. Специальные символы (как точка (<code>.</code>) и звездочка (<code>*</code>)) не имеют специального значения внутри такого набора. Их не надо экранировать. Экранирование работает также.</p>
+
+ <p>Например, <code>[abcd]</code> эквивалентна <span style="font-family: monospace;">[</span><code>a-d]</code>. Они соответствуют 'b' в "brisket" и 'c' в "city". <code>/[a-z.]+/</code> и <code>/[\w.]+/</code> обе соответствуют всему в "test.i.ng".</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-negated-character-set" id="special-negated-character-set" name="special-negated-character-set"><code>[^xyz]</code></a></td>
+ <td>
+ <p>Инвертированный или дополняющий набор символов. Это означает соответствие всему, что не в скобках. Можно указать диапазон символов с помощью тире. Все, что действует в обычном наборе символов, действует и здесь.</p>
+
+ <p>Например, <code>[^abc]</code> эквивалентно <code>[^a-c]</code>. Они соответствуют изначально 'r' в "brisket" и 'h' в "chop."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-backspace" id="special-backspace" name="special-backspace"><code>[\b]</code></a></td>
+ <td>Соответствует бэкспейсу (U+0008). (Не путать с <code>\b</code>.)</td>
+ </tr>
+ <tr>
+ <td><a href="#special-word-boundary" id="special-word-boundary" name="special-word-boundary"><code>\b</code></a></td>
+ <td>
+ <p>Соответствует границе слова. Граница слова соответствует позиции, где за символом слова не следует другой символ слова или предшествует ему. Отметим, что граница слова не включается в соответствие. Другими словами, длина сопоставленной границы слова равна нулю. (Не путать с <code>[\b]</code>.)</p>
+
+ <p>Примеры:<br>
+ <code>/\bmoo/</code> соответствует 'moo' в слове "moon" ;<br>
+ <code>/oo\b/</code> не соответствует 'oo' в слове "moon", поскольку за 'oo' следует символ 'n' , являющимся символом слова;<br>
+ <code>/oon\b/</code> соответствует 'oon' в слове "moon", поскольку 'oon' является окончанием строки, и таким образом, за этими символами не следует другой символ слова;<br>
+ <code>/\w\b\w/</code> никогда не будет ничему соответствовать, поскольку за символом слова никогда не может следовать и граница слова, и символ слова.</p>
+
+ <div class="note">
+ <p><strong>Note:</strong> JavaScript's regular expression engine defines a <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6">specific set of characters</a>to be "word" characters. Any character not in that set is considered a word break. This set of characters is fairly limited: it consists solely of the Roman alphabet in both upper- and lower-case, decimal digits, and the underscore character. Accented characters, such as "é" or "ü" are, unfortunately, treated as word breaks.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-non-word-boundary" id="special-non-word-boundary" name="special-non-word-boundary"><code>\B</code></a></td>
+ <td>
+ <p>Соответствует несловообразующей границе. Несловообразующая граница соответствует позиции, в которой предыдущий и следующий символы являются символами одного типа: либо оба должны быть словообразующими символами, либо несловообразующими. Начало и конец строки считаются несловообразующими символами. </p>
+
+ <p>Например, <code>/\B../</code> соответствует 'oo' в слове "noonday" (, а <code>/y\B./</code> соответствует 'ye' в "possibly yesterday."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-control" id="special-control" name="special-control"><code>\c<em>X</em></code></a></td>
+ <td>
+ <p>Где <em>X</em> является символом случайного выбора из последовательности от А до Я. Соответствует управляющему символу в строке.</p>
+
+ <p>Например, <code>/\cM/</code> соответствует control-M (U+000D) в строке.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-digit" id="special-digit" name="special-digit"><code>\d</code></a></td>
+ <td>
+ <p>Соответствует цифровому символу. Эквивалентно выражению <code>[0-9]</code>.</p>
+
+ <p>Например, <code>/\d/</code> or <code>/[0-9]/</code> соотвествует  '2' в "B2 is the suite number."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-non-digit" id="special-non-digit" name="special-non-digit"><code>\D</code></a></td>
+ <td>
+ <p>Соответствует любому нецифровому символу. Эквивалентно выражению <code>[^0-9]</code>.</p>
+
+ <p>Например, <code>/\D/</code> or <code>/[^0-9]/</code> соответствует 'B' в предложении "B2 is the suite number."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-form-feed" id="special-form-feed" name="special-form-feed"><code>\f</code></a></td>
+ <td>
+ <p>Соответствует символу прогона страницы (U+000C). Особый символ управления печатью.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-line-feed" id="special-line-feed" name="special-line-feed"><code>\n</code></a></td>
+ <td>Соответствует символу перевода строки (U+000A).</td>
+ </tr>
+ <tr>
+ <td><a href="#special-carriage-return" id="special-carriage-return" name="special-carriage-return"><code>\r</code></a></td>
+ <td>Соответствует символу возврата каретки (U+000D).</td>
+ </tr>
+ <tr>
+ <td><a href="#special-white-space" id="special-white-space" name="special-white-space"><code>\s</code></a></td>
+ <td>
+ <p>Соответствует одиночному символу пустого пространства, включая пробел, табуляция, прогон страницы, перевод строки. Эквивалентен <code>[ \f\n\r\t\v​\u00A0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u2028\u2029​\u202f\u205f​\u3000]</code>.</p>
+
+ <p>Например, <code>/\s\w*/</code> совпадает с ' bar' в "foo bar."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-non-white-space" id="special-non-white-space" name="special-non-white-space"><code>\S</code></a></td>
+ <td>
+ <p>Соответствует одиночному символу непустого пространства. Эквивалентен<code> [^ \f\n\r\t\v​\u00A0\u1680​\u180e\u2000-\u200a​​\u2028\u2029​\u202f\u205f​\u3000]</code>.</p>
+
+ <p>Например, <code>/\S\w*/</code> совпадает с 'foo' в "foo bar."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-tab" id="special-tab" name="special-tab"><code>\t</code></a></td>
+ <td>Соответствует символу горизонтальной табуляции (U+0009).</td>
+ </tr>
+ <tr>
+ <td><a href="#special-vertical-tab" id="special-vertical-tab" name="special-vertical-tab"><code>\v</code></a></td>
+ <td>Соответствует символу вертикальной табуляции (U+000B).</td>
+ </tr>
+ <tr>
+ <td><a href="#special-word" id="special-word" name="special-word"><code>\w</code></a></td>
+ <td>
+ <p>Соответствует любому цифробуквенному символу включая нижнее подчеркивание. Эквивалентен <code>[A-Za-z0-9_]</code>.</p>
+
+ <p>Например, <code>/\w/</code> совпадает с 'a' в "apple," '5' в "$5.28," и '3' в "3D."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-non-word" id="special-non-word" name="special-non-word"><code>\W</code></a></td>
+ <td>
+ <p>Соответствует любому не цифробуквенному символу. Равносилен<code> [^A-Za-z0-9_]</code>.</p>
+
+ <p>Например, <code>/\W/</code> or <code>/[^A-Za-z0-9_]/</code> совпадает с '%' в "50%."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-backreference" id="special-backreference" name="special-backreference"><code>\<em>n</em></code></a></td>
+ <td>
+ <p>Где <em>n</em> это положительное целое, обратная ссылка на последнюю найденную подстроку, соответствующую <em>n</em> , заключенную в круглые скобки в регуляном выражении (считая левые скобки).</p>
+
+ <p>Например, <code>/apple(,)\sorange\1/</code> соответствует 'apple, orange,' в "apple, orange, cherry, peach."</p>
+ </td>
+ </tr>
+ <tr>
+ <td><a href="#special-null" id="special-null" name="special-null"><code>\0</code></a></td>
+ <td>Соответствует символу NULL (U+0000). Не следует ставить за ним другой цифровой символ, поскольку <code>\0&lt;digits&gt;</code> является восьмеричной экранирующей последовательностью.</td>
+ </tr>
+ <tr>
+ <td><a href="#special-hex-escape" id="special-hex-escape" name="special-hex-escape"><code>\xhh</code></a></td>
+ <td>Соответствует символам кода hh (две шестнадцатиричные цифры)</td>
+ </tr>
+ <tr>
+ <td><a href="#special-unicode-escape" id="special-unicode-escape" name="special-unicode-escape"><code>\uhhhh</code></a></td>
+ <td>Соответствует символам кода hhhh (четыре шестнадцатиричные цифры).</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Экранирование пользовательского ввода, соответствующего буквенной строке внутри регулярного выражения, может быть достигнуто простой заменой: </p>
+
+<pre class="brush: js notranslate"><code>function escapeRegExp(string){
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&amp;'); // $&amp; means the whole matched string
+}</code></pre>
+
+<h3 id="Использование_скобок">Использование скобок</h3>
+
+<p>Скобки вокруг любой части регулярного выражения означают что эта часть совпадаемой подстроки будет запомнена. Раз запомнена, подстрока может выбрана для использования как это описано в {{ web.link("#Using_Parenthesized_Substring_Matches", "Using Parenthesized Substring Matches") }}.</p>
+
+<p>Например, паттерн <code>/Chapter (\d+)\.\d*/</code> включает в себя дополнительные экранирующие и специальные символы и указывает на то, что часть шаблона должна быть запомнена. Он точно соответствует символам слова 'Chapter ', за которыми следует один или более цифровых символов (<code>\d</code> означает любой цифровой символ, а '<code>+'</code> означает 1 или более раз), за которым следует десятичная точка (сама по себе являющаяся специальным символом; предшествующий десятичной точке слэш ' \' означает, что паттерн должен искать литеральный символ '.'), после которой следует любой цифровой символ 0 или более раз ('<code>\d'</code> обозначает цифровой символ, '<code>*'</code> обозначает 0 или более раз). Кроме того, круглые скобки используются для запоминания первых же совпавших цифровых символов. </p>
+
+<p>Этот шаблон будет найден во фразе "Open Chapter 4.3, paragraph 6" и цифра '4' будет запомнена. Но он не будет найден во фразе "Chapter 3 and 4", поскольку эта строка не имеет точки после цифры '3'.</p>
+
+<p>Для того, чтобы сопоставить подстроку без вызова совпавшей части для запоминания, внутри круглых скобок необходимо предварить паттерн сочетанием символов ' <code>?:'</code>. Например, шаблон <code>(?:\d+)</code> будет соответствовать одному или более цифровому символу, но не запомнит совпавших символов. </p>
+
+<h2 id="Работа_с_Регулярными_Выражениями">Работа с Регулярными Выражениями</h2>
+
+<p>Регулярные выражения используются в методах <code>test</code> и <code>exec</code> объекта <code>RegExp</code> и с методами <code>match</code>, <code>replace</code>, <code>search</code>, и <code>split </code>объекта <code>String</code>. Эти методы подробно объясняются в <a href="/en-US/docs/JavaScript/Reference" title="en-US/docs/JavaScript/Reference">Справочнике JavaScript</a>.</p>
+
+<table class="standard-table">
+ <caption>Table 4.2 Методы пользующиеся регулярными выражениями</caption>
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec" title="en-US/docs/JavaScript/Reference/Global_Objects/RegExp/exec">exec</a></code></td>
+ <td>Метод <code>RegExp,</code> который выполняет поиск совпадения в  строке. Он возвращает массив данных.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test" title="en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test">test</a></code></td>
+ <td>Метод <code>RegExp</code>, который тестирует совпадение в строке. Возвращет либо истину либо ложь.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/match" title="en-US/docs/JavaScript/Reference/Global_Objects/String/match">match</a></code></td>
+ <td>Метод <code>String</code>, который выполняет поиск совпадения в строке. Он возвращет массив данных либо null если совпадения отсутствуют.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/search" title="en-US/docs/JavaScript/Reference/Global_Objects/String/search">search</a></code></td>
+ <td>Метод <code>String,</code> который тестирует на совпадение в строке. Он возвращет индекс совпадения, или -1 если совпадений не будет найдено.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/replace" title="en-US/docs/JavaScript/Reference/Global_Objects/String/replace">replace</a></code></td>
+ <td>Метод <code>String</code>, который выполняет поиск совпадения в строке, и заменяет совпавшую подстроку другой подстрокой переданной как аргумент в этот метод.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/split" title="en-US/docs/JavaScript/Reference/Global_Objects/String/split">split</a></code></td>
+ <td>Метод <code>String,</code> который использует регулярное выражение или фиксированую строку чтобы разбить строку на массив подстрок.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Чтобы просто узнать есть ли в строке что либо соотвествующее шаблону, воспользуйтесь методами <code>test</code> или <code>search</code>; а чтобы получить больше информации пользуйтесь методами <code>exec</code> или <code>match</code> (хотя эти метода работают медленее). Если вы пользуютесь <code>exec</code> или <code>match</code> и если совпадения есть, эти методы вернут массив и обновленные свойства объекта ассоцированного регулярного выражения а также предопределенного объекта <code>RegExp </code>регулярного выражения. Если совпадений нет, метод <code>exec</code> вернет <code>null</code> (который сконвертируется в  <code>false</code>).</p>
+
+<p>В след. примере, скрипт использует метод <code>exec</code> чтобы найти совпадения в строке.</p>
+
+<pre class="brush: js notranslate">var myRe = /d(b+)d/g;
+var myArray = myRe.exec("cdbbdbsbz");
+</pre>
+
+<p>Если вам не нужен доступ к свойствам регулярного выражения, то альтернативный способ получить <code>myArray</code> можно так:</p>
+
+<pre class="brush: js notranslate">var myArray = /d(b+)d/g.exec("cdbbdbsbz");
+</pre>
+
+<p>Если вы хотите сконструировать регулярное выражение из строки, другой способ сделать это приведен ниже:</p>
+
+<pre class="brush: js notranslate">var myRe = new RegExp("d(b+)d", "g");
+var myArray = myRe.exec("cdbbdbsbz");
+</pre>
+
+<p>С помощью этих скриптов, поиск совпадения завершается и возвращает массив и обновленные ствойства показанные  в след. таблице.</p>
+
+<table class="fullwidth-table">
+ <caption>Table 4.3 Результаты выполнения регулярного выражения</caption>
+ <thead>
+ <tr>
+ <th scope="col">Объект</th>
+ <th scope="col">Свойство или индекс</th>
+ <th scope="col">Описание</th>
+ <th scope="col">В этом примере.</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td rowspan="4"><code>myArray</code></td>
+ <td></td>
+ <td>Совпавшая строка и все запомненные подстроки.</td>
+ <td><code>["dbbd", "bb"]</code></td>
+ </tr>
+ <tr>
+ <td><code>index</code></td>
+ <td>Индекс совпавшей подстроки (индекс начинается с нуля).</td>
+ <td><code>1</code></td>
+ </tr>
+ <tr>
+ <td><code>input</code></td>
+ <td>Исходная строка.</td>
+ <td><code>"cdbbdbsbz"</code></td>
+ </tr>
+ <tr>
+ <td><code>[0]</code></td>
+ <td>Последние совпавшие символы.</td>
+ <td><code>"dbbd"</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2"><code>myRe</code></td>
+ <td><code>lastIndex</code></td>
+ <td>Индекс с которого начнется след. поиск совпадения. (Это свойство определяется только если регулярное выражение использует параметр g, описанный в {{ web.link("#Advanced_Searching_With_Flags", "Advanced Searching With Flags") }}.)</td>
+ <td><code>5</code></td>
+ </tr>
+ <tr>
+ <td><code>source</code></td>
+ <td>Текст шаблона. Обновляется в момент создания регулярного выражения, а не во время выполнения.</td>
+ <td><code>"d(b+)d"</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Как показано во втором варианте этого примера, вы можете использовать регулярное выражение, созданное при помощи инициализатора объекта, без присваивания его переменной. Таким образом, если вы используете данную форму записи без присваивания переменной, то в процессе дальнейшего использования вы не можете получить доступ к свойствам данного регулярного выражения. Например, у вас есть следующий скрипт:</p>
+
+<pre class="brush: js notranslate">var myRe = /d(b+)d/g;
+var myArray = myRe.exec("cdbbdbsbz");
+console.log("The value of lastIndex is " + myRe.lastIndex);
+</pre>
+
+<p>Этот скрипт выведет:</p>
+
+<pre class="notranslate">The value of lastIndex is 5
+</pre>
+
+<p>Однако, если у вас есть следующий скрипт:</p>
+
+<pre class="brush: js notranslate">var myArray = /d(b+)d/g.exec("cdbbdbsbz");
+console.log("The value of lastIndex is " + /d(b+)d/g.lastIndex);
+</pre>
+
+<p>Он выведет:</p>
+
+<pre class="notranslate">The value of lastIndex is 0
+</pre>
+
+<div class="syntaxbox">Совпадения <code>/d(b+)d/g</code> в двух случаях являются разными объектами регулярного выражения и, следовательно, имеют различные значения для свойства <code>lastIndex</code>. Если вам необходим доступ к свойствам объекта, созданного при помощи инициализатора, то вы должны сначала присвоить его переменной.</div>
+
+<div class="syntaxbox"></div>
+
+<h3 id="Использование_скобочных_выражений_для_нахождения_подстрок">Использование скобочных выражений для нахождения подстрок</h3>
+
+<p>Использование скобок в шаблоне регулярного выражения повлечет "запоминание" совпавшей подстроки. Для примера, <code>/a(b)c/</code> вызовет совпадение 'abc' и запомнит 'b'. Чтобы получить совпадения скобочного выражения используйте <code>Array</code> elements <code>[1]</code>, ..., <code>[n]</code>.</p>
+
+<p>Число возможных скобочных подстрок неограничено. Возвращаемый массив содержит все полученные совпадения, удовлетворяющие выражению в скобках. Следующий пример показывает как использовать скобочные выражения для нахождения подстрок.</p>
+
+<p>Следующий скрипт использует метод <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/String/replace" title="en-US/docs/JavaScript/Reference/Global Objects/String/replace">replace()</a>,</code> чтобы поменять местами слова (символы) в строке. Для замены текста скрипт использует обозначения  <code>$1</code> и <code>$2</code> для обозначения первого и второго совпадения скобочного выражения.</p>
+
+<pre class="brush: js notranslate">var re = /(\w+)\s(\w+)/;
+var str = "John Smith";
+var newstr = str.replace(re, "$2, $1");
+console.log(newstr);
+</pre>
+
+<p>Выведет "Smith, John".</p>
+
+<h3 id="Расширенный_поиск_с_флагами">Расширенный поиск с флагами</h3>
+
+<p>Регулярные выражения имеют четыре опциональных флага, которые делают возможным глобальный и регистронезависимый поиск. Флаги могут использоваться самостоятельно или вместе в любом порядке, а также могут являтся частью регулярного выражения.</p>
+
+<table style="line-height: 1.5;">
+ <caption>Флаги регулярных выражений</caption>
+ <thead>
+ <tr>
+ <th scope="col">Flag</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>g</code></td>
+ <td>Глобальный поиск.</td>
+ </tr>
+ <tr>
+ <td>i</td>
+ <td>Регистронезависимый поиск.</td>
+ </tr>
+ <tr>
+ <td>m</td>
+ <td>Многострочный поиск.</td>
+ </tr>
+ <tr>
+ <td>y</td>
+ <td>Выполняет поиск начиная с символа, который находится на позиции свойства lastindex текущего регулярного выражения.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Чтобы использовать флаги в шаблоне регулярного выражения используйте следующий синтаксис:</p>
+
+<pre class="brush: js notranslate">var re = /pattern/flags;
+</pre>
+
+<p>или</p>
+
+<pre class="brush: js notranslate">var re = new RegExp("pattern", "flags");
+</pre>
+
+<p>Обратите внимание, что флаги являются неотъемлемой частью регулярного выражения. Флаги не могут быть добавлены или удалены позднее.</p>
+
+<p>Для примера, <code>re = /\w+\s/g</code> создаёт регулярное выражение, которое ищет один или более символов, после котрых следует пробел и ищет данное совпадение на протяжении всей строки.</p>
+
+<pre class="brush: js notranslate">var re = /\w+\s/g;
+var str = "fee fi fo fum";
+var myArray = str.match(re);
+console.log(myArray);
+</pre>
+
+<p>Выведет  ["fee ", "fi ", "fo "]. В этом примере вы бы могли заменить строку:</p>
+
+<pre class="brush: js notranslate">var re = /\w+\s/g;
+</pre>
+
+<p>на следующую:</p>
+
+<pre class="brush: js notranslate">var re = new RegExp("\\w+\\s", "g");
+</pre>
+
+<p>и получить тот же результат.</p>
+
+<p>Флаг <code>m</code> используется, чтобы входная строка рассматривалась как многострочная. Если флаг <code>m</code> используется, то <code>^</code> и <code>$</code> вызовет совпадение в начале или конце любой строки в строке ввода вместо начала или конца вводимой строки целиком.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>След. примеры показывают использование регулярных выражений.</p>
+
+<h3 id="Изменение_порядка_в_Исходной_Строке">Изменение порядка в Исходной Строке</h3>
+
+<p>След. пример иллюстрирует формирование регулярного выражения и использование <code>string.split()</code> и <code>string.replace()</code>. Он очищает неправильно сформатированную исходную строку, которая содержит имена в неправильном порядке (имя идет первым) разделенные пробелами, табуляцией и одной точкой с запятой. В конце, изменяется порядок следования имен (фамилия станет первой) и сортируется список.</p>
+
+<pre class="brush: js notranslate">// The name string contains multiple spaces and tabs,
+// and may have multiple spaces between first and last names.
+var names = "Harry Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand ";
+
+var output = ["---------- Original String\n", names + "\n"];
+
+// Prepare two regular expression patterns and array storage.
+// Split the string into array elements.
+
+// pattern: possible white space then semicolon then possible white space
+var pattern = /\s*;\s*/;
+
+// Break the string into pieces separated by the pattern above and
+// store the pieces in an array called nameList
+var nameList = names.split(pattern);
+
+// new pattern: one or more characters then spaces then characters.
+// Use parentheses to "memorize" portions of the pattern.
+// The memorized portions are referred to later.
+pattern = /(\w+)\s+(\w+)/;
+
+// New array for holding names being processed.
+var bySurnameList = [];
+
+// Display the name array and populate the new array
+// with comma-separated names, last first.
+//
+// The replace method removes anything matching the pattern
+// and replaces it with the memorized string—second memorized portion
+// followed by comma space followed by first memorized portion.
+//
+// The variables $1 and $2 refer to the portions
+// memorized while matching the pattern.
+
+output.push("---------- After Split by Regular Expression");
+
+var i, len;
+for (i = 0, len = nameList.length; i &lt; len; i++){
+ output.push(nameList[i]);
+ bySurnameList[i] = nameList[i].replace(pattern, "$2, $1");
+}
+
+// Display the new array.
+output.push("---------- Names Reversed");
+for (i = 0, len = bySurnameList.length; i &lt; len; i++){
+ output.push(bySurnameList[i]);
+}
+
+// Sort by last name, then display the sorted array.
+bySurnameList.sort();
+output.push("---------- Sorted");
+for (i = 0, len = bySurnameList.length; i &lt; len; i++){
+ output.push(bySurnameList[i]);
+}
+
+output.push("---------- End");
+
+console.log(output.join("\n"));
+</pre>
+
+<h3 id="Использование_спецсимволов_для_проверки_входных_данных">Использование спецсимволов для проверки входных данных</h3>
+
+<p>В след. примере, ожидается что пользователь введет телефонный номер и требуется проверить правильность символов набранных пользователем. Когда пользователь нажмет кнопку "Check", скрипт проверит правильность введеного номера. Если номер правильный (совпадает с символами определенными в регулярном выражении), то скрипт покажет сообщение благодарности для пользователя и подтвердит номер. Если нет, то скрипт проинформирует пользователя, что телефонный номер неправильный.</p>
+
+<p>Внутри незахватывающих скобок <code>(?:, регуляное выражение ищет три цифры \d{3} ИЛИ |</code>  открывающую скобку <code>\(, затем три цифры \d{3}</code>, затем закрывающую скобку <code>\), </code>(закрывающая незахватывающая скобка <code>)</code>), затем тире, слэш, или десятичная точка, и когда это выражение найдено, запоминает символ <code>([-\/\.])</code>,  следующие за ним и запомненные три цифры <code>\d{3}</code>, следующее соответствие тире, слэша или десятичной точки <code>\1</code>, и следующие четыре цифры <code>\d{4}.</code></p>
+
+<p>Регулярное выражение ищет сначала 0 или одну открывающую скобку <code>\(?</code>, <code>затем три цифры \d{3}</code>, затем 0 или одну закрывающую скобку <code>\)?</code>, потом одно тире, слеш или точка и когда найдет это, запомнит символ<code>([-\/\.])</code>, след. три цифры<code> \d{3}</code>, followed by the remembered match of a dash, forward slash, or decimal point <code>\1</code>, followed by four digits <code>\d{4}</code>.</p>
+
+<p>Событие "Изменить" активируется, когда пользователь подтвердит ввод значения регулярного выражения, нажав клавишу "Enter". </p>
+
+<pre class="brush: html notranslate">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+ &lt;head&gt;
+ &lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
+ &lt;meta http-equiv="Content-Script-Type" content="text/javascript"&gt;
+ &lt;script type="text/javascript"&gt;
+ var re = /\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/;
+ function testInfo(phoneInput){
+ var OK = re.exec(phoneInput.value);
+ if (!OK)
+ window.alert(RegExp.input + " isn't a phone number with area code!");
+ else
+ window.alert("Thanks, your phone number is " + OK[0]);
+ }
+ &lt;/script&gt;
+ &lt;/head&gt;
+ &lt;body&gt;
+ &lt;p&gt;Enter your phone number (with area code) and then click "Check".
+ &lt;br&gt;The expected format is like ###-###-####.&lt;/p&gt;
+ &lt;form action="#"&gt;
+ &lt;input id="phone"&gt;&lt;button onclick="testInfo(document.getElementById('phone'));"&gt;Check&lt;/button&gt;
+ &lt;/form&gt;
+ &lt;/body&gt;
+&lt;/html&gt;
+</pre>
+
+<pre class="script notranslate">autoPreviousNext("JSGChapters");
+</pre>
diff --git a/files/ru/web/javascript/guide/text_formatting/index.html b/files/ru/web/javascript/guide/text_formatting/index.html
new file mode 100644
index 0000000000..4316e2402a
--- /dev/null
+++ b/files/ru/web/javascript/guide/text_formatting/index.html
@@ -0,0 +1,281 @@
+---
+title: Форматирование текста
+slug: Web/JavaScript/Guide/Text_formatting
+tags:
+ - JavaScript
+ - Руководство
+translation_of: Web/JavaScript/Guide/Text_formatting
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}</div>
+
+<p class="summary">В этой главе приводится порядок работы со строками и текстом в JavaScript.</p>
+
+<h2 id="Строки">Строки</h2>
+
+<p>Строки используются для представления текстовых данных. Каждая строка - это набор "элементов", а каждый элемент - 16 битное беззнаковое целое значение. Элементы имеют определённые позиции. Так первый элемент имеет индекс 0, следущий - 1, и так далее. Длина строки - это количество элементов в ней. Вы можете создать строки, используя строковые литералы или объекты класса String.</p>
+
+<h3 id="Строковые_литералы">Строковые литералы</h3>
+
+<p>Вы можете создавать простые строки, используя либо одинарные, либо двойные кавычки:</p>
+
+<pre class="brush: js">'foo'
+"bar"</pre>
+
+<p>Начиная со стандарта ES6 (ES-2015) для простых и сложных строк можно использовать обратные косые кавычки, а также, вставлять значения:</p>
+
+<pre>const name = "Alex";
+const str =
+ `Привет, ${name},
+  как дела?`;
+
+console.log(str);
+// Привет, Alex,
+// как дела?
+</pre>
+
+<p>Подробнее про использование обратных косых кавычек (` `), <a href="/ru/docs/Web/JavaScript/Guide/Text_formatting#Многострочные_шаблонные_строки">читайте ниже</a>.</p>
+
+<p>Строки с более богатым содержимым <span><span class="article-text">можно создать с помощью ESC-последовательностей</span></span><span><span class="comment">(комбинация символов, обычно используемая для задания неотображаемых символов и символов, имеющих специальное значение)</span></span>:</p>
+
+<h4 id="Шестнадцатиричные_экранированные_последовательности">Шестнадцатиричные экранированные последовательности</h4>
+
+<p>Число после \x трактуется как <a href="https://en.wikipedia.org/wiki/Hexadecimal">шестнадцатиричное.</a></p>
+
+<pre class="brush: js">'\xA9' // "©"
+</pre>
+
+<h4 id="Unicode_экранированные_последовательности">Unicode экранированные последовательности</h4>
+
+<p>Экранированные последовательности Unicode требуют по меньшей мере 4 символа после <code>\u</code>.</p>
+
+<pre class="brush: js">'\u00A9' // "©"</pre>
+
+<h4 id="Экранирование_элементов_кода_Unicode">Экранирование элементов кода Unicode</h4>
+
+<p>Нововведение ECMAScript 6, которое позволяет экранировать каждый Unicode символ, используя шестнадцатиричные значения (вплоть до <code>0x10FFFF</code>). С простым экранированием Unicode обычно требуется писать связанные друг с другом части по - отдельности для получения того же результата.</p>
+
+<p>Смотрите также {{jsxref("String.fromCodePoint()")}} или {{jsxref("String.prototype.codePointAt()")}}.</p>
+
+<pre class="brush: js">'\u{2F804}'
+
+// То же самое с простым Unicode
+'\uD87E\uDC04'</pre>
+
+<h3 id="Объекты_String">Объекты String</h3>
+
+<p>Объект <code>{{jsxref("String")}}</code> - это обёртка вокруг примитивного строкового типа данных.</p>
+
+<pre class="brush: js">var s = new String("foo"); // Создание объекта
+console.log(s); // Отобразится: { '0': 'f', '1': 'o', '2': 'o'}
+typeof s; // Вернет 'object'
+</pre>
+
+<p>Вы можете вызвать любой метод объекта класса <code>String</code> на строковом литерале - JavaScript сам преобразует строковый литерал во временный объект <code>String</code>, вызовет требуемый метод и затем уничтожит этот временный объект. Со строковыми литералами вы также можете использовать и <code>String.length</code> свойство.</p>
+
+<p>Следует использовать строковые литералы до тех пор, пока вам действительно не обойтись без <code>String</code> объекта, потому что, порой, объект String может вести себя неожиданно (не так, как строковый литерал). Например:</p>
+
+<pre class="brush: js">var s1 = "2 + 2"; // Создание строкового литерала
+var s2 = new String("2 + 2"); // Создание String объекта
+eval(s1); // Вернет 4
+eval(s2); // Вернет строку "2 + 2"</pre>
+
+<p>Объект <code>String</code> имеет свойство <code>length</code>, которое обозначает количество символов в строке. Например, в следующем коде x получит значение 13 потому, что "Hello, World!" содержит 13 символов, каждый из которых представлен одним кодом UTF-16. Вы можете обратиться к каждому коду с помощью квадратных скобок. Вы не можете изменять отдельные символы строки, т.к. строки это массиво-подобные неизменяемые объекты:</p>
+
+<pre class="brush: js">var mystring = "Hello, World!";
+var x = mystring.length;
+mystring[0] = 'L'; // Ничего не произойдет, т.к. строки неизменяемые
+mystring[0]; // Вернет: "H"
+</pre>
+
+<p>Объект <code>String</code> имеет множество методов, в том числе и те, которые возвращают преобразованную исходную строку (методы <code>substring</code>, <code>toUpperCase</code> и другие).</p>
+
+<p>В таблице ниже представлены методы String объекта.</p>
+
+<table class="standard-table">
+ <caption>
+ <h4 id="Методы_String">Методы <code>String</code></h4>
+ </caption>
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("String.charAt", "charAt")}}, {{jsxref("String.charCodeAt", "charCodeAt")}}, {{jsxref("String.codePointAt", "codePointAt")}}</td>
+ <td>Возвращает символ или символьный код в указанной позиции в строке.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.indexOf", "indexOf")}}, {{jsxref("String.lastIndexOf", "lastIndexOf")}}</td>
+ <td>Возвращает первую (indexOf) или последнюю (lastIndexOf) позицию указанной подстроки в строке. Если данная подстрока не найдена, то возвращает -1.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.startsWith", "startsWith")}}, {{jsxref("String.endsWith", "endsWith")}}, {{jsxref("String.includes", "includes")}}</td>
+ <td>Проверяет, начинается/кончается/содержит ли строка указанную подстроку.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.concat", "concat")}}</td>
+ <td>Объединяет две строки и возвращает результат в качестве новой строки.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.fromCharCode", "fromCharCode")}}, {{jsxref("String.fromCodePoint", "fromCodePoint")}}</td>
+ <td>Создает строку из указанной последовательности Unicode значений. Это метод класса String, а не отдельного экземпляра этого класса.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.split", "split")}}</td>
+ <td>Разбивает строку на подстроки, результат возвращает в виде массива строк.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.slice", "slice")}}</td>
+ <td>Извлекает часть строки и возвращает её в качестве новой строки.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.substring", "substring")}}, {{jsxref("String.substr", "substr")}}</td>
+ <td>
+ <p>Возвращет указанную часть строки по начальному и конечному индексам, либо по начальному индексу и длине.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.match", "match")}}, {{jsxref("String.replace", "replace")}}, {{jsxref("String.search", "search")}}</td>
+ <td>Работа с регулярными выражениями.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.toLowerCase", "toLowerCase")}}, {{jsxref("String.toUpperCase", "toUpperCase")}}</td>
+ <td>
+ <p>Возвращает строку полностью в нижнем (toLowerCase) или верхнем (toUpperCase) регистре.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.normalize", "normalize")}}</td>
+ <td>Возвращает нормализованную Unicode форму строки - значения объекта String, на котором вызывается.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.repeat", "repeat")}}</td>
+ <td>
+ <p>Возвращает строку, которая представляет собой повторение исходной строки указанное количество раз.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("String.trim", "trim")}}</td>
+ <td>
+ <p>Убирает пробелы в начале и в конце строки, результат возвращается в качестве новой строки.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Многострочные_шаблонные_строки">Многострочные шаблонные строки</h3>
+
+<p><a href="/en-US/docs/Web/JavaScript/Reference/template_strings">Шаблонные строки</a> представляют собой строковые литералы, которые могут содержать внутри себя встроенные выражения. С ними вы можете использовать многострочные строковые литералы и интерполяцию строк.</p>
+
+<p>Такого типа строки заключаются в пару обратных штрихов (` `) (<a class="external external-icon" href="https://en.wikipedia.org/wiki/Grave_accent">grave accent</a>) вместо двойных или одинарных кавычек. Шаблонные строки могут содержать заполнители, которые выделяются знаком доллара и фигурными скобками (<code>${выражение}</code>).</p>
+
+<h4 id="Многострочная_запись">Многострочная запись</h4>
+
+<p>Каждая новая горизонтальная линия символов, вставленная в исходный код, является частью шаблонной строки. Используя обычные строки, вам бы потребовалось использовать следующий синтаксис для многострочной записи:</p>
+
+<pre class="brush: js">console.log("string text line 1\n\
+string text line 2");
+// "string text line 1
+// string text line 2"</pre>
+
+<p>Того же результата можно добиться и другим способом (используя синтаксис шаблонных строк):</p>
+
+<pre class="brush: js">console.log(`string text line 1
+string text line 2`);
+// "string text line 1
+// string text line 2"</pre>
+
+<h4 id="Встроенные_выражения">Встроенные выражения</h4>
+
+<p>Для того, чтобы добавить выражения внутрь обычных строк, вы бы использовали следующий синтаксис:</p>
+
+<pre class="brush: js">var a = 5;
+var b = 10;
+console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
+// "Fifteen is 15 and
+// not 20."</pre>
+
+<p>Теперь же, используя шаблонные строки, вы можете сделать это так:</p>
+
+<pre class="brush: js">var a = 5;
+var b = 10;
+console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
+// "Fifteen is 15 and
+// not 20."</pre>
+
+<p>Для более подробной информации смотри  <a href="/en-US/docs/Web/JavaScript/Reference/template_strings">Шаблонные строки</a> в <a href="/en-US/docs/Web/JavaScript/Reference">справочнике по JavaScript</a>.</p>
+
+<h2 id="Интернационализация">Интернационализация</h2>
+
+<p>Объект {{jsxref("Intl")}} представляет собой пространство имен для ECMAScript API по интернационализации, которое обеспечивает чувствительное к языку сравнение строк, форматирование чисел, времени и даты. Конструкторы для объектов {{jsxref("Collator")}}, {{jsxref("NumberFormat")}} и {{jsxref("DateTimeFormat")}} являются свойствами <code>объекта Intl</code>.</p>
+
+<h3 id="Форматирование_времени_и_даты">Форматирование времени и даты</h3>
+
+<p>Объект {{jsxref("DateTimeFormat")}} полезен для форматирования времени и даты. В примере ниже дата форматируется так, как это принято в США (результат отличен для разных временных зон).</p>
+
+<pre class="brush: js">var msPerDay = 24 * 60 * 60 * 1000;
+
+// July 17, 2014 00:00:00 UTC.
+var july172014 = new Date(msPerDay * (44 * 365 + 11 + 197));
+
+var options = { year: "2-digit", month: "2-digit", day: "2-digit",
+    hour: "2-digit", minute: "2-digit", timeZoneName: "short" };
+var americanDateTime = new Intl.DateTimeFormat("en-US", options).format;
+
+console.log(americanDateTime(july172014)); // 07/16/14, 5:00 PM PDT
+</pre>
+
+<h3 id="Форматирование_чисел">Форматирование чисел</h3>
+
+<p>Объект {{jsxref("NumberFormat")}} полезен при форматировании чисел, например, валют.</p>
+
+<pre class="brush: js">var gasPrice = new Intl.NumberFormat("en-US",
+                        { style: "currency", currency: "USD",
+                          minimumFractionDigits: 3 });
+
+console.log(gasPrice.format(5.259)); // $5.259
+
+var hanDecimalRMBInChina = new Intl.NumberFormat("zh-CN-u-nu-hanidec",
+                        { style: "currency", currency: "CNY" });
+
+console.log(hanDecimalRMBInChina.format(1314.25)); // ¥ 一,三一四.二五
+</pre>
+
+<h3 id="Сравнение">Сравнение</h3>
+
+<p>Объект {{jsxref("Collator")}} полезен для сравнения и сортировки строк.</p>
+
+<p>Например, в Германии есть два различных порядка сортировки строк в зависимости от документа: телефонная книга или словарь.<em> </em>Сортировка по типу телефонной книги подчеркивает звуки.</p>
+
+<pre class="brush: js">var names = ["Hochberg", "Hönigswald", "Holzman"];
+
+var germanPhonebook = new Intl.Collator("de-DE-u-co-phonebk");
+
+// as if sorting ["Hochberg", "Hoenigswald", "Holzman"]:
+console.log(names.sort(germanPhonebook.compare).join(", "));
+// logs "Hochberg, Hönigswald, Holzman"
+</pre>
+
+<p>Примером по сортировке для словаря слов на немецком языке служит следующий код:</p>
+
+<pre class="brush: js">var germanDictionary = new Intl.Collator("de-DE-u-co-dict");
+
+// as if sorting ["Hochberg", "Honigswald", "Holzman"]:
+console.log(names.sort(germanDictionary.compare).join(", "));
+// logs "Hochberg, Holzman, Hönigswald"
+</pre>
+
+<p>Для более подробной информации об {{jsxref("Intl")}} API смотри  <a href="https://hacks.mozilla.org/2014/12/introducing-the-javascript-internationalization-api/">Introducing the JavaScript Internationalization API</a>.</p>
+
+<h2 id="Регулярные_выражения">Регулярные выражения</h2>
+
+<p>Регулярные выражения - это шаблоны, которые используются для описания некоторого множества строк . Это очень мощный и в некоторый степени непростой механизм, и поэтому ему посвящена отдельная глава. Узнать больше о регулярных выражениях можно здесь:</p>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">Регулярные выражения JavaScript</a> в руководстве по JavaScript.</li>
+ <li>{{jsxref("RegExp")}} ссылка в документации.</li>
+</ul>
+
+<div>{{PreviousNext("Web/JavaScript/Guide/Numbers_and_dates", "Web/JavaScript/Guide/Regular_Expressions")}}</div>
diff --git a/files/ru/web/javascript/guide/working_with_objects/index.html b/files/ru/web/javascript/guide/working_with_objects/index.html
new file mode 100644
index 0000000000..34da02e599
--- /dev/null
+++ b/files/ru/web/javascript/guide/working_with_objects/index.html
@@ -0,0 +1,492 @@
+---
+title: Работа с объектами
+slug: Web/JavaScript/Guide/Working_with_Objects
+translation_of: Web/JavaScript/Guide/Working_with_Objects
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}</p>
+
+<p class="summary">JavaScript спроектирован на основе простой парадигмы. В основе концепции лежат простые объекты. Объект <span style="line-height: 1.5;">—</span> это набор свойств, и каждое свойство состоит из имени и значения, ассоциированного с этим именем. Значением свойства может быть функция, которую можно назвать <em>методом</em> объекта. В дополнение к встроенным в браузер объектам, вы можете определить свои собственные объекты. Эта глава описывает как пользоваться объектами, свойствами, функциями и методами, а также как создавать свои собственные объекты.</p>
+
+<h2 id="Обзор_объектов">Обзор объектов</h2>
+
+<p>Объекты в JavaScript, как и во многих других языках программирования, похожи на объекты реальной жизни. Концепцию объектов JavaScript легче понять, проводя паралелли с реально существующими в жизни объектами.</p>
+
+<p>В JavaScript объект — это самостоятельная единица, имеющая свойства и определенный тип. Сравним, например, с чашкой. У чашки есть цвет, форма, вес, материал, из которого она сделана, и т.д. Точно так же, объекты JavaScript имеют свойства, которые определяют их характеристики.</p>
+
+<h2 id="Объекты_и_свойства">Объекты и свойства</h2>
+
+<p>В JavaScript объект имеет свойства, ассоциированные с ним. Свойство объекта можно понимать как переменную, закрепленную за объектом. Свойства объекта в сущности являются теми же самыми переменными JavaScript, за тем исключением, что они закреплены за объектом. Свойства объекта определяют его характеристики. Получить доступ к свойству объекта можно с помощью точечной записи:</p>
+
+<div style="margin-right: 270px;">
+<pre class="brush: js">objectName.propertyName
+</pre>
+</div>
+
+<p>Как и все переменные JavaScript, имя объекта (которое тоже может быть переменной) и имя свойства являются чуствительными к регистру. Вы можете определить свойство указав его значение. Например, давайте создадим объект <code>myCar</code> и определим его свойства <code>make</code>, <code>model</code>, и <code>year</code> следующим образом:</p>
+
+<pre class="brush: js">var myCar = new Object();
+myCar.make = "Ford";
+myCar.model = "Mustang";
+myCar.year = 1969;
+</pre>
+
+<p>Неопределенные свойства объекта являются {{jsxref("undefined")}} (а не {{jsxref("null")}}).</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js">myCar<span class="punctuation token">.</span>color<span class="punctuation token">;</span> <span class="comment token">// undefined</span></code></pre>
+
+<p>Свойства объектов JavaScript также могут быть доступны или заданы с использованием скобочной записи (более подробно см. <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessors</a>). Объекты иногда называются <em>ассоциативными массивами</em>, поскольку каждое свойство связано со строковым значением, которое можно использовать для доступа к нему. Так, например, вы можете получить доступ к свойствам объекта <code>myCar </code>следующим образом:</p>
+
+<pre class="brush: js">myCar["make"] = "Ford";
+myCar["model"] = "Mustang";
+myCar["year"] = 1969;
+</pre>
+
+<p>Имена свойств объекта могут быть строками JavaScript, или тем, что может быть сконвертировано в строку, включая пустую строку. Как бы то ни было, доступ к любому имени свойства, которое содержит невалидный JavaScript идентификатор (например, имя свойства содержит в себе пробел и тире или начинается с цифры), может быть получен с использованием квадратных скобок. Этот способ записи также полезен, когда имена свойств должны быть динамически определены (когда имя свойства не определено до момента исполнения). Примеры далее:</p>
+
+<pre class="brush: js">var myObj = new Object(),
+ str = "myString",
+ rand = Math.random(),
+ obj = new Object();
+
+myObj.type = "Dot syntax";
+myObj["date created"] = "String with space";
+myObj[str] = "String value";
+myObj[rand] = "Random Number";
+myObj[obj] = "Object";
+myObj[""] = "Even an empty string";
+
+console.log(myObj);
+</pre>
+
+<p>Обратите внимание, что все ключи с квадратными скобками преобразуются в тип String, поскольку объекты в JavaScript могут иметь в качестве ключа только тип String. Например, в приведенном выше коде, когда ключ <code>obj</code> добавляется в <code>myObj</code>, JavaScript вызывает метод <code>obj.toString ()</code> и использует эту результирующую строку в качестве нового ключа.</p>
+
+<p>Вы также можете получить доступ к свойствам, используя значение строки, которое хранится в переменной:</p>
+
+<div style="width: auto;">
+<pre class="brush: js">var propertyName = "make";
+myCar[propertyName] = "Ford";
+
+propertyName = "model";
+myCar[propertyName] = "Mustang";
+</pre>
+</div>
+
+<p>Вы можете пользоваться квадратными скобками в конструкции <a class="internal" href="/ru/docs/JavaScript/Guide/Statements#for...in_Statement" title="ru/docs/JavaScript/Guide/Statements#for...in Statement">for...in</a> чтобы выполнить итерацию всех свойств объекта, для которых она разрешена. Чтобы показать как это работает, следующая функция показывает все свойства объекта, когда вы передаете в нее сам объект и его имя как аргументы функции:</p>
+
+<pre class="brush: js">function showProps(obj, objName) {
+ var result = "";
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ result += objName + "." + i + " = " + obj[i] + "\n";
+ }
+ }
+ return result;
+}
+</pre>
+
+<p>Так что если вызвать эту функцию вот так <code>showProps(myCar, "myCar"),</code> то получим результат:</p>
+
+<pre class="brush: js">myCar.make = Ford
+myCar.model = Mustang
+myCar.year = 1969</pre>
+
+<h2 id="Перечисление_всех_свойств_объекта">Перечисление всех свойств объекта</h2>
+
+<p>Начиная с <a href="/ru/docs/JavaScript/ECMAScript_5_support_in_Mozilla" title="ru/docs/JavaScript/ECMAScript 5 support in Mozilla">ECMAScript 5</a>, есть три способа перечислить все свойства объекта (получить их список):</p>
+
+<ul>
+ <li>циклы <a href="/ru/docs/JavaScript/Reference/Statements/for...in" title="/ru/docs/JavaScript/Reference/Statements/for...in">for...in </a><br>
+ Этот метод перебирает все перечисляемые свойства объекта и его цепочку прототипов</li>
+ <li><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/keys" title="ru/docs/JavaScript/Reference/Global Objects/Object/keys">Object.keys(o)</a><br>
+ Этот метод возвращает массив со всеми собственными (те, что в цепочке прототипов, не войдут в массив) именами перечисляемых свойств объекта <code>o</code>.</li>
+ <li><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="ru/docs/JavaScript/Reference/Global Objects/Object/getOwnPropertyNames">Object.getOwnPropertyNames(o)</a><br>
+ Этот метод возвращает массив содержащий все имена своих свойств (перечисляемых и неперечисляемых) объекта <code>o</code>.</li>
+</ul>
+
+<p>До ECMAScript 5 не было встроенного способа перечислить все свойства объекта. Однако это можно сделать с помощью следующей функции:</p>
+
+<pre class="brush: js">function listAllProperties(o){
+ var objectToInspect;
+ var result = [];
+
+ for(objectToInspect = o; objectToInspect !== null; objectToInspect = Object.getPrototypeOf(objectToInspect)){
+ result = result.concat(Object.getOwnPropertyNames(objectToInspect));
+ }
+
+ return result;
+}
+</pre>
+
+<p>Это может быть полезно для обнаружения скрытых (hidden) свойств (свойства в цепочке прототипа, которые недоступны через объект, в случае, если другое свойство имеет такое же имя в предыдущем звене из цепочки прототипа). Перечислить доступные свойства можно, если удалить дубликаты из массива.</p>
+
+<h2 id="Создание_новых_объектов">Создание новых объектов</h2>
+
+<p>JavaScript содержит набор встроенных объектов. Также вы можете создавать свои объекты. Начиная с JavaScript 1.2, вы можете создавать объект с помощью инициализатора объекта. Другой способ <span style="line-height: 1.5;">—</span>  создать функцию-конструктор и сделать экземпляр объекта с помощью этой функции и оператора <code>new</code>.</p>
+
+<h3 id="Использование_инициализаторов_объекта">Использование инициализаторов объекта</h3>
+
+<p>Помимо создания объектов с помощью функции-конструктора вы можете создавать объекты и другим, особым способом. Фактически, вы можете записать объект синтаксически, и он будет создан интерпретатором автоматически во время выполнения. Эта синтаксическая схема приведена ниже:</p>
+
+<pre class="brush: js">var obj = { property_1: value_1, // property_# may be an identifier...
+ 2: value_2, // or a number...
+ // ...,
+ "property n": value_n }; // or a string
+</pre>
+
+<p>здесь <code>obj</code> <span style="line-height: 1.5;">—</span> это имя нового объекта, каждое <code>property_i</code> <span style="line-height: 1.5;">—</span> это идентификатор (имя, число или строковый литерал), и каждый <code>value_i</code> <span style="line-height: 1.5;">—</span> это значения, назначенные <em><code>property_i</code></em>. Имя <code>obj</code> и ссылка объекта на него необязательна; если далее вам не надо будет ссылаться на данный объект, то вам не обязательно назначать объект переменной. (Обратите внимание, что вам потребуется обернуть литерал объекта в скобки, если объект находится в месте, где ожидается инструкция, чтобы интерпретатор не перепутал его с блоком.)</p>
+
+<p>Если объект создан при помощи инициализатора объектов на высшем уровне скрипта, то JavaScript интерпретирует объект каждый раз, когда анализирует выражение, содержащее объект, записанный как литерал. Плюс, если пользоваться функцией инициализатором, то он будет создаваться каждый раз, когда функция вызывается.</p>
+
+<p>Следующая инструкция создает объект и назначает его переменной <code>x</code>, когда выражение <code>cond</code> истинно.</p>
+
+<pre class="brush: js">if (cond) var x = {hi: "there"};
+</pre>
+
+<p>Следующий пример создает объект <code>myHonda</code> с тремя свойствами. Заметьте, что свойство <code>engine</code> <span style="line-height: 1.5;">—</span> это также объект со своими собственными свойствами.</p>
+
+<pre class="brush: js">var myHonda = {
+ color: "red",
+ wheels: 4,
+ engine: {
+ cylinders: 4,
+ size: 2.2
+ }
+};
+</pre>
+
+<p>Вы также можете использовать инициализатор объекта для создания массивов. Смотрите {{ web.link("Values%2C_variables%2C_and_literals#Array_literals", "array literals") }}.</p>
+
+<p>До JavaScript 1.1 не было возможности пользоваться инициализаторами объекта. Единственный способ создавать объекты <span style="line-height: 1.5;">—</span> это пользоваться функциями-конструкторами или функциями других объектов, предназначенных для этой цели. Смотрите {{ anch("Using a constructor function") }}.</p>
+
+<h3 id="Использование_функции_конструктора">Использование функции конструктора</h3>
+
+<p>Другой способ создать объект в два шага описан ниже:</p>
+
+<ol>
+ <li>Определите тип объекта, написав функцию-конструктор. Название такой функции, как правило, начинается с заглавной буквы.</li>
+ <li>Создайте экземпляр объекта с помощью ключевого слова <code>new</code>.</li>
+</ol>
+
+<p>Чтобы определить тип объекта создайте функцию, которая определяет тип объекта, его имя, свойства и методы. Например предположим, что вы хотите создать тип объекта для описания машин. Вы хотите, чтобы объект этого типа назывался <code>car</code>, и вы хотите, чтобы у него были свойства make, model, и year. Чтобы сделать это, напишите следующую функцию:</p>
+
+<pre class="brush: js">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+</pre>
+
+<p>Заметьте, что используется <code>this</code> чтобы присвоить значения (переданные как аргументы функции) свойствам объекта.</p>
+
+<p>Теперь вы можете создать объект, называемый <code>mycar</code>, следующим образом:</p>
+
+<pre class="brush: js">var mycar = new Car("Eagle", "Talon TSi", 1993);
+</pre>
+
+<p>Эта инструкция создает объект типа Car со ссылкой <code>mycar</code> и присваивает определенные значения его свойствам. Значением <code>mycar.make </code>станет строка "Eagle", <code>mycar.year</code> <span style="line-height: 1.5;">—</span> это целое число 1993, и так далее.</p>
+
+<p>Вы можете создать столько объектов <code>car,</code> сколько нужно, просто вызывая  <code>new</code>. Например:</p>
+
+<pre class="brush: js">var kenscar = new Car("Nissan", "300ZX", 1992);
+var vpgscar = new Car("Mazda", "Miata", 1990);
+</pre>
+
+<p>Объект может иметь свойство, которое будет другим объектом. Например, далее определяется объект типа <code>Person</code> следующим образом:</p>
+
+<pre class="brush: js">function Person(name, age, sex) {
+ this.name = name;
+ this.age = age;
+ this.sex = sex;
+}
+</pre>
+
+<p>и затем создать два новых экземпляра объектов <code>Person</code> как показано далее:</p>
+
+<pre class="brush: js">var rand = new Person("Rand McKinnon", 33, "M");
+var ken = new Person("Ken Jones", 39, "M");
+</pre>
+
+<p>Затем, вы можете переписать определение <code>car</code> и включить в него свойство <code>owner</code>, которому назначить объект <code>person</code> следующим образом:</p>
+
+<pre class="brush: js">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+}
+</pre>
+
+<p>Затем, чтобы создать экземпляры новых объектов, выполните следующие инструкции:</p>
+
+<pre class="brush: js">var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
+var car2 = new Car("Nissan", "300ZX", 1992, ken);
+</pre>
+
+<p>Заметьте, что вместо того, чтобы передавать строку, литерал или целое число при создании новых объектов, в выражениях выше передаются объекты <code>rand</code> и <code>ken</code> как аргумент функции. Теперь, если вам нужно узнать имя владельца car2, это можно сделать следующим образом:</p>
+
+<pre class="brush: js">car2.owner
+</pre>
+
+<p>Заметьте, что в любое время вы можете добавить новое свойство ранее созданному объекту. Например, выражение</p>
+
+<pre class="brush: js">car1.color = "black";
+</pre>
+
+<p>добавляет свойство <code>color</code> к car1, и устанавливаего его значение равным "black." Как бы там ни было, это не влияет на любые другие объекты. Чтобы добавить новое свойство всем объектам одного типа, вы должны добавить свойство в определение типа объекта <code>car</code>.</p>
+
+<h3 id="Использование_метода_Object.create">Использование метода Object.create</h3>
+
+<p>Объекты также можно создавать с помощью метода <code>Object.create</code>. Этот метод очень удобен, так как позволяет вам указывать объект прототип для нового вашего объекта без определения функции конструктора.</p>
+
+<pre class="brush: js">// список свойств и методов для Animal
+var Animal = {
+ type: 'Invertebrates', // Значение type по умолчанию
+ displayType: function() { // Метод отображающий тип объекта Animal
+ console.log(this.type);
+ }
+};
+
+// Создаем объект Animal
+var animal1 = Object.create(Animal);
+animal1.displayType(); // Выведет:Invertebrates
+
+// Создаем объект Animal и присваиваем ему type = Fishes
+var fish = Object.create(Animal);
+fish.type = 'Fishes';
+fish.displayType(); // Выведет:Fishes</pre>
+
+<h2 id="Наследование">Наследование</h2>
+
+<p>Все объекты в JavaScript наследуются как минимум от другого объекта. Объект, от которого произошло наследование называется прототипом, и унаследованные свойства могут быть найдены в объекте <code>prototype</code> конструктора.</p>
+
+<h2 id="Индексы_свойств_объекта">Индексы свойств объекта</h2>
+
+<p>В JavaScript 1.0 вы можете сослаться на свойства объекта либо по его имени, либо по его порядковому индексу. В JavaScript 1.1 и позже, если вы изначально определили свойство по имени, вы всегда должны ссылаться на него по его имени, и если вы изначально определили свойство по индексу, то должны ссылаться на него по его индексу.</p>
+
+<p>Это ограничение налагается когда вы создаете объект и его свойства с помощью функции конструктора (как мы это делали ранее с типом <em>Car </em>) и когда вы определяете индивидуальные свойства явно (например, <code>myCar.color = "red"</code>). Если вы изначально определили свойство объекта через индекс, например <code>myCar[5] = "25 mpg"</code>, то впоследствии сослаться на это свойство можно только так <code>myCar[5]</code>.</p>
+
+<p>Исключение из правил <span style="line-height: 1.5;">—</span> объекты, отображаемые из HTML, например массив<code> forms</code>. Вы всегда можете сослаться на объекты в этих массивах или используя их индекс (который основывается на порядке появления в HTML документе), или по их именам (если таковые были определены). Например, если второй html-тег <code>&lt;FORM&gt;</code> в документе имеет значение аттрибута <code>NAME</code> равное "myForm", вы можете сослаться на эту форму вот так: <code>document.forms[1]</code> или <code>document.forms["myForm"]</code> или <code>document.myForm</code>.</p>
+
+<h2 id="Определение_свойств_для_типа_объекта">Определение свойств для типа объекта</h2>
+
+<p>Вы можете добавить свойство к ранее определенному типу объекта воспользовавшись специальным свойством <code>prototype</code>. Через <code>prototype</code> создается свойство, единое для всех объектов данного типа, а не одного экземпляра этого типа объекта. Следующий код демонстрирует это, добавляя свойство <code>color</code> ко всем объектам типа <code>car</code>, а затем присваивая значение свойству <code>color</code> объекта<code> car1</code>.</p>
+
+<pre class="brush: js">Car.prototype.color = null;
+car1.color = "black";
+</pre>
+
+<p>Смотрите <a href="/ru/docs/JavaScript/Reference/Global_Objects/Function/prototype" title="ru/docs/JavaScript/Reference/Global Objects/Function/prototype"><code>свойство prototype</code></a> объекта <code>Function</code> в <a href="/ru/docs/JavaScript/Reference" title="ru/docs/JavaScript/Reference">Справочнике JavaScript </a>для получения деталей.</p>
+
+<h2 id="Определение_методов">Определение методов</h2>
+
+<p><em>Метод</em> <span style="line-height: 1.5;">—</span> это функция, ассоциированная с объектом или, проще говоря, метод <span style="line-height: 1.5;">—</span> это свойство объекта, являющееся функцией. Методы определяются так же, как и обычные функции, за тем исключением, что они присваиваются свойству объекта. Например вот так:</p>
+
+<pre class="brush: js">objectName.methodname = function_name;
+
+var myObj = {
+ myMethod: function(params) {
+ // ...do something
+ }
+};
+</pre>
+
+<p>где <code>objectName</code> <span style="line-height: 1.5;">— </span>это существующий объект, <code>methodname</code> <span style="line-height: 1.5;">— </span>это имя, которое вы присваиваете методу, и <code>function_name</code> <span style="line-height: 1.5;">—</span> это имя самой функции.</p>
+
+<p>Затем вы можете вызвать метод в контексте объекта следующим образом:</p>
+
+<pre class="brush: js">object.methodname(params);
+</pre>
+
+<p>Вы можете определять методы для типа объекта, включая определение метода в функцию конструктора объекта. Например, вы можете определить функцию, которая форматирует и отображает свойства до этого определенных объектов <code>car</code>. Например,</p>
+
+<pre class="brush: js">function displayCar() {
+ var result = "A Beautiful " + this.year + " " + this.make
+ + " " + this.model;
+ pretty_print(result);
+}
+</pre>
+
+<p>где <code>pretty_print</code> <span style="line-height: 1.5;">—</span> это функция отображения горизонтальной линии и строки. Заметьте, что использование <code>this</code> позволяет ссылаться на объект, которому принадлежит метод.</p>
+
+<p>Вы можете сделать эту функцию методом <code>car,</code> добавив инструкцию</p>
+
+<pre class="brush: js">this.displayCar = displayCar;
+</pre>
+
+<p>к определению объекта. Таким образом, полное определение <code>car</code> примет следующий вид:</p>
+
+<pre class="brush: js">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+ this.displayCar = displayCar;
+}
+</pre>
+
+<p>Теперь вы можете вызвать метод <code>displayCar</code> для каждого из объектов как показано ниже:</p>
+
+<pre class="brush: js">car1.displayCar();
+car2.displayCar();
+</pre>
+
+<h2 id="Использование_this_для_ссылки_на_объект">Использование <code>this</code> для ссылки на объект</h2>
+
+<p>В JavaScript есть специальное ключевое слово this, которое вы можете использовать внутри метода, чтобы ссылаться на текущий объект. Предположим, у вас есть функция validate, которая сверяет свойство value, переданного ей объекта с некоторыми верхним и нижним значениями:</p>
+
+<pre class="brush: js">function validate(obj, lowval, hival) {
+ if ((obj.value &lt; lowval) || (obj.value &gt; hival))
+ alert("Invalid Value!");
+}
+</pre>
+
+<p>Вы можете вызвать эту функцию <code>validate</code> в каждом элементе формы, в обработчике события <code>onchange</code>. Используйте <code>this</code> для доступа к этому элементу, как это сделано ниже:</p>
+
+<pre class="brush: html">&lt;input type="text" name="age" size="3"
+ onChange="validate(this, 18, 99)"&gt;
+</pre>
+
+<p>В общем случае, <code>this</code> ссылается на объект, вызвавший метод.</p>
+
+<p>Через <code>this</code> можно обратиться и к родительской форме элемента, воспользовавшись свойством <code>form</code>. В следующем примере форма <code>myForm</code> содержит элемент ввода <code>Text </code>и кнопку <code>button1</code>. Когда пользователь нажимает кнопку, значению объекта <code>Text</code> назначается имя формы. Обработчик событий кнопки <code>onclick</code> пользуется <code>this.form</code> чтобы сослаться на текущую форму, <code>myForm</code>.</p>
+
+<pre class="brush: html">&lt;form name="myForm"&gt;
+&lt;p&gt;&lt;label&gt;Form name:&lt;input type="text" name="text1" value="Beluga"&gt;&lt;/label&gt;
+&lt;p&gt;&lt;input name="button1" type="button" value="Show Form Name"
+ onclick="this.form.text1.value = this.form.name"&gt;
+&lt;/p&gt;
+&lt;/form&gt;</pre>
+
+<h2 id="Определение_геттеров_и_сеттеров">Определение геттеров и сеттеров</h2>
+
+<p><em><a href="/ru/docs/Web/JavaScript/Reference/Functions/get">Геттер </a>(от англ. get - получить) </em><span style="line-height: 1.5;">—</span><em> </em>это метод, который получает значение определенного свойства. <em><a href="/ru/docs/Web/JavaScript/Reference/Functions/set">Сеттер </a>(от англ. set </em><span style="line-height: 1.5;">—</span><em> присвоить)</em> <span style="line-height: 1.5;">—</span> это метод, который присваивает значение определенному свойству объекта. Вы можете определить геттеры и сеттеры для любых из встроенных или определенных вами объектов, которые поддерживают добавление новых свойств. Синтаксис определения геттеров и сеттеров использует литеральный синтаксис объектов.</p>
+
+<p>Ниже проиллюстрировано, как могут работать геттеры и сеттеры в объекте определенном пользователем:</p>
+
+<pre class="brush: js"><code>var o = {
+ a: 7,
+ get b() {
+ return this.a + 1;
+ },
+ set c(x) {
+ this.a = x / 2;
+ }
+};
+
+console.log(o.a); // 7
+console.log(o.b); // 8
+o.c = 50;
+console.log(o.a); // 25</code></pre>
+
+<p>Объект <code>o</code> получит следующие свойства:</p>
+
+<ul>
+ <li><code>o.a</code> — число</li>
+ <li><code>o.b</code> — геттер, который возвращает <code>o.a</code> плюс 1</li>
+ <li><code>o.c</code> — сеттер, который присваивает значение <code>o.a</code> половине значения которое передано в <code>o.c</code></li>
+</ul>
+
+<p>Следует особо отметить, что имена функций, указанные в литеральной форме "[gs]et <em>propertyName</em>() { }" не будут в действительности являться именами геттера и сеттера. Чтобы задать в качестве геттера и сеттера функции с явно определенными именами, используйте метод <code><a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty" title="en-US/docs/Core JavaScript 1.5 Reference/Global
+Objects/Object/defineProperty">Object.defineProperty</a></code> (или его устаревший аналог <code><a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineGetter" title="en-US/docs/Core JavaScript 1.5 Reference/Global
+Objects/Object/defineGetter">Object.prototype.__defineGetter__</a></code>).</p>
+
+<p>В коде ниже показано, как с помощью геттера и сеттера можно расширить прототип объекта {{jsxref("Date")}} и добавить ему свойство <code>year,</code> которое будет работать у всех экземпляров класса <code>Date</code>. Этот код использует существующие методы класса <code>Date</code> - <code>getFullYear</code> и <code>setFullYear</code> для работы геттера и сеттера.</p>
+
+<p>Определение геттера и сеттера для свойства <code>year</code>:</p>
+
+<pre class="brush: js"><code>var d = Date.prototype;
+Object.defineProperty(d, 'year', {
+ get: function() { return this.getFullYear(); },
+ set: function(y) { this.setFullYear(y); }
+});</code></pre>
+
+<p>Использование свойства <code>year</code> заданного геттером и сеттером:</p>
+
+<pre class="brush: js"><code>var now = new Date();
+console.log(now.year); // 2000
+now.year = 2001; // 987617605170
+console.log(now);
+// Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001</code></pre>
+
+<p>В принципе, геттеры и сеттеры могут быть либо:</p>
+
+<ul>
+ <li>определены при использовании {{ web.link("#Использование_инициализаторов_объекта", "Инициализаторов объекта") }}, или</li>
+ <li>добавлены существующему объекту в любой момент, при использовании методов добавления геттеров и сеттеров.</li>
+</ul>
+
+<p>Когда определение геттера и сеттера использует {{ web.link("#Использование_инициализаторов_объекта", "инициализаторы объекта") }}, все что вам нужно, это дополнить геттер префиксом <code>get</code> а сеттер префиксом <code>set</code>. При этом, метод геттера не должен ожидать каких либо параметров, в то время как метод сеттера принимает один единственный параметр (новое значение для присвоения свойству). Например:</p>
+
+<pre class="brush: js"><code>var o = {
+ a: 7,
+ get b() { return this.a + 1; },
+ set c(x) { this.a = x / 2; }
+};</code></pre>
+
+<p>Геттеры и сеттеры, могут быть добавлены существующему объекту в любой момент, при помощи метода <code>Object.defineProperties</code>. Первый параметр этого метода - объект, которому вы хотите присвоить геттер и сеттер. Второй параметр - это объект, имена свойств которого будут соответствовать именам создаваемых свойств, а значения - объекты определяющие геттер и сеттер создаваемых свойств. В следующем примере создаются в точности такие же геттер и сеттер, как и в примере выше:</p>
+
+<pre class="brush: js"><code>var o = { a: 0 };
+
+Object.defineProperties(o, {
+ 'b': { get: function() { return this.a + 1; } },
+ 'c': { set: function(x) { this.a = x / 2; } }
+});
+
+o.c = 10; // Запускает сеттер, который присваивает 10 / 2 (5) свойству 'a'
+console.log(o.b); // Запускает геттер, который возвращает a + 1 (тоесть 6)</code></pre>
+
+<p>То, какую из двух форм использовать для определения свойств, зависит от вашего стиля программирования и стоящей перед вами задачи. Если вы уже используете инициализатор объекта для определения прототипа, то, скорее всего, в большинстве случаев, вы воспользуетесь первой формой. Она более компактна и естественна. Однако, не редко, вторая форма является единственно возможной, в случаях, когда вы работаете с существующим объектом без доступа к его определению. Вторая форма наилучшим образом отражает динамическую природу JavaScript — но может сделать код сложным для чтения и понимания.</p>
+
+<h2 id="Удаление_свойств">Удаление свойств</h2>
+
+<p>Вы можете удалить свойство используя оператор <code>delete</code>. Следующий код показывает как удалить свойство.</p>
+
+<pre class="brush: js">//Creates a new object, myobj, with two properties, a and b.
+var myobj = new Object;
+myobj.a = 5;
+myobj.b = 12;
+
+//Removes the a property, leaving myobj with only the b property.
+delete myobj.a;
+</pre>
+
+<p>Вы также можете воспользоваться <code>delete</code> чтобы удалить глобальную переменную, если ключевое слово <code>var</code> не было использовано при ее объявлении:</p>
+
+<pre class="brush: js">g = 17;
+delete g;
+</pre>
+
+<p>Смотри <code>{{ web.link("Expressions_and_operators#delete", "delete") }}</code> чтобы получить дополнительную информацию.</p>
+
+<h2 id="Сравнение_объектов">Сравнение объектов</h2>
+
+<p>В JavaScript объекты имеют ссылочный тип. Два отдельных объекта никогда не будут равными, даже если они имеют равный набор свойств. Только сравнение двух ссылок на один и тотже объект вернет true.</p>
+
+<pre class="brush: js"><code>// Две переменных ссылаются на два объекта с одинаковыми свойствами
+var fruit = {name: 'apple'};
+var fruitbear = {name: 'apple'};
+
+fruit == fruitbear; // вернет false
+fruit === fruitbear; // вернет false</code></pre>
+
+<pre class="brush: js"><code>// Две переменные ссылаются на один общий объект
+var fruit = {name: 'apple'};
+var fruitbear = fruit; // присвоим переменной fruitbear ссылку на объект fruit
+
+// теперь fruitbear и fruit ссылаются на один и тот же объект
+fruit == fruitbear; // вернет true
+fruit === fruitbear; // вернет true</code></pre>
+
+<pre class="brush: js"><code>fruit.name = 'grape';
+console.log(fruitbear); // вернет { name: "grape" } вместо { name: "apple" }</code></pre>
+
+<p>Подробнее смотрите <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">Операторы сравнения</a>.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Для детального изучения читайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">подробнее об объектной модели JavaScript</a>.</li>
+ <li>Для изучения классов ECMAScript 2015 (новый способ определения объектов), читайте главу <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes">классы JavaScript</a>.</li>
+</ul>
+
+<div>{{PreviousNext("Web/JavaScript/Guide/Keyed_collections", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}</div>
diff --git a/files/ru/web/javascript/guide/введение_в_javascript/index.html b/files/ru/web/javascript/guide/введение_в_javascript/index.html
new file mode 100644
index 0000000000..1b49c45ddb
--- /dev/null
+++ b/files/ru/web/javascript/guide/введение_в_javascript/index.html
@@ -0,0 +1,159 @@
+---
+title: Введение в JavaScript
+slug: Web/JavaScript/Guide/Введение_в_JavaScript
+tags:
+ - Beginner
+ - Guide
+ - JavaScript
+translation_of: Web/JavaScript/Guide/Introduction
+---
+<p>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Values,_variables,_and_literals")}}</p>
+
+<div class="summary">
+<p>Данная глава является введением в JavaScript и рассматривает некоторые его фундаментальные концепции.</p>
+</div>
+
+<h2 id="Что_вам_уже_следует_знать">Что вам уже следует знать?</h2>
+
+<p>В данном руководстве предполагается, что вы имеете:</p>
+
+<ul>
+ <li>Общее понимание Internet и World Wide Web ({{Glossary("WWW")}}).</li>
+ <li>Хорошее знание HyperText Markup Language ({{Glossary("HTML")}}).</li>
+ <li>Некоторый опыт программирования. Если вы являетесь новичком в программировании, то ознакомьтесь с руководствами, приведенными на странице по <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript">JavaScript</a>.</li>
+</ul>
+
+<h2 id="Где_можно_найти_информацию_о_JavaScript">Где можно найти информацию о JavaScript?</h2>
+
+<p>Документация по JavaScript на MDN включает:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Learn">Изучение Web</a> предоставляет информацию для начинающих и вводит в базовые концепции программирования и Internet.</li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide">Руководство по JavaScript</a> (данное руководство) предоставляет обзор JavaScript и его объектов.</li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference">Справочник по JavaScript</a> предоставляет подробную информацию по JavaScript.</li>
+</ul>
+
+<p>Если вы являетесь новичком в JavaScript, то начните с <a href="https://developer.mozilla.org/ru/docs/Learn">Изучение Web</a> и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide">Руководство по JavaScript</a>. Как только вы освоите фундаментальные концепции, используйте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference">Справочник по JavaScript</a> для того, чтобы получить более подробную информацию о конкретных объектах или операторах.</p>
+
+<h2 id="Что_такое_JavaScript">Что такое JavaScript?</h2>
+
+<p>JavaScript — это кросс-платформенный, объектно-ориентированный скриптовый язык, являющийся небольшим и легковесным. Внутри среды исполнения JavaScript может быть связан с объектами данной среды и предоставлять программный контроль над ними.</p>
+
+<p>JavaScript включает стандартную библиотеку объектов, например, <code>Array</code>, <code>Date</code> и <code>Math</code>, а также базовый набор языковых элементов, например, операторы и управляющие конструкции. Ядро JavaScript может быть расширено для различных целей путем добавления в него новых объектов, например:</p>
+
+<ul>
+ <li>JavaScript на стороне клиента расширяет ядро языка, предоставляя объекты для контроля браузера и его Document Object Model (DOM). Например, клиентские расширения позволяют приложению размещать элементы в форме HTML и обрабатывать пользовательские события, такие как щелчок мыши, ввод данных в форму и навигация по страницам.</li>
+ <li>JavaScript на стороне сервера расширяет ядро языка, предоставляя объекты для запуска JavaScript на сервере. Например, расширение на стороне сервера позволяет приложению соединяться с базой данных, обеспечивать непрерывность информации между вызовами приложения или выполнять манипуляции над файлами на сервере.</li>
+</ul>
+
+<h2 id="JavaScript_и_Java">JavaScript и Java</h2>
+
+<p>JavaScript и Java похожи в одних отношениях, но фундаментально отличны в других. Javascript напоминает Java, но не имеет статической типизации и строгой проверки типов, которыми обладает Java. JavaScript следует большей части синтаксиса Java в выражениях, соглашениях об именовании и основного потока управления конструкциями, поэтому он был переименован из LiveScript в JavaScript.</p>
+
+<p>В отличие от системы скомпилированных классов Java, построенной на объявлениях, JavaScript поддерживает систему исполнения, основанную на небольшом числе типов данных, представляющих числовые, логические и строковые значения. JavaScript имеет объектную модель на базе прототипов вместо более общей модели на базе классов. Модель объектов на базе прототипов предоставляет динамическое наследование, т.е. то, что наследуется, может отличаться для отдельных объектов. JavaScript также поддерживает функции без каких-либо специальных декларативных требований. Функции могут быть свойствами объектов, выполняться как свободно-типизированные методы.</p>
+
+<p>По сравнению с Java, JavaScript является языком с очень свободной формой. Вам не надо объявлять переменные, классы и методы. Вам не надо беспокоиться о том, являются ли методы публичными (public), приватными (private) или защищенными (protected), а также вам не надо реализовывать интерфейсы. Переменные, параметры и возвращаемые функциями типы не являются явно типизированными.</p>
+
+<p>Java — это язык программирования, основанный на классах и предназначенный для быстрого выполнения и безопасности типов. Безопасность типов означает, например, что вы не можете привести тип integer к типу object reference или получить доступ к приватной памяти, изменяя байт-код Java. Ориентированная на классы модель Java означает, что программы состоят исключительно из классов и их методов. Наследование классов и строгая типизация в Java обычно требуют тесно связанные иерархии объектов. Эти требования делают программирование на Java более комплексным, чем программирование на JavaScript.</p>
+
+<p>По духу JavaScript происходит от небольших, динамически типизированных языков, таких как HyperTalk и dBASE. Эти скриптовые языки предлагают инструменты программирования для гораздо более широкой аудитории благодаря более простому синтаксису, специализированной встроенной функциональности и минимальным требованиям для создания объектов.</p>
+
+<table class="standard-table">
+ <caption>Сравнение JavaScript и Java</caption>
+ <thead>
+ <tr>
+ <th scope="col">JavaScript</th>
+ <th scope="col">Java</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Объектно-ориентированный. Нет различий между типами объектов. Наследование реализовано через механизм прототипов, свойства и методы могут быть добавлены в любой объект динамически.</td>
+ <td>На базе классов. Объекты делятся на классы и экземпляры с наследованием через классовую иерархию. Классы и экземпляры не могут иметь динамически добавленные свойства или методы.</td>
+ </tr>
+ <tr>
+ <td>Типы данных переменных не объявляются (динамическая типизация).</td>
+ <td>Типы данных переменных должны быть объявлены (статическая типизация).</td>
+ </tr>
+ <tr>
+ <td>Не может автоматически записывать на жесткий диск.</td>
+ <td><span style="background-color: rgba(212, 221, 228, 0.14902);">Может автоматически записывать на жесткий диск.</span></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Для получения дополнительной информации о различиях между JavaScript и Java, прочитайте <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">Details of the object model</a>.</p>
+
+<h2 id="JavaScript_и_спецификация_ECMAScript">JavaScript и спецификация ECMAScript</h2>
+
+<p>JavaScript стандартизирован европейской ассоциацией <a href="http://www.ecma-international.org/">Ecma International</a>, деятельность которой посвящена стандартизации информационных и коммуникационных систем (изначально ECMA являлся акронимом European Computer Manufacturers Association). Эта стандартизированная версия JavaScript, называемая ECMAScript, работает одинаково во всех приложениях, поддерживающих стандарт. Компании могут использовать открытый стандарт языка, чтобы разработать собственную реализацию JavaScript. Стандарт ECMAScript задокументирован в спецификации ECMA-262. Чтобы узнать больше информации о разных версиях JavaScript и ECMAScript, прочитайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/New_in_JavaScript">Что нового в JavaScript</a>.</p>
+
+<p>Стандарт ECMA-262 также утвержден <a href="http://www.iso.org/iso/home.html">ISO</a> (International Organization for Standardization) как ISO-16262. Вы можете найти спецификацию на <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">сайте Ecma International</a>. Спецификация ECMAScript не описывает Document Object Model (DOM), которая стандартизирована <a href="http://www.w3.org/">World Wide Web Consortium (W3C)</a>. DOM определяет способ для доступа к объектам HTML документа из вашего скрипта. Чтобы получить более точное представление о различных технологиях, используемых при программировании на JavaScript, прочитайте <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/JavaScript_technologies_overview">Обзор JavaScript</a>.</p>
+
+<h3 id="Документация_JavaScript_против_спецификации_ECMAScript">Документация JavaScript против спецификации ECMAScript</h3>
+
+<p>Спецификация ECMAScript — это набор требований, касающихся реализации ECMAScript. Она предназначена для реализации языковых возможностей, соответствующих стандарту, в вашей реализации ECMAScript или движке (например, SpiderMonkey в Firefox или V8 в Google Chrome).</p>
+
+<p>Документ ECMAScript не предназначен для помощи программистам в создании скриптов; чтобы получить информацию о том, как писать скрипты, используйте документацию JavaScript.</p>
+
+<p>Спецификация ECMAScript использует терминологию и синтаксис, которые могут быть незнакомы JavaScript-программистам. Хотя описание языка может отличаться в ECMAScript, но сам язык остается таким же. JavaScript поддерживает всю функциональность, описанную в спецификации ECMAScript.</p>
+
+<p>Документация JavaScript описывает аспекты языка, являющиеся подходящими для JavaScript-программиста.</p>
+
+<h2 id="Начинаем_знакомство_с_JavaScript">Начинаем знакомство с JavaScript</h2>
+
+<p>Все, что вам нужно для знакомства с JavaScript — это современный браузер. Данное руководство включает некоторые возможности JavaScript, которые на данный момент доступны только в последних версиях Firefox, поэтому рекомендуется использовать последнюю версию Firefox.</p>
+
+<p>В Firefox встроены два инструмента, полезных для экспериментирования с JavaScript: Web Console и Scratchpad.</p>
+
+<h3 id="Web_Console">Web Console</h3>
+
+<p><a href="https://developer.mozilla.org/ru/docs/Tools/Web_Console">Web Console</a> отображает информацию о текущей загруженной веб-странице, а также включает <a href="https://developer.mozilla.org/ru/docs/Tools/Web_Console#The_command_line_interpreter">командную строку</a>, которую вы можете использовать, чтобы выполнить выражения JavaScript на текущей странице.</p>
+
+<p>Чтобы открыть Web Console, выберите "Web Console" из меню "Web Developer", которое находится под меню "Tools" в Firefox. Консоль появится в нижней части окна браузера. Вдоль нижней части консоли размещается командная строка, которую вы можете использовать для ввода JavaScript, результат выполнения появится на панели выше:</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/16569/2019-04-04_00-15-29.png" style="display: block; height: 1824px; margin-left: auto; margin-right: auto; width: 2784px;"></p>
+
+
+
+<pre>function greetMe(yourName) {
+ alert('Hello ' + yourName);
+}
+<code>console.log(eval('3 + 5'));</code></pre>
+
+
+
+<h3 id="Scratchpad">Scratchpad</h3>
+
+<p>Web Console отлично подходит для выполнения одиночных строк JavaScript, но хотя вы можете выполнить и несколько строк, это не очень удобно, к тому же вы не можете сохранить ваш код, используя Web Console. Поэтому для более комплексных примеров <a href="https://developer.mozilla.org/ru/docs/Tools/%D0%A7%D0%B5%D1%80%D0%BD%D0%BE%D0%B2%D0%B8%D0%BA">Scratchpad</a> является более подходящим инструментом.</p>
+
+<p>Чтобы открыть Scratchpad(<kbd>Shift</kbd>+<kbd>F4</kbd>), выберите "Scratchpad" из меню "Web Developer", которое находится под меню "Tools" в Firefox. Блокнот будет открыт в отдельном окне, вы можете использовать его для создания и выполнения JavaScript в браузере. Вы также можете сохранять ваши скрипты на жесткий диск, а потом загружать их.</p>
+
+<p>Если вы выберете "Display", то код в вашем блокноте будет выполнен в браузере, а результат вставлен обратно в блокнот как комментарий:</p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/13468/scratchpad.png" style="display: block; height: 375px; margin-left: auto; margin-right: auto; width: 631px;"></p>
+
+<h3 id="Hello_world">Hello world</h3>
+
+<p>Чтобы начать писать JavaScript код откройте Scratchpad и напишите свой первый "Hello World!" код:</p>
+
+<pre><code>(function(){
+ "use strict";
+ /* Start of your code */
+ function greetMe(yourName) {
+ alert('Hello ' + yourName);
+ }
+
+ greetMe('World');
+ /* End of your code */
+})();</code></pre>
+
+<p>Выберите код на панели и зажмите Ctrl + R, чтобы открыть код в браузере! На следующих страницах мы изучим синтаксис  и возможности JS, чтобы вы могли написать сложное более сложное приложение. Не забывайте добавлять перед кодом <code>(function(){"use strict";</code> и <code>})();</code>  после. вы узнаете, что это означает, а пока считайте, что это —</p>
+
+<p>1.  Значительно улучшает производительность</p>
+
+<p>2.  Предотвращает структуры, которые могут запутать вас на начальном этапе.</p>
+
+<p>3.  Предотвращает взаимодействие фрагментов кода, выполняемых в консоли.</p>
+
+<p>{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}</p>
diff --git a/files/ru/web/javascript/guide/об_этом_руководстве/index.html b/files/ru/web/javascript/guide/об_этом_руководстве/index.html
new file mode 100644
index 0000000000..397327911c
--- /dev/null
+++ b/files/ru/web/javascript/guide/об_этом_руководстве/index.html
@@ -0,0 +1,68 @@
+---
+title: Об этом руководстве
+slug: Web/JavaScript/Guide/Об_этом_руководстве
+---
+<p> </p>
+<p><span id="result_box" lang="ru"><span class="hps">JavaScript</span> <span class="hps">является</span> <span class="hps">кросс-платформенным,</span> <span class="hps">объектно-ориентированный</span> <span class="hps">язык сценариев.</span> <span class="hps">Это руководство</span> <span class="hps">объясняет</span> <span class="hps">все, что нужно</span> <span class="hps">знать об использовании</span> <span class="hps">JavaScript.</span></span></p>
+<h2 id="Новые_возможности_в_версиях_JavaScript"><span class="short_text" id="result_box" lang="ru"><span class="hps">Новые возможности в</span> <span class="hps">версиях</span> <span class="hps">JavaScript</span></span></h2>
+<pre class="script" style="font-size: 16px;">/* Note: To add a link to new JavaScript version description
+add version number to versionList variable below. The page linked to
+must reside in /en/JavaScript/New_in_JavaScript/N, where N is version number. */
+
+var versionList = ["1.5", "1.6", "1.7", "1.8", "1.8.1", "1.8.5"];
+var s = "";
+&lt;ul&gt;
+ foreach (var i in versionList){
+ let s = "/en/JavaScript/New_in_JavaScript/" .. i;
+  &lt;li&gt;web.link(s, wiki.getPage(s).title)&lt;/li&gt;;
+ }
+&lt;/ul&gt;;
+</pre>
+<h2 id="То_что_вы_должны_уже_знать"><span class="short_text" id="result_box" lang="ru"><span class="hps">То, что вы</span> <span class="hps">должны уже знать</span></span></h2>
+<p>This guide assumes you have the following basic background:</p>
+<ul> <li><span id="result_box" lang="ru"><span>Общее представление о</span> <span class="hps">сети Интернет и</span> <span class="hps atn">World Wide Web (</span><span>WWW).</span></span></li> <li><span id="result_box" lang="ru"><span class="hps">Хорошие</span> <span class="hps">знания</span> <span class="hps">языка</span> <span class="hps">гипертекстовой разметки</span> <span class="hps">(HTML).</span></span></li>
+</ul>
+<p><span id="result_box" lang="ru"><span class="hps">Некоторый опыт программирования</span> <span class="hps">на языках</span><span>, таких как</span> <span class="hps">C</span> <span class="hps">или</span> <span class="hps">Visual Basic,</span> <span class="hps">полезен,</span> <span class="hps">но не обязателен.</span></span></p>
+<h2 id="Версии_JavaScript">Версии JavaScript</h2>
+<table class="standard-table"> <caption>Таблица №1 версии JavaScript и веб-браузера Navigator</caption> <thead> <tr> <th scope="col">JavaScript version</th> <th scope="col">Navigator version</th> </tr> </thead> <tbody> <tr> <td>JavaScript 1.0</td> <td>Navigator 2.0</td> </tr> <tr> <td>JavaScript 1.1</td> <td>Navigator 3.0</td> </tr> <tr> <td>JavaScript 1.2</td> <td>Navigator 4.0-4.05</td> </tr> <tr> <td>JavaScript 1.3</td> <td>Navigator 4.06-4.7x</td> </tr> <tr> <td>JavaScript 1.4</td> <td> </td> </tr> <tr> <td>JavaScript 1.5</td> <td>Navigator 6.0<br> <span class="short_text" id="result_box" lang="ru"><span class="hps atn">Mozilla (</span><span>браузер с открытым</span> <span class="hps">исходным кодом)</span></span></td> </tr> <tr> <td>JavaScript 1.6</td> <td><a href="/en/Firefox_1.5_for_developers" title="en/Firefox_1.5_for_developers">Firefox 1.5</a>, other Mozilla 1.8-based products</td> </tr> <tr> <td>JavaScript 1.7</td> <td><a href="/en/Firefox_2_for_developers" title="en/Firefox_2_for_developers">Firefox 2</a>, other Mozilla 1.8.1-based products</td> </tr> <tr> <td>JavaScript 1.8</td> <td><a href="/en/Firefox_3_for_developers" title="en/Firefox_3_for_developers">Firefox 3</a>, other Gecko 1.9-based products</td> </tr> </tbody>
+</table>
+<p> </p>
+<div class="almost_half_cell" id="gt-res-content"> <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="ru"><span class="hps">Каждая версия</span> <span class="hps">Netscape</span> <span class="hps">Enterprise Server,</span> <span class="hps">также поддерживает</span> <span class="hps">различные версии</span> <span class="hps">JavaScript.</span> <span class="hps">Чтобы помочь вам</span> <span class="hps">писать сценарии</span><span>, которые совместимы</span> <span class="hps">с несколькими версиями</span> <span class="hps">Enterprise Server</span><span>, это руководство</span> <span class="hps">использует</span> <span class="hps">аббревиатуру</span> <span class="hps">для обозначения</span> <span class="hps">версии сервера</span><span>, в котором каждая</span> <span class="hps">функция была реализована</span><span>.</span></span></div>
+</div>
+<table class="standard-table"> <caption>Таблица №2 Аббревиатуры в версиях Netscape Enterprise Server</caption> <thead> <tr> <th scope="col">Аббревиатура</th> <th scope="col">Версия Server Enterprise</th> </tr> </thead> <tbody> <tr> <td>NES 2.0</td> <td>Netscape Enterprise Server 2.0</td> </tr> <tr> <td>NES 3.0</td> <td>Netscape Enterprise Server 3.0</td> </tr> </tbody>
+</table>
+<h2 id="Где_найти_информацию_о_JavaScript">Где найти информацию о JavaScript</h2>
+<p><span id="result_box" lang="ru"><span class="hps">JavaScript</span> <span class="hps">документация включает в себя</span> <span class="hps">следующие книги:</span></span></p>
+<ul> <li><a href="/en/JavaScript/Guide" title="en/Core_JavaScript_1.5_Guide">JavaScript Guide</a> <span id="result_box" lang="ru"><span class="hps atn">(</span><span>это руководство</span><span>) предоставляет информацию о</span> <span class="hps">языке</span> <span class="hps">JavaScript</span> <span class="hps">и его объектах.</span></span></li> <li><a href="/en/JavaScript/Reference" title="en/JavaScript/Reference">JavaScript Reference</a> <span class="short_text" id="result_box" lang="ru"><span class="hps">содержит справочный материал о</span> <span class="hps">языке</span> <span class="hps">JavaScript.</span></span></li>
+</ul>
+<p><span id="result_box" lang="ru"><span class="hps">Если</span> <span class="hps">вы новичок в</span> <span class="hps">JavaScript</span><span>, начните с</span></span> <a href="/en/JavaScript/Guide" title="en/Core_JavaScript_1.5_Guide"><span id="result_box" lang="ru"><span class="hps">руководства</span> <span class="hps">JavaScript.</span></span></a> <span id="result_box" lang="ru"><span class="hps">Если у вас есть</span> <span class="hps">твердое понимание</span> <span class="hps">основы</span><span>, вы можете использовать</span></span> <a href="/en/JavaScript/Reference" title="en/JavaScript/Reference">Справочник по JavaScript</a> <span id="result_box" lang="ru"><span>чтобы получить</span> <span class="hps">более подробную информацию</span> <span class="hps">на отдельных</span> <span class="hps">объектах и ​​операторах.</span></span></p>
+<h2 id="Советы_для_изучения_JavaScript"><span class="short_text" id="result_box" lang="ru"><span class="hps">Советы</span> <span class="hps">для изучения</span> <span class="hps">JavaScript</span></span></h2>
+<p><span id="result_box" lang="ru"><span class="hps">Начало работы с</span> <span class="hps">JavaScript</span> <span class="hps">очень просто:</span> <span class="hps">все, что вам</span> <span class="hps">нужно, это</span> <span class="hps">современный</span> <span class="hps">веб-браузер.</span> <span class="hps">Это руководство</span> <span class="hps">включает в себя некоторые</span> <span class="hps">функции</span> <span class="hps">JavaScript</span><span>, которые только</span> <span class="hps">в настоящее время</span> <span class="hps">доступна в последней</span> <span class="hps">версии</span> <span class="hps atn">Firefox (</span><span>и других</span> браузеров с движком Gecko<span class="hps">)</span><span>, поэтому </span></span><span id="result_box" lang="ru"><span class="hps">рекомендуется</span></span><span id="result_box" lang="ru"><span> использование</span> <span class="hps">самых</span> <span class="hps">последних версий</span> <span class="hps">Firefox</span><span class="hps">.</span></span></p>
+<h3 id="Интерактивный_интерпретатор"><span class="short_text" id="result_box" lang="ru"><span>Интерактивный интерпретатор</span></span></h3>
+<p>Диалоговый JavaScript незамедлительно - неоценимая помощь изучению языка, так как это предоставляет вам возможность пробовать вещи в интерактивном режиме без необходимости сохранить файл и обновить страницу. Ошибочная Консоль Firefox, доступная через меню Инструменты, обеспечивает простой путь пробовать диалоговый JavaScript: Только вводят линию кода и щелкают кнопку "Evaluate".</p>
+<p><img alt="Image:ErrorConsole.png" class="internal" src="/@api/deki/files/192/=ErrorConsole.png"></p>
+<h3 id="Firebug">Firebug</h3>
+<p>Более передовой диалоговый незамедлительно - доступный использующий <a class="external" href="http://www.getfirebug.com/">Firebug</a>, дополнение к Firefox. Выражения, которые вы печатаете, интерпретируются как объекты <span id="result_box" lang="ru"><span class="hps">и</span> <span class="hps">связанные с</span> <span class="hps">другими частями</span> <span class="hps">Firebug.</span></span> <span id="result_box" lang="ru"><span class="hps">Например, вы</span> <span class="hps">можете добавить</span> <span class="hps">5 плюс</span> <span class="hps">5,</span> <span class="hps">изменять регистр</span> <span class="hps">строки</span><span>,</span></span> get a clickable link to the document, or get a link to an element:</p>
+<p><img alt="" class="internal" src="/@api/deki/files/5188/=FirebugCommandLine.PNG" style="width: 728px; height: 281px;"></p>
+<p><span id="result_box" lang="ru"><span class="hps">Использование</span> <span class="hps">стрелки на</span> <span class="hps">правом нижнем углу</span> <span class="hps">дает</span> <span class="hps">команду</span> <span class="hps">редактор для</span> <span class="hps">многострочного</span> <span class="hps">сценариев.</span></span></p>
+<p>Firebug also provides an advanced DOM inspector, a JavaScript debugger, a profiling tool and various other utilities. JavaScript code running in a Web page can call, <code>console.log()</code>, a function that prints its arguments to the Firebug console.</p>
+<p>Many of the examples in this guide use <code>alert()</code> to show messages as they execute. If you have Firebug installed you can use <code>console.log()</code> in place of <code>alert()</code> when running these examples.</p>
+<h2 id="Document_conventions">Document conventions</h2>
+<p>JavaScript applications run on many operating systems; the information in this book applies to all versions. File and directory paths are given in Windows format (with backslashes separating directory names). For Unix versions, the directory paths are the same, except that you use slashes instead of backslashes to separate directories.</p>
+<p>This guide uses uniform resource locators (URLs) of the following form:</p>
+<p><code>http://<em>server</em>.<em>domain</em>/<em>path</em>/<em>file</em>.html</code></p>
+<p>In these URLs, <em>server</em> represents the name of the server on which you run your application, such as <code>research1</code> or <code>www</code>; <em>domain</em> represents your Internet domain name, such as <code>netscape.com</code> or <code>uiuc.edu</code>; <em>path</em> represents the directory structure on the server; and <em>file</em><code>.html</code> represents an individual file name. In general, items in italics in URLs are placeholders and items in normal monospace font are literals. If your server has Secure Sockets Layer (SSL) enabled, you would use <code>https</code> instead of <code>http</code> in the URL.</p>
+<p>This guide uses the following font conventions:</p>
+<ul> <li><code>The monospace font</code> is used for sample code and code listings, API and language elements (such as method names and property names), file names, path names, directory names, HTML tags, and any text that must be typed on the screen. (<code><em>Monospace italic font</em></code> is used for placeholders embedded in code.)</li> <li><em>Italic type</em> is used for book titles, emphasis, variables and placeholders, and words used in the literal sense.</li> <li><strong>Boldface</strong> type is used for glossary terms.</li>
+</ul>
+<pre class="script" style="font-size: 16px;">autoPreviousNext("JSGChapters");
+wiki.languages({
+ "zh-tw": "zh_tw/Core_JavaScript_1.5_教學/關於",
+  "es": "es/Gu\u00eda_JavaScript_1.5/Acerca_de_esta_gu\u00eda",
+  "fr": "fr/Guide_JavaScript_1.5/\u00c0_propos",
+  "ja": "ja/Core_JavaScript_1.5_Guide/About",
+  "ko": "ko/Core_JavaScript_1.5_Guide/About",
+  "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/O_tym_przewodniku",
+  "zh-cn": "cn/Core_JavaScript_1.5_Guide/\u5173\u4e8e"
+})
+</pre>
diff --git a/files/ru/web/javascript/guide/циклы_и_итерации/index.html b/files/ru/web/javascript/guide/циклы_и_итерации/index.html
new file mode 100644
index 0000000000..231bc70804
--- /dev/null
+++ b/files/ru/web/javascript/guide/циклы_и_итерации/index.html
@@ -0,0 +1,362 @@
+---
+title: Циклы и итерации
+slug: Web/JavaScript/Guide/Циклы_и_итерации
+tags:
+ - for
+ - операторы цикла
+ - циклы
+translation_of: Web/JavaScript/Guide/Loops_and_iteration
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</div>
+
+<p class="summary">Циклы - простой способ сделать какое-то действие несколько раз. Эта глава <a href="/ru/docs/Web/JavaScript/Guide">руководства JavaScript Guide</a> познакомит вас с различными операторами доступными в JavaScript.</p>
+
+<p>Вы можете представить цикл в виде компьютеризированной версии игры, где вы говорите кому-то сделать X шагов в одном направлении, затем Y шагов в другом; для примера, идея игры "Иди 5 шагов на восток" может быть выражена в виде цикла:</p>
+
+<pre class="brush: js">var step;
+for (step = 0; step &lt; 5; step++) {
+ // Запускается 5 раз, с шагом от 0 до 4.
+ console.log('Идём 1 шаг на восток');
+}
+</pre>
+
+<p>Существует множество различных видов циклов, но все они по сути делают тоже самое: повторяют какое-либо действие несколько раз (не забывайте про нулевой раз повторения, отсчёт в массиве начинается с 0). Различные по строению циклы предлагают разные способы для определения начала и окончания цикла. Для различных задач программирования существуют свои операторы цикла, с помощью которых они решаются намного проще.</p>
+
+<p>Операторы предназначеные для организации циклов в  JavaScript:</p>
+
+<ul>
+ <li>{{anch("Цикл_for")}}</li>
+ <li>{{anch("Цикл_do...while")}}</li>
+ <li>{{anch("Цикл_while")}}</li>
+ <li>{{anch("Метка_(label)")}}</li>
+ <li>{{anch("break")}}</li>
+ <li>{{anch("continue")}}</li>
+ <li>{{anch("for...in")}}</li>
+ <li>{{anch("for...of")}}</li>
+</ul>
+
+<h2 id="Цикл_for">Цикл <code>for</code> </h2>
+
+<p>Цикл <strong><a href="/ru/docs/Web/JavaScript/Reference/Statements/for"><code>for</code> </a> </strong>повторяет действия, пока не произойдёт какое-либо специальное событие завершения цикла. Оператор <code>for</code> в JavaScript аналогичен оператору for в Java и C. Объявление оператора <code>for</code> выглядит следующим образом:</p>
+
+<pre class="syntaxbox">for ([начало]; [условие]; [шаг]) выражения
+</pre>
+
+<p>При его выполнении происходит следущее:</p>
+
+<ol>
+ <li>Выполняется выражение <code>начало</code>, если оно указано. Это выражение обычно инициализирует один или несколько счётчиков, но синтаксис позволяет выражению быть любой сложности. Также используется для объявления переменных.</li>
+ <li>Выполняется <code>условие</code>. Если <code>условие</code> истинно, то выполняются <code>выражения</code>. Если оно ложно, цикл <code>for</code> прерывается. Если же <code>условие</code> полностью пропущено, то оно считается истинным.</li>
+ <li>Выполняются <code>выражения</code>. Чтобы выполнить несколько выражений, используются блок-выражение  <code>{ ... }</code>  для группировки выражений.</li>
+ <li>Обновляется <code>шаг</code>, если он есть, а затем управление возвращается к шагу 2.</li>
+</ol>
+
+<h3 id="Пример"><strong>Пример</strong></h3>
+
+<p>В следующей функции есть цикл <code>for</code>, который считает количество выбранных жанров в списке прокрутки (элемент {{HTMLElement("select")}}, который позволяет выбрать несколько элементов). Цикл <code>for</code> объявляет переменную <code>i</code> и задаёт ей значение 0. Также он проверяет, что <code>i</code> меньше количества элементов в элементе <code>&lt;select&gt;</code>, выполняет оператор <code>if</code> и увеличивает <code>i</code> на один после каждого прохода цикла.</p>
+
+<pre class="brush: html">&lt;form name="selectForm"&gt;
+  &lt;p&gt;
+    &lt;label for="musicTypes"&gt;Выберите некоторые жанры музыки, а затем нажмите на кнопку ниже:&lt;/label&gt;
+    &lt;select id="musicTypes" name="musicTypes" multiple="multiple"&gt;
+      &lt;option selected="selected"&gt;R&amp;B&lt;/option&gt;
+      &lt;option&gt;Jazz&lt;/option&gt;
+      &lt;option&gt;Blues&lt;/option&gt;
+      &lt;option&gt;New Age&lt;/option&gt;
+      &lt;option&gt;Classical&lt;/option&gt;
+      &lt;option&gt;Opera&lt;/option&gt;
+    &lt;/select&gt;
+  &lt;/p&gt;
+  &lt;p&gt;&lt;input id="btn" type="button" value="Как много выбрано?" /&gt;&lt;/p&gt;
+&lt;/form&gt;
+
+&lt;script&gt;
+function howMany(selectObject) {
+ var numberSelected = 0;
+ for (var i = 0; i &lt; selectObject.options.length; i++) {
+ if (selectObject.options[i].selected) {
+ numberSelected++;
+ }
+ }
+ return numberSelected;
+}
+
+var btn = document.getElementById("btn");
+btn.addEventListener("click", function(){
+ alert('Выбрано элементов: ' + howMany(document.selectForm.musicTypes))
+});
+&lt;/script&gt;
+
+</pre>
+
+<h2 id="Цикл_do...while">Цикл <code>do...while</code> </h2>
+
+<p>Цикл <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/do...while">do...while</a></code> повторяется пока заданное условие истинно. Оператор <code>do...while</code> имеет вид:</p>
+
+<pre class="syntaxbox">do
+ выражения
+while (условие);
+</pre>
+
+<p><code>выражения</code> выполняются пока <code>условие</code> истинно. Чтобы использовать несколько выражений, используйте блок-выражение  <code>{ ... }</code>, чтобы сгруппировать их. Если <code>условие</code> истинно, <code>выражения</code> выполнятся снова. В конце каждого прохода <code>условие</code> проверяется. Если <code>условие</code> ложно, выполнение приостанавливается и управление передаётся выражению после <code>do...while</code>.</p>
+
+<h3 id="Пример_2"><strong>Пример</strong></h3>
+
+<p>В следующем примере, цикл <code>do</code> выполнится минимум 1 раз и запускается снова, пока <code>i</code> меньше 5.</p>
+
+<pre class="brush: js">do {
+ i += 1;
+ console.log(i);
+} while (i &lt; 5);</pre>
+
+<h2 id="Цикл_while">Цикл <code>while</code></h2>
+
+<p>Цикл <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/while">while</a></code> выполняет выражения пока условие истинно. Выглядит он так:</p>
+
+<pre class="syntaxbox">while (условие)
+ выражения
+</pre>
+
+<p>Если <code>условие</code> становится ложным, выражения в цикле перестают выполняться и управление переходит к выражению после цикла.</p>
+
+<p><code>Условие</code> проверяется на истинность до того, как выполняются <code>выражения</code> в цикле. Если <code>условие</code> истинно, выполняются <code>выражения</code>, а затем условие проверяется снова. Если <code>условие</code> ложно, выполнение приостанавливается и управление переходит к выражению после <code>while</code>.</p>
+
+<p>Чтобы использовать несколько выражений, используйте блок выражение <code>{ ... }</code>, чтобы сгруппировать их.</p>
+
+<h3 id="Пример_1"><strong>Пример 1</strong></h3>
+
+<p>Следующий цикл <code>while</code> работает, пока <code>n</code> меньше трёх:</p>
+
+<pre class="brush: js">var n = 0;
+var x = 0;
+while (n &lt; 3) {
+ n++;
+ x += n;
+}
+</pre>
+
+<p>С каждой итерацией, цикл увеличивает <code>n</code> и добавляет это значение к <code>x</code>. Поэтому, <code>x</code> и <code>n</code> получают следующие значения:</p>
+
+<ul>
+ <li>После первого прохода: <code>n</code> = 1 и <code>x</code> = 1</li>
+ <li>После второго: <code>n</code> = 2 и <code>x</code> = 3</li>
+ <li>После третьего прохода: <code>n</code> = 3 и <code>x</code> = 6</li>
+</ul>
+
+<p>После третьего прохода, условие <code>n &lt; 3</code> становится ложным, поэтому цикл прерывается.</p>
+
+<h3 id="Пример_2_2"><strong>Пример 2</strong></h3>
+
+<p>Избегайте бесконечных циклов. Убедитесь, что условие цикла в итоге станет ложным; иначе, цикл никогда не прервётся. Выражения в следующем цикле <code>while</code> будут выполняться вечно, т.к. условие никогда не станет ложным:</p>
+
+<pre class="brush: js">while (true) {
+ console.log("Hello, world");
+}</pre>
+
+<h2 id="Метка_(label)">Метка (label)</h2>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Statements/label">Метка</a> представляет собой оператор с индентификатором, который позволяет вам ссылаться на какое-то место в вашей программе. Например, вы можете использовать метку, чтобы обозначить цикл, а затем использовать операторы <code>break</code> или <code>continue</code>, чтобы указать, должна ли программа прерывать цикл или продолжать его выполнение.</p>
+
+<p>Синтаксис метки следующий:</p>
+
+<pre class="syntaxbox">метка :
+ оператор
+</pre>
+
+<p>Значение <em>метки</em> может быть любым корректным JavaScript индентификатором, не являющимся зарезервированным словом. <code><em>Оператор</em></code><em>, </em>указанный вами после метки может быть любым выражением.</p>
+
+<h3 id="Пример_3"><strong>Пример</strong></h3>
+
+<p>В этом примере, метка <code>markLoop</code> обозначает цикл <code>while</code>.</p>
+
+<pre class="brush: js">markLoop:
+while (theMark == true) {
+ doSomething();
+}</pre>
+
+<h2 id="break"><code>break</code></h2>
+
+<p>Используйте оператор <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/break">break</a></code>, чтобы прерывать цикл, переключать управление или в сочетании с оператором метка.</p>
+
+<ul>
+ <li>Когда вы используете <code>break</code> без метки, он прерывает циклы <code>while</code>, <code>do-while</code> и <code>for</code> или сразу переключает управление к следующему выражению.</li>
+ <li>Когда вы используете <code>break</code> с меткой, он прерывает специально отмеченное выражение.</li>
+</ul>
+
+<p>Синтаксис оператора может быть таким:</p>
+
+<ol>
+ <li><code>break;</code></li>
+ <li><code>break <em>Метка</em>;</code></li>
+</ol>
+
+<p>Первая форма синтаксиса прерывает цикл совсем или переключает управление; вторая прерывает специально обозначенное выражение.</p>
+
+<h3 id="Пример_1_2"><strong>Пример</strong> <strong>1</strong></h3>
+
+<p>Следующий пример проходит по элементам в массиве, пока не найдёт элемент, чьё значение - <code>theValue</code>:</p>
+
+<pre class="brush: js">for (i = 0; i &lt; a.length; i++) {
+ if (a[i] == theValue) {
+ break;
+ }
+}</pre>
+
+<h3 id="Пример_2_Прерывание_метки"><strong>Пример 2: Прерывание метки</strong></h3>
+
+<pre class="brush: js">var x = 0;
+var z = 0
+labelCancelLoops: while (true) {
+ console.log("Внешний цикл: " + x);
+ x += 1;
+ z = 1;
+ while (true) {
+ console.log("Внутренний цикл: " + z);
+ z += 1;
+ if (z === 10 &amp;&amp; x === 10) {
+ break labelCancelLoops;
+ } else if (z === 10) {
+ break;
+ }
+ }
+}
+</pre>
+
+<h2 id="continue"><code>continue</code></h2>
+
+<p>Оператор <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/continue">continue</a></code> используется, чтобы шагнуть на шаг вперёд в циклах <code>while</code>, <code>do-while</code>, <code>for</code> или перейти к метке.</p>
+
+<ul>
+ <li>Когда вы используете <code>continue</code> без метки, он прерывает текущую итерацию циклов <code>while</code>, <code>do-while</code> и <code>for</code> и продолжает выполнение цикла со следующей итерации. В отличие от <code>break</code>, <code>continue</code> не прерывает выполнение цикла полностью. В цикле <code>while </code>он прыгает к условию. А в <code>for</code> увеличивает <code>шаг</code>.</li>
+ <li>Когда вы используете <code>continue</code> с меткой, он применяется к циклу с этой меткой.</li>
+</ul>
+
+<p>Синтаксис <code>continue</code> может выглядеть так:</p>
+
+<ol>
+ <li><code>continue;</code></li>
+ <li><code>continue <em>Метка</em></code><em><code>;</code></em></li>
+</ol>
+
+<h3 id="Пример_1_3"><strong>Пример 1</strong></h3>
+
+<p>Следующий пример показывает цикл <code>while</code> с оператором <code>continue</code>, который срабатывает, когда значение <code>i</code> равно 3. Таким образом, <code>n</code> получает значения 1, 3, 7 и 12.</p>
+
+<pre class="brush: js">var i = 0;
+var n = 0;
+while (i &lt; 5) {
+ i++;
+ if (i == 3) {
+ continue;
+ }
+ n += i;
+}
+</pre>
+
+<h3 id="Пример_2_3"><strong>Пример 2</strong></h3>
+
+<p>Выражение, отмеченное <em><code>checkiandj</code></em> содержит выражение отмеченное <em><code>checkj</code></em>. При встрече с <code>continue</code>, программа прерывает текущую итерацию <em><code>checkj</code></em> и начинает следующую итерацию. Каждый раз при встрече с <code>continue</code>, <em><code>checkj</code></em> переходит на следующую итерацию, пока условие возвращает <code>false</code>. Когда возвращается <code>false</code>, после вычисления остатка от деления <em><code>checkiandj</code></em>, <em><code>checkiandj</code></em> переходит на следующую итерацию, пока его условие возвращает <code>false</code>. Когда возвращается <code>false</code>, программа продолжает выполнение с выражения после <em><code>checkiandj</code></em>.</p>
+
+<p>Если у <code>continue</code> проставлена метка <em><code>checkiandj</code></em>, программа может продолжиться с начала метки <em><code>checkiandj</code></em>.</p>
+
+<pre class="brush: js">checkiandj:
+ while (i &lt; 4) {
+ console.log(i);
+ i += 1;
+ checkj:
+ while (j &gt; 4) {
+ console.log(j);
+ j -= 1;
+ if ((j % 2) != 0) {
+ continue checkj;
+ }
+ console.log(j + " чётное.");
+ }
+ console.log("i = " + i);
+ console.log("j = " + j);
+ }</pre>
+
+<h2 id="for...in"><code>for...in</code> </h2>
+
+<p>Оператор <a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in"><code>for...in</code></a> проходит по всем перечислимым свойствам объекта. JavaScript выполнит указанные выражения для каждого отдельного свойства. Цикл <code>for...in</code> выглядит так:</p>
+
+<pre class="syntaxbox">for (variable in object) {
+ выражения
+}
+</pre>
+
+<h3 id="Пример_4"><strong>Пример</strong></h3>
+
+<p>Следующая функция берёт своим аргументом объект и его имя. Затем проходит по всем свойствам объекта и возвращает строку, которая содержит имена свойств и их значения.</p>
+
+<pre class="brush: js">function dump_props(obj, obj_name) {
+ var result = "";
+ for (var i in obj) {
+ result += obj_name + "." + i + " = " + obj[i] + "&lt;br&gt;";
+ }
+ result += "&lt;hr&gt;";
+ return result;
+}
+</pre>
+
+<p>Для объекта <code>car</code> со свойствами <code>make</code> и <code>model</code>, <font face="Consolas, Liberation Mono, Courier, monospace"><em>результатом </em>будет</font>:</p>
+
+<pre class="brush: js">car.make = Ford
+car.model = Mustang
+</pre>
+
+<h3 id="Пример_№2">Пример №2</h3>
+
+<p>Также, по ключу можно выводить значение:</p>
+
+<pre>let obj = {model: 'AUDI A8', year: '2019', color: 'brown'}
+
+for (key in obj) {
+ console.log(`${key} = ${obj[key]}`);
+}
+// model = AUDI A8
+// year = 2019
+// color = brown</pre>
+
+<h3 id="Массивы"><strong>Массивы</strong></h3>
+
+<p>Хотя, очень заманчиво использовать <strong>for...in</strong> как способ пройтись по всем элементам {{jsxref("Array")}}, этот оператор возвращает имя свойств определённых пользователем помимо числовых индексов. Таким образом лучше использовать стандартный <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/for">for</a></code> для числовых индексов при взаимодействии с массивами, поскольку оператор <strong>for...in</strong> проходит по определённым пользователем свойствам в дополнение к элементам массива, если вы изменяете массив, например, добавляете свойства и методы.</p>
+
+<h3 id="Пример_5">Пример</h3>
+
+<pre>let arr = ['AUDI A8', '2019', 'brown'];
+arr.cost = '$100.000';
+
+for (key in arr) {
+ console.log(`${key} = ${arr[key]}`);
+}
+
+// 0 = AUDI A8
+// 1 = 2019
+// 2 = brown
+// cost = $100.000
+</pre>
+
+<h2 id="for...of"><code>for...of</code></h2>
+
+<p>Оператор <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> создаёт цикл, проходящий по <a href="/ru/docs/Web/JavaScript/Guide/iterable">перечислимым объектам</a> (включая {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, объект <a href="/ru/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments">arguments</a> и так далее), вызывая на каждой итерации функцию с выражениями, которые надо выполнить для получения значения каждого отдельного свойства.</p>
+
+<pre class="syntaxbox">for (<em>variable</em> of <em>object</em>) {
+ <em>выражения
+</em>}</pre>
+
+<p>Следующий пример показывает разницу между циклами <code>for...of</code> и <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/for...in" title="ru/docs/JavaScript/Reference/Statements/for...in">for...in</a></code>. Тогда как <code>for...in</code> проходит по именам свойств, <code>for...of</code> проходит по значениям свойств:</p>
+
+<pre class="brush:js">let arr = [3, 5, 7];
+arr.foo = "hello";
+
+for (let i in arr) {
+ console.log(i); // выводит "0", "1", "2", "foo"
+}
+
+for (let i of arr) {
+ console.log(i); // выводит "3", "5", "7"
+}
+</pre>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</p>
diff --git a/files/ru/web/javascript/index.html b/files/ru/web/javascript/index.html
new file mode 100644
index 0000000000..4d20b9462d
--- /dev/null
+++ b/files/ru/web/javascript/index.html
@@ -0,0 +1,151 @@
+---
+title: JavaScript
+slug: Web/JavaScript
+tags:
+ - Infrastructure
+ - Interface
+ - Intermediate
+ - Internationalization
+ - Intro
+ - JavaScript
+ - Learn
+ - 'l10n:exclude'
+ - 'l10n:priority'
+ - Все_категории
+translation_of: Web/JavaScript
+---
+<div>{{JsSidebar()}}</div>
+
+<div class="summary">
+<p><strong>JavaScript</strong><sup>®</sup> (часто просто <strong>JS</strong>) — это легковесный, интерпретируемый или JIT-компилируемый, объектно-ориентированный язык с {{Glossary("First-class_Function", "функциями первого класса")}}. Наиболее широкое применение находит как язык сценариев веб-страниц, но также <a href="http://en.wikipedia.org/wiki/JavaScript#Uses_outside_web_pages">используется и в других программных продуктах</a>, например, <a href="http://nodejs.org" title="http://nodejs.org">node.js</a> или <a href="http://couchdb.apache.org" title="http://couchdb.apache.org">Apache CouchDB</a>. JavaScript это {{Glossary("Prototype-based_programming", "прототипно-ориентированный")}}, мультипарадигменный язык с динамической типизацией, который поддерживает объектно-ориентированный, императивный и декларативный (например, функциональное программирование) стили программирования. Подробнее <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/%D0%9E_JavaScript">о JavaScript</a>.</p>
+</div>
+
+<p>Эта часть сайта посвящена самому языку JavaScript, и она не затрагивает тонкостей, связанных с веб-страницами или окружением, в котором исполняется JavaScript. Информация об {{Glossary("API")}}, относящихся к веб-страницам, находится в разделах, посвященных <a href="/ru/docs/Web/API">Веб-API</a> и <a href="/ru/docs/DOM">DOM</a>.</p>
+
+<p>Стандартом языка JavaScript является <a href="https://developer.mozilla.org/ru/docs/JavaScript/Language_Resources" title="ECMAScript">ECMAScript</a>. По состоянию на 2012, все современные браузеры полностью поддерживают ECMAScript 5.1. Старые версии браузеров поддерживают по крайней мере - ECMAScript 3. 17 июня 2015 года состоялся выпуск шестой версии ECMAScript. Эта версия официально называется ECMAScript 2015, которую чаще всего называют ECMAScript 2015 или просто ES2015. С недавнего времени стандарты ECMAScript выпускаются ежегодно. Эта документация относится к последней версии черновика, которой является <a href="http://tc39.github.io/ecma262/">ECMAScript 2018</a>.</p>
+
+<p>Не следует путать JavaScript c <a href="https://ru.wikipedia.org/wiki/Java">языком программирования Java</a>. И "Java", и "JavaScript" являются торговыми марками или зарегистрированными торговыми марками Oracle в США и других странах. Однако, у обоих языков различный синтаксис, семантика и применение.</p>
+
+<div class="column-container">
+<div class="column-half">
+<h2 class="Documentation" id="Учебные_материалы">Учебные материалы</h2>
+
+<p>Научитесь программировать на JavaScript вместе с нашим руководством.</p>
+
+<h3 id="Для_абсолютных_новичков">Для абсолютных новичков</h3>
+
+<p>Загляните в наш <a href="/ru/docs/Learn/JavaScript">Учебный План,</a> если вам хочется изучить JavaScript, но у вас нет опыта в JavaScript или программировании.  Доступные разделы: </p>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Guide">Первые шаги в JavaScript</a></dt>
+ <dd>Отвечаем на такие вопросы, как "что такое JavaScript?", "как он выглядит?", "и что он может делать?", а также обсуждаем основные возможности JavaScript, такие, как переменнные, строки, числа и массивы.</dd>
+ <dt><a href="/ru/docs/Learn/JavaScript/Building_blocks">Структурные элементы JavaScript</a></dt>
+ <dd>Продолжаем наше изучение главных возможностей JavaScript, обращаем наше внимание на самые часто встречающиеся блоки кода, такие, как условные выражения, циклы, функции и события.</dd>
+ <dt></dt>
+ <dt><a href="https://developer.mozilla.org/ru/docs/Learn/JavaScript/%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B">Введение в объекты JavaScript</a></dt>
+ <dd>Объектно-ориентированная природа JavaScript важна для понимания, если вы хотите углубить знание языка и писать более эффективный код. Поэтому мы подготовили модуль, который поможет вам в этом.</dd>
+ <dt><a href="/ru/docs/Learn/JavaScript/Asynchronous">Асинхронный JavaScript</a></dt>
+ <dd>Обсуждение асинхронного JavaScript: почему это так важно, как эта возможность языка может использована для обработки потенциальных блокирующих операций, как, например полученые данных с сервера.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs">Клиентские (браузерные) веб-API</a></dt>
+ <dd>Когда вы пишите клиент веб-сайтов или приложений на JavaScript, вы не далеко уйдете без использования API – интерфейсов для взаимодействия с браузером и операционной системой, на которой запущен сайт, или даже для операций с данными, полученными от других веб-сайтов и сервисов. В этом цикле статей мы разбираемся, что такое API и как использовать некоторые самые распространенные API, которые вам встретятся при разработке.</dd>
+</dl>
+
+<h3 id="Руководство_по_JavaScript">Руководство по JavaScript</h3>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Guide">Руководство по JavaScript</a></dt>
+ <dd>Более подробное руководство по языку программирования JavaScript, нацеленное на тех, кто уже имеет опыт программирования на JavaScript или на любом другом языке.</dd>
+</dl>
+
+<h3 id="Средний_уровень">Средний уровень</h3>
+
+<dl>
+ <dt><a href="/ru/docs/Learn/Tools_and_testing/Фронтенд_JavaScript_фреймворки">Понимание JavaScript-фреймворков для фронтенда</a></dt>
+ <dd>
+ <div>JavaScript-ф<span>реймворки </span>являются неотъемлемой частью современной веб-разработки,</div>
+
+ <div>предоставляя разработчикам проверенные и протестированные</div>
+
+ <div>инструменты для создания масштабируемых и интерактивных веб-приложений. Многие</div>
+
+ <div>современные компании используют фреймворки для своих решений, поэтому многие задачи связанные с разработкой клиентской части веб-приложений теперь требуют опыта работы с ними.</div>
+ </dd>
+ <dt><a href="/ru/docs/Web/JavaScript/A_re-introduction_to_JavaScript">Повторное введение в JavaScript</a></dt>
+ <dd>Обзор для тех, кто <em>думает</em>, что знает JavaScript.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Data_structures">Структуры данных JavaScript</a></dt>
+ <dd>Обзор существующих структур данных в JavaScript.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Equality_comparisons_and_sameness">Операторы сравнения и тождественности</a></dt>
+ <dd>JavaScript предоставляет три различных оператора сравнения значений: строгое равенство <code>===</code>, с приведением типов <code>==</code> и метод {{jsxref("Global_Objects/Object/is", "Object.is()")}}.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Closures">Замыкания</a></dt>
+ <dd>Замыканния это сочетание функции и лексического окружения в котором она была определена.</dd>
+</dl>
+
+<h3 id="Продвинутый_уровень">Продвинутый уровень</h3>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain">Наследование и цепочка прототипов</a></dt>
+ <dd>Статья разъясняет бытующие заблуждения и недооцененность наследования, основанного на прототипах.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">Строгий режим — "use strict"</a></dt>
+ <dd>Строгий режим говорит о том, что вы не можете использовать какую-либо переменную до её объявления. Это ограниченный вариант ECMAScript 5, для более быстрой производительности и простой отладки.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Typed_arrays">Типизированные массивы</a></dt>
+ <dd>Типизированные массивы предоставляют механизм для работы с необработанными двоичными данными в JavaScript.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Memory_Management">Управление памятью</a></dt>
+ <dd>Жизненный цикл памяти и сборка мусора в JavaScript.</dd>
+ <dt><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/EventLoop">Модель параллелизма (мультипоточности) и цикл событий</a></dt>
+ <dd>В JavaScript есть модель параллелизма, основанная на "цикле событий".</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Introduction_to_using_XPath_in_JavaScript">Введение в использование XPath в JavaScript</a></dt>
+ <dd>Этот документ описывает интерфейс для использования <a href="https://developer.mozilla.org/en-US/docs/XPath" title="en/XPath">XPath</a> в JavaScript на прямую, внутри расширений и на веб-сайтах.</dd>
+</dl>
+</div>
+
+<div class="column-half">
+<h2 class="Tools" id="Справочник">Справочник</h2>
+
+<p>Подробный <a href="/ru/docs/Web/JavaScript/Reference">справочник</a> по JavaScript.</p>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects">Стандартные встроенные объекты</a></dt>
+ <dd>Узнайте о стандартных встроенных объектах {{jsxref("Array")}}, {{jsxref("Boolean")}}, {{jsxref("Date")}}, {{jsxref("Error")}}, {{jsxref("Function")}}, {{jsxref("JSON")}}, {{jsxref("Math")}}, {{jsxref("Number")}}, {{jsxref("Object")}}, {{jsxref("RegExp")}}, {{jsxref("String")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, {{jsxref("WeakMap")}} , {{jsxref("WeakSet")}} и других.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Operators">Выражения и операторы</a></dt>
+ <dd>Узнайте о поведении таких операторов в JavaScript, как {{jsxref("Operators/instanceof", "instanceof")}}, {{jsxref("Operators/typeof", "typeof")}}, {{jsxref("Operators/new", "new")}}, {{jsxref("Operators/this", "this")}}, <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">приоритете операторов</a> и многом другом.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Statements">Инструкции и объявления</a></dt>
+ <dd>Узнайте о {{jsxref("Statements/do...while", "do-while")}}, {{jsxref("Statements/for...in", "for-in")}}, {{jsxref("Statements/for...of", "for-of")}}, {{jsxref("Statements/try...catch", "try-catch")}}, {{jsxref("Statements/let", "let")}}, {{jsxref("Statements/var", "var")}}, {{jsxref("Statements/const", "const")}}, {{jsxref("Statements/if...else", "if-else")}}, {{jsxref("Statements/switch", "switch")}} и многих других выражениях и ключевых словах в JavaScript.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Functions">Функции</a></dt>
+ <dd>Узнайте, как работать с функциями в JavaScript, чтобы разрабатывать свои приложения.</dd>
+</dl>
+
+<h2 class="Tools" id="Инструменты_и_дополнительные_ресурсы">Инструменты и дополнительные ресурсы</h2>
+
+<p>Полезные инструменты для написания и отладки вашего <strong>JavaScript </strong>кода.</p>
+
+<dl>
+ <dt><a href="/ru/docs/Tools">Инструменты разработчика Firefox</a></dt>
+ <dd><a href="/ru/docs/Tools/Черновик">Простой редактор JavaScript</a>, <a href="/ru/docs/Tools/Web_Console">Веб-консоль</a>, <a href="/ru/docs/Tools/Profiler">JavaScript Профайлер</a>, <a href="/ru/docs/Tools/Debugger">Отладчик</a> и другие.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/JavaScript_шеллы">JavaScript шеллы</a></dt>
+ <dd>JavaScript шеллы позволяют быстро проверять фрагменты JavaScript кода.</dd>
+ <dt><a href="https://togetherjs.com/">TogetherJS</a></dt>
+ <dd>Объединение усилий стало проще. Добавляя TogetherJS на вашу веб-страницу, ваши пользователи могуь помочь другу-другу в реальном времени!</dd>
+ <dt><a href="http://stackoverflow.com/questions/tagged/javascript">Stack Overflow</a></dt>
+ <dd>Вопросы по JavaScript на Stack Overflow.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript">Версии JavaScript и информация о релизах</a></dt>
+ <dd>Просмотрите историю возможностей JavaScript и их статус.</dd>
+ <dt><a href="https://jsfiddle.net/">JSFiddle</a></dt>
+ <dd>Редактируйте JavaScript, CSS, HTML и получайте живые результаты. Используйте экспериментальные ресурсы и взаимодействуйте с вашей командой онлайн.</dd>
+</dl>
+
+<dl>
+ <dt><a href="https://plnkr.co/">Plunker</a></dt>
+ <dd>Plunker - это онлайн-сообщество для создания, обмена и совместной работы над идеями, касающимися веб-разработки. Редактируйте ваши JavaScript, CSS, HTML файлы, смотрите результат их выполнения и организуйте их в файловую структуру.</dd>
+ <dt><a href="https://jsbin.com/">JSBin</a></dt>
+ <dd>JS Bin это инструмент с открытым исходным кодом для отладки и совместной разработки.</dd>
+ <dt><a href="https://codepen.io/">Codepen</a></dt>
+ <dd>
+ <p>Codepen ещё одна платформа для совместной веб-разработки, дающия результать в реальном-времени.</p>
+ </dd>
+ <dt><a href="https://stackblitz.com/">StackBlitz</a></dt>
+ <dd>
+ <p>StackBlitz - это "песочница"/инструмент отладки, где вы можете размещать полновесные приложения написанные на React, Angular, т др.</p>
+ </dd>
+</dl>
+</div>
+</div>
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
new file mode 100644
index 0000000000..489e7e7693
--- /dev/null
+++ b/files/ru/web/javascript/inheritance_and_the_prototype_chain/index.html
@@ -0,0 +1,301 @@
+---
+title: Наследование и цепочка прототипов
+slug: Web/JavaScript/Inheritance_and_the_prototype_chain
+tags:
+ - JavaScript
+ - Наследование
+ - ООП
+ - Прототип объекта
+translation_of: Web/JavaScript/Inheritance_and_the_prototype_chain
+---
+<p dir="rtl">{{jsSidebar("Advanced")}}</p>
+
+<p>Модель наследования в JavaScript может озадачить опытных разработчиков на высокоуровневых объектно-ориентированных языках (таких, например, как Java или C++), поскольку она динамическая и не включает в себя реализацию понятия <code>class</code> (хотя ключевое слово <code>class,</code> бывшее долгие годы зарезервированным, и приобрело практическое значение в стандарте ES2015, однако, Class в JavaScript ES&gt;=6 представляет собой лишь "синтаксический сахар" поверх прототипно-ориентированной модели наследования).</p>
+
+<p>В плане наследования JavaScript работает лишь с одной сущностью: объектами. Каждый объект имеет внутреннюю ссылку на другой объект, называемый его <strong>прототипом</strong>. У объекта-прототипа также есть свой собственный прототип и так далее до тех пор, пока цепочка не завершится объектом, у которого свойство prototype равно <code>null</code>.  По определению, <code>null </code>не имеет прототипа и является завершающим звеном в <strong>цепочке прототипов</strong>.</p>
+
+<p>Хотя прототипную модель наследования некоторые относят к недостаткам JavaScript, на самом деле она <em>мощнее</em> классической. К примеру, поверх неё можно предельно просто реализовать классическое наследование, а вот попытки совершить обратное непременно вынудят вас попотеть.</p>
+
+<h2 id="Наследование_с_цепочкой_прототипов">Наследование с цепочкой прототипов</h2>
+
+<h3 id="Наследование_свойств">Наследование свойств</h3>
+
+<p>Объекты в JavaScript — динамические "контейнеры", наполненные свойствами (называемыми <strong>собственными свойствами</strong>). Каждый объект содержит ссылку на свой объект-прототип.<br>
+ При попытке получить доступ к какому-либо свойству объекта, свойство вначале ищется в самом объекте, затем в прототипе объекта, после чего в прототипе прототипа, и так далее. Поиск ведется до тех пор, пока не найдено свойство с совпадающим именем или не достигнут конец цепочки прототипов.</p>
+
+<pre class="brush: js notranslate">// В этом примере someObject.[[Prototype]] означает прототип someObject.
+// Это упрощённая нотация (описанная в стандарте ECMAScript).
+// Она не может быть использована в реальных скриптах.
+
+// Допустим, у нас есть объект 'o' с собственными свойствами a и b
+// {a:1, b:2}
+
+// o.[[Prototype]] имеет свойства b и с
+// {b:3, c:4}
+
+// Далее, o.[[Prototype]].[[Prototype]] является null
+// null - это окончание в цепочке прототипов
+// по определению, null не имеет свойства [[Prototype]]
+
+// В итоге полная цепочка прототипов выглядит так:
+// {a:1, b:2} ---&gt; {b:3, c:4} ---&gt; null
+
+console.log(o.a); // 1
+// Есть ли у объекта 'o' собственное свойство 'a'?
+// Да, и его значение равно 1
+
+console.log(o.b); // 2
+// Есть ли у объекта 'o' собственное свойство 'b'?
+// Да, и его значение равно 2.
+// У прототипа o.[[Prototype]] также есть свойство 'b',
+// но обращения к нему в данном случае не происходит.
+// Это и называется "property shadowing" (затенение свойства)
+
+console.log(o.c); // 4
+// Есть ли у объекта 'o' собственное свойство 'с'?
+// Нет, тогда поищем его в прототипе.
+// Есть ли у объекта o.[[Prototype]] собственное свойство 'с'?
+// Да, оно равно 4
+
+console.log(o.d); // undefined
+// Есть ли у объекта 'o' собственное свойство 'd'?
+// Нет, тогда поищем его в прототипе.
+// Есть ли у объекта o.[[Prototype]] собственное свойство 'd'?
+// Нет, продолжаем поиск по цепочке прототипов.
+// o.[[Prototype]].[[Prototype]] равно null, прекращаем поиск,
+// свойство не найдено, возвращаем undefined
+</pre>
+
+<p>При добавлении к объекту нового свойства, создаётся новое собственное свойство (own property). Единственным исключением из этого правила являются наследуемые свойства, имеющие <a href="/en/docs/JavaScript/Guide/Working_with_Objects?redirectlocale=en-US&amp;redirectslug=Core_JavaScript_1.5_Guide%2FWorking_with_Objects#Defining_getters_and_setters" title="Defining Getters and Setters">getter или setter</a>.</p>
+
+<h3 id="Наследование_методов">Наследование "методов"</h3>
+
+<p>JavaScript не имеет "методов" в смысле, принятом в классической модели ООП. В JavaScript любая функция может быть добавлена к объекту в виде его свойства. Унаследованная функция ведёт себя точно так же, как любое другое свойство объекта, в том числе и в плане "затенения свойств" (property shadowing), как показано в примере выше (в данном конкретном случае это форма <em>переопределения метода - method overriding</em>).</p>
+
+<p>В области видимости унаследованной функции ссылка <a href="/en/JavaScript/Reference/Operators/this" title="this"><code>this</code></a> указывает на наследующий объект (на наследника), а не на прототип, в котором данная функция является собственным свойством.</p>
+
+<pre class="brush: js notranslate">var o = {
+ a: 2,
+ m: function(){
+ return this.a + 1;
+ }
+};
+
+console.log(o.m()); // 3
+// в этом случае при вызове 'o.m' this указывает на 'o'
+
+var p = Object.create(o);
+// 'p' - наследник 'o'
+
+p.a = 12; // создаст собственное свойство 'a' объекта 'p'
+console.log(p.m()); // 13
+// при вызове 'p.m' this указывает на 'p'.
+// т.е. когда 'p' наследует функцию 'm' объекта 'o',
+// this.a означает 'p.a', собственное свойство 'a' объекта 'p'
+</pre>
+
+<h2 id="Различные_способы_создания_объектов_и_получаемые_в_итоге_цепочки_прототипов">Различные способы создания объектов и получаемые в итоге цепочки прототипов</h2>
+
+<h3 id="Создание_объектов_с_помощью_литералов">Создание объектов с помощью литералов</h3>
+
+<pre class="brush: js notranslate">var o = {a: 1};
+
+// Созданный объект 'o' имеет Object.prototype в качестве своего [[Prototype]]
+// у 'o' нет собственного свойства 'hasOwnProperty'
+// hasOwnProperty — это собственное свойство Object.prototype.
+// Таким образом 'o' наследует hasOwnProperty от Object.prototype
+// Object.prototype в качестве прототипа имеет null.
+// o ---&gt; Object.prototype ---&gt; null
+
+var a = ["yo", "whadup", "?"];
+
+// Массивы наследуются от Array.prototype
+// (у которого есть такие методы, как indexOf, forEach и т.п.).
+// Цепочка прототипов при этом выглядит так:
+// a ---&gt; Array.prototype ---&gt; Object.prototype ---&gt; null
+
+function f(){
+ return 2;
+}
+
+// Функции наследуются от Function.prototype
+// (у которого есть такие методы, как call, bind и т.п.):
+// f ---&gt; Function.prototype ---&gt; Object.prototype ---&gt; null
+</pre>
+
+<h3 id="Создание_объектов_с_помощью_конструктора">Создание объектов с помощью конструктора</h3>
+
+<p>В JavaScript "конструктор" — это "просто" функция, вызываемая с оператором <a href="/en/JavaScript/Reference/Operators/new" title="new">new</a>.</p>
+
+<pre class="brush: js notranslate">function Graph() {
+ this.vertexes = [];
+ this.edges = [];
+}
+
+Graph.prototype = {
+ addVertex: function(v){
+ this.vertexes.push(v);
+ }
+}
+
+var g = new Graph();
+// объект 'g' имеет собственные свойства 'vertexes' и 'edges'.
+// g.[[Prototype]] принимает значение Graph.prototype при выполнении new Graph().
+</pre>
+
+<h3 id="Object.create">Object.create</h3>
+
+<p>В ECMAScript 5 представлен новый метод создания объектов: <a href="/en/JavaScript/Reference/Global_Objects/Object/create" title="create">Object.create</a>. Прототип создаваемого объекта указывается в первом аргументе этого метода:</p>
+
+<pre class="brush: js notranslate">var a = {a: 1};
+// a ---&gt; Object.prototype ---&gt; null
+
+var b = Object.create(a);
+// b ---&gt; a ---&gt; Object.prototype ---&gt; null
+console.log(b.a); // 1 (унаследовано)
+
+var c = Object.create(b);
+// c ---&gt; b ---&gt; a ---&gt; Object.prototype ---&gt; null
+
+var d = Object.create(null);
+// d ---&gt; null
+console.log(d.hasOwnProperty);
+// undefined, т.к. 'd' не наследуется от Object.prototype
+</pre>
+
+<div>
+<h3 id="Используя_ключевое_слово_class">Используя ключевое слово <code>class</code></h3>
+
+<p>С выходом ECMAScript 6 появился целый набор ключевых слов, реализующих <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes">классы</a>. Они могут показаться знакомыми людям, изучавшим языки, основанные на классах, но есть существенные отличия. JavaScript был и остаётся прототипно-ориентированным языком. Новые ключевые слова: "<code>class</code>", "<code>constructor</code>", "<code>static</code>", "<code>extends</code>" и "<code>super</code>".</p>
+
+<pre class="brush: js notranslate">"use strict";
+
+class Polygon {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}
+
+class Square extends Polygon {
+ constructor(sideLength) {
+ super(sideLength, sideLength);
+ }
+ get area() {
+ return this.height * this.width;
+ }
+ set sideLength(newLength) {
+ this.height = newLength;
+ this.width = newLength;
+ }
+}
+
+var square = new Square(2);</pre>
+
+<h3 id="Производительность">Производительность</h3>
+
+<p>Длительное время поиска свойств, располагающихся относительно высоко в цепочке прототипов, может негативно сказаться на производительности (performance), особенно в критических в этом смысле местах кода. Кроме того, попытка найти несуществующие свойства неизбежно приведёт к проверке на их наличие у всех объектов цепочки прототипов.</p>
+
+<p>Кроме того, при циклическом переборе свойств объекта будет обработано каждое свойство, присутствующее в цепочке прототипов.</p>
+
+<p>Если вам необходимо проверить, определено ли свойство у <em>самого объекта</em>, а не где-то в его цепочке прототипов, вы можете использовать метод <a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty" title="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty"><code>hasOwnProperty</code></a>, который все объекты наследуют от <code>Object.prototype</code>.</p>
+
+<p><a href="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty" title="/ru/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty"><code>hasOwnProperty</code></a> — единственная существующая в JavaScript возможность работать со свойствами, не затрагивая цепочку прототипов. </p>
+
+<div class="note">Примечание: Для проверки существования свойства недостаточно проверять, эквивалентно ли оно <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined" title="/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined"><code>undefined</code></a>. Свойство может вполне себе существовать, но при этом ему может быть присвоено значение <code>undefined</code>.</div>
+
+<div>
+<h3 id="Плохая_практика_расширение_базовых_прототипов">Плохая практика: расширение базовых прототипов</h3>
+
+<p>Одной из частых ошибок является расширение <code>Object.prototype</code> или других базовых прототипов.</p>
+
+<p>Такой подход называется monkey patching и нарушает принцип <em>инкапсуляции</em>. Несмотря на то, что ранее он использовался в таких широко распространенных фреймворках, как например, Prototype.js, в настоящее время не существует разумных причин для его использования, поскольку в данном случае встроенные типы "захламляются" дополнительной нестандартной функциональностью.</p>
+
+<p>Единственным оправданием расширения базовых прототипов могут являться лишь полифиллы - эмуляторы новой функциональности (например, <code>Array.forEach)</code> для не поддерживающих её реализаций языка в старых веб-браузерах.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p><code>B</code> наследует от <code>A</code>:</p>
+
+<pre class="brush: js notranslate">function A(a){
+ this.varA = a;
+}
+
+// What is the purpose of including varA in the prototype when A.prototype.varA will always be shadowed by
+// this.varA, given the definition of function A above?
+A.prototype = {
+ varA : null, // Shouldn't we strike varA from the prototype as doing nothing?
+ // perhaps intended as an optimization to allocate space in hidden classes?
+ // https://developers.google.com/speed/articles/optimizing-javascript#Initializing instance variables
+ // would be valid if varA wasn't being initialized uniquely for each instance
+ doSomething : function(){
+ // ...
+ }
+}
+
+function B(a, b){
+ A.call(this, a);
+ this.varB = b;
+}
+B.prototype = Object.create(A.prototype, {
+ varB : {
+ value: null,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ },
+ doSomething : {
+ value: function(){ // переопределение
+ A.prototype.doSomething.apply(this, arguments); // call super
+ // ...
+ },
+ enumerable: true,
+ configurable: true,
+ writable: true
+ }
+});
+B.prototype.constructor = B;
+
+var b = new B();
+b.doSomething();</pre>
+
+<p>Важно:</p>
+
+<ul>
+ <li>Типы определяются в <code>.prototype</code></li>
+ <li>Для наследования используется <code>Object.create()</code></li>
+</ul>
+
+<h2 id="prototype_и_Object.getPrototypeOf">prototype и Object.getPrototypeOf</h2>
+
+<p>Как уже упоминалось, JavaScript может запутать разработчиков на Java или C++, ведь в нём совершенно нет "нормальных" классов. Всё, что мы имеем - лишь объекты. Даже те "classes", которые мы имитировали в статье, тоже являются функциональными объектами.</p>
+
+<p>Вы наверняка заметили, что у <code>function A</code> есть особое свойство <code>prototype</code>. Это свойство работает с оператором <code>new</code>. Ссылка на объект-прототип копируется во внутреннее свойство <code>[[Prototype]] </code>нового объекта. Например, в этом случае <code>var a1 = new A()</code>, JavaScript (после создания объекта в памяти и до выполнения функции function <code>A() </code>) устанавливает <code>a1.[[Prototype]] = A.prototype</code>. Потом, при попытке доступа к свойству нового экземпляра объекта, JavaScript проверяет, принадлежит ли свойство непосредственно объекту. Если нет, то интерпретатор ищет в свойстве <code>[[Prototype]]</code>. Всё, что было определено в <code>prototype,</code> в равной степени доступно и всем экземплярам данного объекта. При внесении изменений в <code>prototype</code> все эти изменения сразу же становятся доступными и всем экземплярам объекта.</p>
+
+<p><code>[[Prototype]]</code> работает <em>рекурсивно</em>, то есть при вызове:</p>
+
+<pre class="brush: js notranslate">var o = new Foo();</pre>
+
+<p>JavaScript на самом деле выполняет что-то подобное:</p>
+
+<pre class="brush: js notranslate">var o = new Object();
+o.[[Prototype]] = Foo.prototype;
+Foo.call(o);</pre>
+
+<p>а когда вы делаете так:</p>
+
+<pre class="brush: js notranslate">o.someProp;</pre>
+
+<p>JavaScript проверяет, есть ли у <strong><code>o</code></strong> свойство <code>someProp</code>.<br>
+ и если нет, то проверяет <code>Object.getPrototypeOf(o).someProp</code> <br>
+ а если и там нет, то ищет в <code>Object.getPrototypeOf(Object.getPrototypeOf(o)).someProp</code> и так далее.</p>
+
+<div>
+<h2 id="Заключение">Заключение</h2>
+
+<p>Важно чётко понимать принципы работы прототипной модели наследования, прежде чем начинать писать сложный код с её использованием.<br>
+ <span id="result_box" lang="ru"><span>При написании JavaScript-</span></span><span lang="ru"><span>кода, использующего наследование, следует помнить</span> <span>о</span> <span>длине</span> <span>цепочек прототипов</span> <span>и стараться</span> делать их как можно более короткими во<span> избежание </span><span>проблем с производительностью во время выполнения кода</span><span>.</span></span><br>
+ Расширять базовые прототипы следует исключительно для поддержания совместимости кода с отдельными "древними" реализациями JavaScript, - во всех прочих случаях это плохая практика.</p>
+</div>
+</div>
+</div>
diff --git a/files/ru/web/javascript/introduction_to_object-oriented_javascript/index.html b/files/ru/web/javascript/introduction_to_object-oriented_javascript/index.html
new file mode 100644
index 0000000000..2217542349
--- /dev/null
+++ b/files/ru/web/javascript/introduction_to_object-oriented_javascript/index.html
@@ -0,0 +1,355 @@
+---
+title: Вступление в Объектно-ориентированный JavaScript
+slug: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
+translation_of: Learn/JavaScript/Objects
+---
+<p>Объектно-ориентированный до основания, JavaScript предоставляет мощные и гибкие {{Glossary("OOP")}} возможности. Эта статья начинается с введения в объектно-ориентированное программирование, затем рассматривает модель объекта JavaScript и, наконец, демонстрирует концепции объектно-ориентированного программирования в JavaScript.</p>
+
+<h2 id="JavaScript_Review" name="JavaScript_Review">Обзор JavaScript</h2>
+
+<p>Если вы неуверенно владеете такими концепциями JavaScript, как переменные, типы, функции и области видимости, вы можете прочитать об этих темах в <a href="/ru/docs/Web/JavaScript/A_re-introduction_to_JavaScript">Повторное вступление в JavaScript</a>. Вы также можете обратиться к <a href="/ru/docs/Web/JavaScript/Guide">JavaScript Guide</a>.</p>
+
+<h2 id="Object-oriented_programming" name="Object-oriented_programming">Объектно-ориентированное программирование</h2>
+
+<p>Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует {{glossary("абстракции")}}, чтобы создавать модели, основанные на объектах реального мира. ООП использует несколько техник из ранее признанных парадигм, включая {{glossary("модульность")}}, {{glossary("полиморфизм")}} и {{glossary("инкапсуляция")}}. На сегодняшний день многие популярные языки программирования (такие как Java, JavaScript, C#, C++, Python, PHP, Ruby и Objective-C) поддерживают ООП.</p>
+
+<p>ООП представляет программное обеспечение как совокупность взаимодействующих объектов, а не набор функций или просто список команд (как в традиционном представлении). В ООП, каждый объект может получать сообщения, обрабатывать данные, и отправлять сообщения другим объектам. Каждый объект может быть представлен как маленькая независимая машина с отдельной ролью или ответственностью.</p>
+
+<p>ООП способствует большей гибкости и поддерживаемости в программировании, и широко распространена в крупномасштабном программном инжиниринге. Так как ООП настоятельно подчеркивает модульность, объектно-ориентированный код проще в разработке и проще для понимания впоследствии. Объектно-ориентированный код способствует более точному анализу, кодированию и пониманию сложных ситуаций и процедур, чем методы программирования с меньшей модульностью.<a href="#cite-1"><sup>1</sup></a></p>
+
+<h2 id="Terminology" name="Terminology">Терминология</h2>
+
+<dl>
+ <dt>{{Glossary("Пространство имён")}}</dt>
+ <dd>Контейнер, который позволяет разработчикам связать весь функционал под уникальным, специфичным для приложения именем.</dd>
+ <dt>{{Glossary("Класс")}}</dt>
+ <dd>Определяет характеристики объекта. Класс является описанием шаблона свойств и методов объекта.</dd>
+ <dt>{{Glossary("Объект")}}</dt>
+ <dd>Экземпляр класса.</dd>
+ <dt>{{Glossary("Свойство")}}</dt>
+ <dd>Характеристика объекта, например, цвет.</dd>
+ <dt>{{Glossary("Метод")}}</dt>
+ <dd>Возможности объекта, такие как ходьба. Это подпрограммы или функции, связанные с классом.</dd>
+ <dt>{{Glossary("Конструктор")}}</dt>
+ <dd>Метод, вызываемый в момент создания экземпляра объекта. Он, как правило, имеет то же имя, что и класс, содержащий его.</dd>
+ <dt>{{Glossary("Наследование")}}</dt>
+ <dd>Класс может наследовать характеристики от другого класса.</dd>
+ <dt>{{Glossary("Инкапсуляция")}}</dt>
+ <dd>Способ комплектации данных и методов, которые используют данные.</dd>
+ <dt>{{Glossary("Абстракция")}}</dt>
+ <dd>Совокупность комплексных наследований, методов и свойств объекта должны адекватно отражать модель реальности.</dd>
+ <dt>{{Glossary("Полиморфизм")}}</dt>
+ <dd>Поли означает "<em>много</em>", а морфизм "<em>формы</em>". Различные классы могут объявить один и тот же метод или свойство.</dd>
+</dl>
+
+<p>Для более обширного описания объектно-ориентированного программирования, см {{interwiki("wikipedia", "Объектно-ориентированное_программирование")}} в Wikipedia.</p>
+
+<h2 id="Прототипное_программирование">Прототипное программирование</h2>
+
+<p>Прототипное программирование — это модель ООП которая не использует классы, а вместо этого сначала выполняет поведение класса и затем использует его повторно (эквивалент наследования в языках на базе классов), декорируя (или расширяя) существующие<em> </em>объекты <em>прототипы</em>. (Также называемое бесклассовое, прототипно-ориентированное, или экземплярно-ориентированное программирование.)</p>
+
+<p>Оригинальный (и наиболее каноничный) пример прототипно-ориентированного языка это {{interwiki("wikipedia", "Self (programming language)", "Self")}} разработанный Дэвидом Ангаром и Ренделлом Смитом. Однако бесклассовый стиль программирования стал набирать популярность позднее, и был принят для таких языков программирования, как JavaScript, Cecil, NewtonScript, Io, MOO, REBOL, Kevo, Squeak (при использовании фреймворка Viewer для манипуляции компонентами Morphic) и некоторых других.<a href="#cite-1"><sup>1</sup></a></p>
+
+<h2 id="JavaScript_Object_Oriented_Programming" name="JavaScript_Object_Oriented_Programming">Объектно-ориентированное программирование в JavaScript</h2>
+
+<h3 id="Пространство_имён">Пространство имён</h3>
+
+<p>Пространство имён — это контейнер, который позволяет разработчикам собрать функциональность под уникальным именем приложения. <strong>Пространство имён в JavaScript — это объект, содержащий методы, свойства и другие объекты.</strong></p>
+
+<div class="note">
+<p>Важно отметить, что на уровне языка в JavaScript нет разницы между пространством имён и любым другим объектом. Это отличает JS от множества других объектно-ориентированных языков и может стать причиной путаницы у начинающих JS программистов.</p>
+</div>
+
+<p>Принцип работы пространства имён в JS прост: создать один глобальный объект и все переменные, методы и функции объявлять как свойства этого объекта. Также использование пространств имён снижает вероятность возникновения конфликтов имён в приложении так как каждый объект приложения является свойством глобального объекта.</p>
+
+<p>Давайте создадим глобальный объект MYAPP:</p>
+
+<pre class="brush: js">// Глобальное пространство имён
+var MYAPP = MYAPP || {};</pre>
+
+<p>Во фрагменте кода выше мы сначала проверяем определён ли объект MYAPP (в текущем файле или другом файле). Если да, то используем существующий глобальный объект MYAPP, иначе создаём пустой объект MYAPP, в котором мы инкапсулируем все методы, функции, переменные и объекты.</p>
+
+<p>Также мы можем создать подпространство имён (учтите, что сначала нужно объявить глобальный объект):</p>
+
+<pre class="brush: js">// Подпространство имён
+MYAPP.event = {};</pre>
+
+<p>Далее следует пример синтаксиса создания пространства имён и добавления переменных, функций и методов:</p>
+
+<pre class="brush: js">// Создаём контейнер MYAPP.commonMethod для общих методов и свойств
+MYAPP.commonMethod = {
+ regExForName: "", // определяет регулярное выражение для валидации имени
+ regExForPhone: "", // определяет регулярное выражение для валидации телефона
+ validateName: function(name){
+ // Сделать что-то с name, вы можете получить доступ к переменной regExForName
+  // используя "this.regExForName"
+ },
+
+ validatePhoneNo: function(phoneNo){
+ // Сделать что-то с номером телефона
+ }
+}
+
+// Объект вместе с объявлением методов
+MYAPP.event = {
+ addListener: function(el, type, fn) {
+ // код
+ },
+ removeListener: function(el, type, fn) {
+ // код
+ },
+ getEvent: function(e) {
+ // код
+ }
+
+ // Можно добавить другие свойства и методы
+}
+
+// Синтаксис использования метода addListener:
+MYAPP.event.addListener("yourel", "type", callback);</pre>
+
+<h3 id="Core_Objects" name="Core_Objects">Стандартные встроенные объекты</h3>
+
+<p>В JavaScript есть несколько объектов, встроенных в ядро, например {{jsxref("Math")}}, {{jsxref("Object")}}, {{jsxref("Array")}} и {{jsxref("String")}}. Пример ниже показывает как использовать объект Math, чтобы получить случайное число, используя его метод random().</p>
+
+<pre class="brush: js">console.log(Math.random());
+</pre>
+
+<div class="note"><strong>Примечание:</strong> В данном примере и далее мы будем использовать глобальную функцию {{domxref("console.log()")}}. Если точнее, то функция <code>console.log()</code> не является частью JavaScript, но она поддерживается многими браузерами для облегчения отладки.</div>
+
+<p>Смотрите <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects" title="en-US/docs/Web/JavaScript/Reference/Global_Objects">JavaScript Reference: Standard built-in objects</a>, чтобы ознакомиться со списком всех встроенных объектов JavaScript.</p>
+
+<p>Каждый объект в JavaScript является экземпляром объекта <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a></code>, следовательно наследует все его свойства и методы.</p>
+
+<h3 id="Custom_Objects" name="Custom_Objects">Объекты, создаваемые пользователем</h3>
+
+<h4 id="The_Class" name="The_Class">Класс</h4>
+
+<p>JavaScript — это прототипно-ориентированный язык, и в нём нет оператора <code>class</code>, который имеет место в C++ или Java. Иногда это сбивает с толку программистов, привыкших к языкам с оператором <code>class</code>. Вместо этого JavaScript использует функции как конструкторы классов. Объявить класс так же просто как объявить функцию. В примере ниже мы объявляем новый класс Person с пустым конструктором:</p>
+
+<pre class="brush: js">var Person = function () {};
+</pre>
+
+<h4 id="The_Object_.28Class_Instance.29" name="The_Object_.28Class_Instance.29">Объект (экземпляр класса)</h4>
+
+<p>Для создания нового экзмепляра объекта <code>obj</code> мы используем оператор <code>new obj</code>, присваивая результат (который имеет тип <code>obj</code>) в переменную.</p>
+
+<p>В примере выше мы определили класс <code>Person</code>. В примере ниже мы создаём два его экземпляра (<code>person1</code> и <code>person2</code>).</p>
+
+<pre class="brush: js">var person1 = new Person();
+var person2 = new Person();
+</pre>
+
+<div class="note">Ознакомьтесь с {{jsxref("Object.create()")}}, новым, дополнительным методом инстанцирования, который создаёт неинициализированный экземпляр.</div>
+
+<h4 id="The_Constructor" name="The_Constructor">Конструктор</h4>
+
+<p>Конструктор вызывается в момент создания экземпляра класса (в тот самый момент, когда создается объект). Конструктор является методом класса. В JavaScript функция служит конструктором объекта, поэтому нет необходимости явно определять метод конструктор. Любое действие определенное в конструкторе будет выполненно в момент создания экземпляра класса.</p>
+
+<p>Конструктор используется для задания свойств объекта или для вызова методов, которые подготовят объект к использованию. Добавление методов и их описаний производится с использованием другого синтаксиса, описанного далее в этой статье.</p>
+
+<p>В примере ниже, конструктор класса <code>Person</code> выводит в консоль сообщение в момент создания нового экземпляра <code>Person</code>.</p>
+
+<pre class="brush: js">var Person = function () {
+ console.log('instance created');
+};
+
+var person1 = new Person();
+var person2 = new Person();
+</pre>
+
+<h4 id="The_Property_.28object_attribute.29" name="The_Property_.28object_attribute.29">Свойство (аттрибут объекта)</h4>
+
+<p>Свойства — это переменные, содержащиеся в классе; каждый экземпляр объекта имеет эти свойства. Свойства устанавливаются в конструкторе (функции) класса, таким образом они создаются для каждого экземпляра.</p>
+
+<p>Ключевое слово <code>this</code>, которое ссылается на текущий объект, позволяет вам работать со свойствами класса. Доступ (чтение и запись) к свойствам снаружи класса осуществляется синтаксисом <code>InstanceName.Property,</code> так же как в C++, Java и некоторых других языках. (Внутри класса для получения и изменения значений свойств используется синтаксис <code>this.Property</code>)</p>
+
+<p>В примере ниже, мы определяем свойство <code>firstName</code> для класса <code>Person</code> при создании экземпляра:</p>
+
+<pre class="brush: js">var Person = function (firstName) {
+ this.firstName = firstName;
+ console.log('Person instantiated');
+};
+
+var person1 = new Person('Alice');
+var person2 = new Person('Bob');
+
+// Выводит свойство firstName в консоль
+console.log('person1 is ' + person1.firstName); // выведет "person1 is Alice"
+console.log('person2 is ' + person2.firstName); // выведет "person2 is Bob"
+</pre>
+
+<h4 id="The_methods" name="The_methods">Методы</h4>
+
+<p>Методы — это функции (и определяются как функции), но с другой стороны следуют той же логике, что и свойства. Вызов метода похож на доступ к свойству, но вы добавляете () на конце имени метода, возможно, с аргументами. Чтобы объявить метод, присвойте функцию в именованное свойство свойства <code>prototype</code> класса. Потом вы сможете вызвать метод объекта под тем именем, которое вы присвоили функции.</p>
+
+<p>В примере ниже мы определяем и используем метод <code>sayHello()</code> для класса <code>Person</code>.</p>
+
+<pre class="brush: js">var Person = function (firstName) {
+ this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+ console.log("Hello, I'm " + this.firstName);
+};
+
+var person1 = new Person("Alice");
+var person2 = new Person("Bob");
+
+// вызываем метод sayHello() класса Person
+person1.sayHello(); // выведет "Hello, I'm Alice"
+person2.sayHello(); // выведет "Hello, I'm Bob"
+</pre>
+
+<p>В JavaScript методы это — обычные объекты функций, связанные с объектом как свойства: это означает, что вы можете вызывать методы "вне контекста". Рассмотрим следующий пример:</p>
+
+<pre class="brush: js">var Person = function (firstName) {
+ this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+ console.log("Hello, I'm " + this.firstName);
+};
+
+var person1 = new Person("Alice");
+var person2 = new Person("Bob");
+var helloFunction = person1.sayHello;
+
+// выведет "Hello, I'm Alice"
+person1.sayHello();
+
+// выведет "Hello, I'm Bob"
+person2.sayHello();
+
+// выведет "Hello, I'm undefined" (or fails
+// with a TypeError in strict mode)
+helloFunction();
+
+// выведет true
+console.log(helloFunction === person1.sayHello);
+
+// выведет true
+console.log(helloFunction === Person.prototype.sayHello);
+
+// выведет "Hello, I'm Alice"
+helloFunction.call(person1);</pre>
+
+<p>Как показывает пример, все ссылки, которые мы имеем на функцию <code>sayHello</code> — <code>person1</code>, <code>Person.prototype</code>, переменная <code>helloFunction</code> и т.д. — ссылаются на одну и ту же функцию. Значение <code>this</code> в момент вызова функции зависит от того, как мы её вызываем. Наиболее часто мы обращаемся к <code>this</code> в выражениях, где мы получаем функцию из свойства объекта — <code>person1.sayHello()</code> — <code>this</code> устанавливается на объект, из которого мы получили функцию (<code>person1</code>), вот почему <code>person1.sayHello()</code> использует имя "Alice", а <code>person2.sayHello()</code> использует имя "Bob". Но если вызов будет совершён иначе, то <code>this</code> будет иным: вызов <code>this</code> из переменной — <code>helloFunction()</code> — установит <code>this</code> на глобальный объект (<code>window</code> в браузерах). Так как этот объект (вероятно) не имеет свойства <code>firstName</code>, функция выведет "Hello, I'm undefined" (так произойдёт в нестрогом режиме; в <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a> всё будет иначе (ошибка), не будем сейчас вдаваться в подробности, чтобы избежать путаницы). Или мы можем указать <code>this</code> явно с помощью <code>Function#call</code> (или <code>Function#apply</code>) как показано в конце примера.</p>
+
+<div class="note"><strong>Примечание:</strong> Смотрите подробнее о <code>this</code> в  <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/call" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call">Function#call</a> и <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply">Function#apply</a></div>
+
+<h4 id="Inheritance" name="Inheritance">Наследование</h4>
+
+<p>Наследование — это способ создать класс как специализированную версию одного или нескольких классов (JavaScript поддерживает только одиночное наследование). Специализированный класс, как правило, называют потомком, а другой класс родителем. В JavaScript наследование осуществляется присвоением экземпляра класса родителя классу потомку. В современных браузерах вы можете реализовать наследование с помощью <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Classical_inheritance_with_Object.create" title="/en-US/docs/JavaScript/Reference/Global_Objects/Object/create#Classical_inheritance_with_Object.create">Object.create</a>.</p>
+
+<div class="note"><strong>Примечание:</strong> JavaScript не обнаружит <code>prototype.constructor</code> класса потомка (смотрите <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype">Object.prototype</a>) так что мы должны указать его вручную. Смотрите вопрос "<a href="http://stackoverflow.com/questions/8453887/why-is-it-necessary-to-set-the-prototype-constructor">Why is it necessary to set the prototype constructor?</a>" на Stackoverflow.</div>
+
+<p>В примере ниже мы определяем класс <code>Student</code> как потомка класса <code>Person</code>. Потом мы переопределяем метод <code>sayHello()</code> и добавляем метод <code>addGoodBye()</code>.</p>
+
+<pre class="brush: js">// Определяем конструктор Person
+var Person = function(firstName) {
+ this.firstName = firstName;
+};
+
+// Добавляем пару методов в Person.prototype
+Person.prototype.walk = function(){
+ console.log("I am walking!");
+};
+
+Person.prototype.sayHello = function(){
+ console.log("Hello, I'm " + this.firstName);
+};
+
+// Определяем конструктор Student
+function Student(firstName, subject) {
+ // Вызываем конструктор родителя, убедившись (используя Function#call)
+ // что "this" в момент вызова установлен корректно
+ Person.call(this, firstName);
+
+ // Инициируем свойства класса Student
+ this.subject = subject;
+};
+
+// Создаём объект Student.prototype, который наследуется от Person.prototype.
+// Примечание: Рспространённая ошибка здесь, это использование "new Person()", чтобы создать
+// Student.prototype. Это неверно по нескольким причинам, не в последнюю очередь
+// потому, что нам нечего передать в Person в качестве аргумента "firstName"
+// Правильное место для вызова Person показано выше, где мы вызываем
+// его в конструкторе Student.
+Student.prototype = Object.create(Person.prototype); // Смотрите примечание выше
+
+// Устанавливаем свойство "constructor" для ссылки на класс Student
+Student.prototype.constructor = Student;
+
+// Заменяем метод "sayHello"
+Student.prototype.sayHello = function(){
+ console.log("Hello, I'm " + this.firstName + ". I'm studying "
+ + this.subject + ".");
+};
+
+// Добавляем метод "sayGoodBye"
+Student.prototype.sayGoodBye = function(){
+ console.log("Goodbye!");
+};
+
+// Пример использования:
+var student1 = new Student("Janet", "Applied Physics");
+student1.sayHello(); // "Hello, I'm Janet. I'm studying Applied Physics."
+student1.walk(); // "I am walking!"
+student1.sayGoodBye(); // "Goodbye!"
+
+// Проверяем, что instanceof работает корректно
+console.log(student1 instanceof Person); // true
+console.log(student1 instanceof Student); // true
+</pre>
+
+<p>Относительно строки <code>Student.prototype = Object.create(Person.prototype);</code>: В старых движках JavaScript, в которых нет  <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create" title="Object.create">Object.create</a></code> можно использовать полифилл (ещё известный как "shim") или функцию которая достигает тех же результатов, такую как:</p>
+
+<pre class="brush: js">function createObject(proto) {
+ function ctor() { }
+ ctor.prototype = proto;
+ return new ctor();
+}
+
+// Пример использования:
+Student.prototype = createObject(Person.prototype);
+</pre>
+
+<div class="note"><strong>Примечание:</strong> Смотрите <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/create" title="Object.create">Object.create</a> для более подробной информации, и shim для реализации на старых движках.</div>
+
+<h4 id="Encapsulation" name="Encapsulation">Инкапсуляция</h4>
+
+<p>В примере выше классу <code>Student</code> нет необходимости знать о реализации метода <code>walk()</code> класса <code>Person</code>, но он может его использовать; Класс <code>Student</code> не должен явно определять этот метод, пока мы не хотим его изменить. Это называется <strong>инкапсуляция</strong>, благодаря чему каждый класс собирает данные и методы в одном блоке.</p>
+
+<p>Сокрытие информации распространённая особенность, часто реализуемая в других языках программирования как приватные и защищённые методы/свойства. Однако в JavaScript можно лишь имитировать нечто подобное, это не является необходимым требованием объектно-ориентированного программирования.<a href="#cite-2"><sup>2</sup></a></p>
+
+<h4 id="Abstraction" name="Abstraction">Абстракция</h4>
+
+<p>Абстракция это механизм который позволяет смоделировать текущий фрагмент рабочей проблемы, с помощью наследования (специализации) или композиции. JavaScript достигает специализации наследованием, а композиции возможностью экземплярам класса быть значениями атрибутов других объектов.</p>
+
+<p>В JavaScript класс <code>Function</code> наследуется от класса <code>Object</code> (это демонстрирует специализацию), а свойство <code>Function.prototype</code> это экземпляр класса <code>Object</code> (это демонстрирует композицию).</p>
+
+<pre class="brush: js">var foo = function () {};
+
+// выведет "foo is a Function: true"
+console.log('foo is a Function: ' + (foo instanceof Function));
+
+// выведет "foo.prototype is an Object: true"
+console.log('foo.prototype is an Object: ' + (foo.prototype instanceof Object));</pre>
+
+<h4 id="Polymorphism" name="Polymorphism">Полиморфизм</h4>
+
+<p>Так как все методы и свойства определяются внутри свойства <code>prototype</code>, различные классы могут определять методы с одинаковыми именами; методы находятся в области видимости класса в котором они определены, пока два класса не имеют связи родитель-потомок (например, один наследуется от другого в цепочке наследований).</p>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>Это не все способы которыми можно реализовать объектно-ориентированное программирование в JavaScript, который очень гибок в этом отношении. Также способы рассмотренные здесь не отражают всех возможностей JavaScript и не подражают реализации теории объектов в других языках.</p>
+
+<p>Существуют другие способы, которые реализуют ещё более продвинутое объектно-ориентированное программирование на JavaScript, но они выходят за рамки этой вводной статьи.</p>
+
+<h2 id="References" name="References">Ссылки</h2>
+
+<ol>
+ <li><a name="cite-1"></a>Wikipedia. "<a href="http://en.wikipedia.org/wiki/Object-oriented_programming">Object-oriented programming</a>"</li>
+ <li><a name="cite-2"></a>Wikipedia. "<a href="http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29">Encapsulation (object-oriented programming)</a>"</li>
+</ol>
diff --git a/files/ru/web/javascript/javascript_technologies_overview/index.html b/files/ru/web/javascript/javascript_technologies_overview/index.html
new file mode 100644
index 0000000000..bb06ed7392
--- /dev/null
+++ b/files/ru/web/javascript/javascript_technologies_overview/index.html
@@ -0,0 +1,85 @@
+---
+title: Обзор JavaScript
+slug: Web/JavaScript/JavaScript_technologies_overview
+translation_of: Web/JavaScript/JavaScript_technologies_overview
+---
+<div>{{JsSidebar("Introductory")}}</div>
+
+<h2 id="Введение">Введение</h2>
+
+<p>Если HTML определяет структуру и контент веб-страницы, а CSS задает формат и внешний вид, то JavaScript добавляет интерактивность и создает богатые веб-приложения. </p>
+
+<p>Однако, под общим термином "JavaScript", в контексте веб-браузера, понимаются несколько очень разных вещей. Одна из них - это базовый язык программирования (ECMAScript), а другая - коллекция Web APIs, включая DOM (Объектно-ориентированная модель документа).</p>
+
+<h2 id="JavaScript_базовый_язык_программирования_(ECMAScript)">JavaScript, базовый язык программирования (ECMAScript)</h2>
+
+<p>Базовый язык JavaScript стандартизирован комитетом ECMA TC-39 как язык программирования под названием <a href="/en-US/docs/JavaScript/Language_Resources" title="en-US/docs/JavaScript/Language_Resources">ECMAScript</a>.</p>
+
+<p>Базовый язык также используется в не-браузерном окружении, например, в <a href="http://nodejs.org/">node.js</a>.</p>
+
+<h3 id="Что_попадает_под_понятие_ECMAScript">Что попадает под понятие ECMAScript?</h3>
+
+<p>Кроме прочего, <a href="/en-US/docs/JavaScript/Language_Resources" title="en-US/docs/JavaScript/Language_Resources">ECMAScript</a> определяет:</p>
+
+<ul>
+ <li>Синтаксис языка (правила парсинга, ключевые слова, порядок выполнения, инициализацию объекта литерала...)</li>
+ <li>Механизм обработки ошибок (исключения, try/catch оператор,возможность создавать новые типы  ошибок)</li>
+ <li>Типы данных (логические, числа, строки, функции, объекты...)</li>
+ <li>Глобальный объект. В браузерах глобальным объектом является <code>window</code>, но ECMAscript определяет только те APIs, которые не являются специфическими для браузера, как <code>parseInt</code>, <code>parseFloat</code>, <code>decodeURI</code>, <code>encodeURI</code>...</li>
+ <li>Механизм прототипного наследования</li>
+ <li>Встроенные объекты и функции (JSON, Math, Array.prototype методы, методы самоанализа объекта...)</li>
+ <li>Строгий режим</li>
+</ul>
+
+<h3 id="Браузерная_поддержка">Браузерная поддержка</h3>
+
+<p>На октябрь 2016, текущие версии основых веб-браузеров включали <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla">ECMAScript 5.1</a> и <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_2015_support_in_Mozilla">ECMAScript 2015</a>, но более старые версии (все еще находящиеся в использовании) реализуют только ECMAScript 5.</p>
+
+<h3 id="Будущее">Будущее</h3>
+
+<p>Главное 6-ое издание ECMAscript было официально одобрено и опубликовано как стандарт 17 июня 2015 года на собрании ECMA General Assembly. С тех пор выпуски ECMAscript публикуются на ежегодной основе.</p>
+
+<h3 id="API_по_интернационализации">API по интернационализации</h3>
+
+<p><a href="http://ecma-international.org/ecma-402/1.0/">Спецификация ECMAScript для API по интернационализации</a> - дополнение к языковой спецификации ECMAScript, также стандартизированной Ecma TC39. API по интернационализации обеспечивает сопоставление (строковое сравнение), форматирование чисел, дат и времени для приложений на JavaScript, позволяя выбирать язык и проектировать функционал в зависимости от нужд. Начальный стандарт был одобрен в декабре 2012; статус реализации в браузерах ведется в документации <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Intl"><code>Intl</code> object</a>. Спецификация по интернационализации сейчас также утверждается на ежегодной основе, и браузеры постоянно улучшают ее реализацию.</p>
+
+<h2 id="DOM_APIs">DOM APIs</h2>
+
+<h3 id="WebIDL">WebIDL</h3>
+
+<p><a class="external" href="http://dev.w3.org/2006/webapi/WebIDL/" title="http://dev.w3.org/2006/webapi/WebIDL/">Спецификация WebIDL </a>является связующим звеном между технологиями DOM и ECMAScript.</p>
+
+<h3 id="Ядро_DOM">Ядро DOM</h3>
+
+<p>Объектно-ориентированная модель документа (DOM) это кросс-платформенное, <strong>языково-независимое соглашение</strong> по представлению объектов и взаимодейстивию с ними в документах HTML, XHTML и XML. Объект в <strong>DOM-дереве</strong> может быть адресован и обработан с помощью своих методов. Ядро Объектно-ориентированной модели документа стандартизируется W3C и определяет языково-независимые интерфейсы, абстрагирующие HTML и XML документы как объекты, и механизмы для управления этой абстракцией. Кроме прочих вещей, опреденных в DOM, можно также найти:</p>
+
+<ul>
+ <li>Структуру документа, древовидную модель, и архитектуру событий DOM в <a class="external" href="http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html" title="http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html">ядре DOM</a>: <code>Node</code>, <code>Element</code>, <code>DocumentFragment</code>, <code>Document</code>, <code>DOMImplementation</code>, <code>Event</code>, <code>EventTarget</code>, …</li>
+ <li>Менее строгое определение архитектуры событий DOM, также как и определенные <a class="external" href="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html" title="http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html">события DOM</a>.</li>
+ <li>Другие вещи, такие как <a class="external" href="http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html">DOM Traversal</a> и <a class="external" href="http://html5.org/specs/dom-range.html" title="http://html5.org/specs/dom-range.html">DOM Range</a>.</li>
+</ul>
+
+<p>С точки зрения ECMAScript, объекты определенные в спецификации DOM называются объектами среды исполнения ("host objects").</p>
+
+<h3 id="HTML_DOM">HTML DOM</h3>
+
+<p><a class="external" href="http://www.whatwg.org/html" title="http://www.whatwg.org/html">HTML</a>, это язык разметки Web, который определен в терминах DOM/ is specified in terms of the DOM. Layered above the abstract concepts defined in DOM Core, HTML also defines the <em>meaning</em> of elements. The HTML DOM includes such things as the <code>className</code> property on HTML elements, or APIs such as {{ domxref("document.body") }}.</p>
+
+<p>The HTML specification also defines restrictions on documents; for example, it requires all children of a <code>ul</code> element, which represents an unordered list, to be <code>li</code> elements, as those represent list items. In general, it also forbids using elements and attributes that aren't defined in a standard.</p>
+
+<h2 id="Другие_API_заслуживающие_внимания">Другие API, заслуживающие внимания</h2>
+
+<ul>
+ <li>Функции setTimeout и setInterval впервые были определены в интерфейсе <a class="external" href="http://www.whatwg.org/html/#window" title="http://www.whatwg.org/html/#window">Window</a> в стандарте HTML.</li>
+ <li><a class="external" href="http://dev.w3.org/2006/webapi/XMLHttpRequest-2/" title="http://dev.w3.org/2006/webapi/XMLHttpRequest-2/">XMLHttpRequest</a> позволяет отправлять асинхронные HTTP запросы.</li>
+ <li>Объектная модель <a class="external" href="http://dev.w3.org/csswg/cssom/">CSS</a> абстрагировать CSS-правила как объекты</li>
+ <li><a class="external" href="http://www.whatwg.org/specs/web-workers/current-work/">WebWorkers</a> обеспечивает выполнение параллельных вычислений.</li>
+ <li><a class="external" href="http://www.whatwg.org/C/#network">WebSockets</a> обеспечивает низкоуровневое двунаправленое соединение.</li>
+ <li><a class="external" href="http://www.whatwg.org/html/#2dcontext" title="http://www.whatwg.org/html/#2dcontext">Canvas 2D Context</a> это API для рисования с помощью элемента {{htmlelement("canvas")}}..</li>
+</ul>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>Каждый разработчик сталкивавшийся с DOM понимает как там все <a href="http://ejohn.org/blog/the-dom-is-a-mess/" title="http://ejohn.org/blog/the-dom-is-a-mess/">безнадёжно</a>. Реализация той иной функциональности может отличаться, а следовательно и поведение. Главной причиной этого послужило то, что само описание спецификации DOM, было недостаточно ясным и подробным для разработчиков браузеров. Кроме того разные производители браузеров добавили несовместимые функциональности в своих браузеры или функциональности перекрывающие друг друга (например модель событий в IE). В данный момент консорциум W3C и частично WHATWG пытаюся описать детально поведение тех или иных функций, чтобы улучшить совместимость между браузерами. Следуя этой тенденции, можно надеятся что браузеры улучшат свои реализации основываясь на этих спецификациях.</p>
+
+<p>Наиболее общий, но возможно не самый надежный способ улучшить кроссбраузерную совместимость это воспользоваться библиотеками JavaScript. Эти библиотеки абстрагируют вас от особенностей реализации DOM в том или ином браузере, и гарантируют, что их API работает одинаково в разных браузерах. Наиболее распростаненные из них это <a class="external" href="http://jquery.com/">jQuery</a> и <a class="external" href="http://www.prototypejs.org/">prototype</a>.</p>
diff --git a/files/ru/web/javascript/javascript_шеллы/index.html b/files/ru/web/javascript/javascript_шеллы/index.html
new file mode 100644
index 0000000000..b6e3421b96
--- /dev/null
+++ b/files/ru/web/javascript/javascript_шеллы/index.html
@@ -0,0 +1,44 @@
+---
+title: JavaScript оболочки
+slug: Web/JavaScript/JavaScript_шеллы
+translation_of: Web/JavaScript/Shells
+---
+<div>{{JsSidebar}}</div>
+
+<p>JavaScript оболочки позволяют быстро проверить фрагменты <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a> кода без перезагрузки страницы. Они чрезвычайно полезны для разработки и отладки кода.</p>
+
+<h2 id="Автономные_JavaScript_оболочки">Автономные JavaScript оболочки</h2>
+
+<p>Следующие JavaScript шеллы являются автономными средами, как Perl или Python.</p>
+
+<ul>
+ <li><a href="http://nodejs.org/">Node.js</a> - это платформа для простого создания быстрых, масштабируемых сетевых приложений..</li>
+ <li><a class="external" href="http://www.jsdb.org/">JSDB</a> - Автономная JavaScript оболочка для Windows, Mac, и Linux.</li>
+ <li><a href="http://javalikescript.free.fr/">JavaLikeScript</a> - Автономная расширяемая оболочка JavaScript, включающая как нативные библиотеки, так и библиотеки JavaScript.</li>
+ <li><a class="external" href="http://gluescript.sourceforge.net/" title="http://gluescript.sourceforge.net/">GLUEscript</a> - Автономная JavaScript оболочка для создания кросс-платформенных JavaScript приложений. Он может использовать wxWidgets для GUI приложений, и раньше назывался wxJavaScript.</li>
+ <li><a class="external" href="http://jspl.msg.mx/" title="http://jspl.msg.mx/">jspl</a> - Автономная JavaScript оболочка, улучшенная  при помощи Perl. Может использовать модули Perl прямо из JavaScript: DBI для интеграции с базами данных, GTK2 для GUI приложений, POSIX для системного программирования и т.д. Лучший из существующих CPAN для JavaScript программистов.</li>
+ <li><a href="http://shelljs.org/">ShellJS</a> - это портативная реализация команд оболочки Unix поверх API-интерфейса Node.js.</li>
+</ul>
+
+<h2 id="Список_JavaScript_оболочек">Список JavaScript оболочек</h2>
+
+<p>Следующие JavaScript оболочки работают с Mozilla.</p>
+
+<ul>
+ <li>Firefox имеет <a href="/en-US/docs/Tools/Web_Console/The_command_line_interpreter">встроенную консоль JavaScript</a>, которая поддерживает многострочное редактирование.</li>
+ <li><a href="/En/SpiderMonkey/Introduction_to_the_JavaScript_shell" title="En/SpiderMonkey/Introduction_to_the_JavaScript_shell">JavaScript Shell</a> (<code>js</code>) - Интерпретатор командной строки для JavaScript (необходима собственная сборка Mozilla).</li>
+ <li><a href="/en/XPConnect/xpcshell" title="en/xpcshell">xpcshell</a> — это оболочка с поддержкой <a href="/en/XPConnect" title="en/XPConnect">XPConnect</a> , иногда используется для разработки Mozilla.</li>
+ <li><a href="http://babeljs.io/repl">Babel REPL</a> - это  <a href="https://en.wikipedia.org/wiki/REPL">REPL</a> на основе браузера для экспериментов с будущим JavaScript.</li>
+ <li><a href="http://es6console.com/">ES6Console.com</a> -  консоль JavaScript с открытым исходным кодом для тестирования кода ECMAScript 2015 внутри браузера.</li>
+ <li><a href="http://jsconsole.com/">jsconsole.com</a> -- Консоль JavaScript с открытым исходным кодом с возможностью легко сослаться на конкретное выражение .</li>
+ <li><a class="external" href="http://www.squarefree.com/shell/">JavaScript Shell (web page)</a> - также доступен как часть <a class="link-https" href="https://addons.mozilla.org/en-US/firefox/addon/7434">Extension Developer's Extension</a></li>
+ <li><a class="external" href="http://www.billyreisinger.com/jash/">Jash: JavaScript Shell</a> - оболочка, основанна на DHTML, которая предоставляет доступ к командной строки веб-страницы.</li>
+ <li><a class="external" href="http://hyperstruct.net/projects/mozrepl">MozRepl</a> - Подключайтесь к Firefox и другим приложениям Mozilla, изучайте и изменяйте их изнутри, пока они работают.</li>
+ <li><a class="external" href="http://www.mouseless.de/index.php?/content/view/18/31/">Execute JS</a> - (больше не поддерживается) Расширение для Firefox, представляющее собой расширенную JavaScript-консоль, в которой можно удобно набирать и выполнять произвольный JavaScript код и изменить функции.</li>
+ <li><a href="https://addons.mozilla.org/addon/159546">xqjs</a> - Простая консоль для Firefox.</li>
+ <li><a class="external" href="http://code.eligrey.com/shell/help.html" title="http://code.eligrey.com/shell/help.html">JavaScript Shell Extended</a> - Модифицированная версия вышеупомянутого шелла с различными улучшениями, такими как поддержка JSON, поддержка последней версии JavaScript и т.д.</li>
+ <li><a class="link-https" href="https://sekhmet.acceleration.net/ADW/JsShellServer/">JavaScript Shell Server</a> - Осуществляет связь через Emacs.</li>
+ <li><a class="external" href="http://rainbow9.org">rainbow9 - JavaScript IDE</a></li>
+ <li><a class="external" href="http://www.croczilla.com/bits_and_pieces/jssh/" title="http://www.croczilla.com/bits_and_pieces/jssh/">JSSh</a> - TCP/IP серверный шелл для Mozilla.</li>
+ <li><a class="external" href="http://blogs.activestate.com/shanec/2008/05/jssh-replacemen.html">SD Connector</a> - Аналогичен JSSh, но полностью написан на JavaScript, поэтому не требует компиляции компонентов.</li>
+</ul>
diff --git a/files/ru/web/javascript/language_resources/index.html b/files/ru/web/javascript/language_resources/index.html
new file mode 100644
index 0000000000..618325a377
--- /dev/null
+++ b/files/ru/web/javascript/language_resources/index.html
@@ -0,0 +1,82 @@
+---
+title: Ресурсы по JavaScript
+slug: Web/JavaScript/Language_Resources
+translation_of: Web/JavaScript/Language_Resources
+---
+<p>{{JsSidebar}}</p>
+
+<p><strong>ECMAScript</strong> это язык программирования лежащий в основе <a href="../../../../en/JavaScript" rel="internal">JavaScript</a>. ECMAScript стандартизирован <strong>в спецификации </strong><strong>ECMA-262, </strong>организацией по стандартам <a class="external" href="http://www.ecma-international.org/" title="http://www.ecma-international.org/">Ecma International</a> . Далее в таблице перечислены утвержденные стандарты ECMAScript:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Имя</th>
+ <th>Ссылка</th>
+ <th>Дата</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>ECMA-262</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf">PDF</a></td>
+ <td>Июнь1997</td>
+ <td>оригинальный стандарт ECMAScript.</td>
+ </tr>
+ <tr>
+ <td>ECMA-262 Edition 2</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%202nd%20edition,%20August%201998.pdf">PDF</a></td>
+ <td>Август1998</td>
+ <td>Второе издание стандарта ECMAScript; также стандарт ISO 16262.</td>
+ </tr>
+ <tr>
+ <td>ECMA-262 Edition 3</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf">PDF</a></td>
+ <td>Декабрь1999</td>
+ <td>Третье издание стандарта ECMAScript; соотвестствует JavaScript 1.5.<br>
+ Смотри также <a class="external" href="http://www.mozilla.org/js/language/E262-3-errata.html">опечатки</a></td>
+ </tr>
+ <tr>
+ <td>ECMA-262 Edition 5</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262%205th%20edition%20December%202009.pdf">PDF</a></td>
+ <td>Декабрь 2009</td>
+ <td>ECMAScript 5<br>
+ Смотри также <a class="external" href="http://wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft">опечатки </a><a class="external" href="http://wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft">ES5</a> и <a href="/En/JavaScript/ECMAScript_5_support_in_Mozilla" title="en/JavaScript/ECMAScript 5 support in Mozilla">поддержка </a><a href="/En/JavaScript/ECMAScript_5_support_in_Mozilla" title="en/JavaScript/ECMAScript 5 support in Mozilla">ECMAScript 5 в Mozilla</a></td>
+ </tr>
+ <tr style="background-color: lightgreen;">
+ <td>ECMA-262 Edition 5.1</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf">PDF</a></td>
+ <td>Июнь 2011</td>
+ <td>ECMAScript 5.1, последнее опубликованное издание стандарта.<br>
+ Эта версия полностью совместима с 3й редакцией международного стандарта <a class="external" href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=55755">ISO/IEC 16262:2011</a>.<br>
+ Она включает в себя исправления опечаток ES5, и не содержит нововведений.</td>
+ </tr>
+ <tr>
+ <td>ECMA-357</td>
+ <td><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-357,%201st%20edition,%20June%202004.pdf">PDF</a></td>
+ <td>Июнь 2004</td>
+ <td><a href="/en/E4X" title="en/E4X">ECMAScript для XML (E4X)</a>.<br>
+ Смотри также <a class="link-https" href="https://bugzilla.mozilla.org/attachment.cgi?id=169406">опечатки </a><a class="link-https" href="https://bugzilla.mozilla.org/attachment.cgi?id=169406">E4X</a>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Узнать больше о истории ECMAScript можно <a class="external" href="http://en.wikipedia.org/wiki/ECMAScript" title="http://en.wikipedia.org/wiki/ECMAScript">на странице википедии посвященнной ECMAScript</a>.</p>
+
+<p>Вы можете принять участие или просто отслеживать работу над следующей версией стандарта, которая разрабатывается под кодовым названием"Harmony", с помощью публично-доступного вики и <a class="link-https" href="https://mail.mozilla.org/listinfo/es-discuss" title="https://mail.mozilla.org/listinfo/es-discuss">es-discuss список рассылки</a> привязанного к <a class="external" href="http://www.ecmascript.org/community.php" title="http://www.ecmascript.org/community.php">ecmascript.org</a>.</p>
+
+<h2 id="Реализации">Реализации</h2>
+
+<ul>
+ <li><a href="/en/SpiderMonkey" title="en/SpiderMonkey">SpiderMonkey</a> - JavaScript движок используемый в Firefox;</li>
+ <li><a href="/en/Rhino" title="en/Rhino">Rhino</a> - JavaScript движок написанный на Java;</li>
+ <li><a href="/en/Tamarin" title="en/Tamarin">Tamarin</a> - ActionScript виртуальная машина (использованная в Adobe® Flash® Player);</li>
+ <li><a class="external" href="http://en.wikipedia.org/wiki/List_of_ECMAScript_engines" title="http://en.wikipedia.org/wiki/List_of_ECMAScript_engines">Другие реализации</a>(википедия).</li>
+</ul>
+
+<h3 id="Смотри_также">Смотри также</h3>
+
+<ul>
+ <li><a class="external" href="http://brendaneich.com/" title="http://brendaneich.com/">Блог Брендана Эйка</a>. Брендан создатель JavaScript и движка SpiderMonkey. Он все еще работает с рабочей группой ECMA чтобы развивать язык.</li>
+ <li><a class="external" href="http://dmitrysoshnikov.com/" title="http://dmitrysoshnikov.com/">Дмитрий Сошников анализ ECMA-262 Edition 3 и 5</a></li>
+</ul>
+
+<p>{{ languages( { "ja": "ja/JavaScript_Language_Resources", "pl": "pl/Zasoby_j\u0119zyka_JavaScript" } ) }}</p>
diff --git a/files/ru/web/javascript/memory_management/index.html b/files/ru/web/javascript/memory_management/index.html
new file mode 100644
index 0000000000..bcdf39cd3d
--- /dev/null
+++ b/files/ru/web/javascript/memory_management/index.html
@@ -0,0 +1,178 @@
+---
+title: Управление памятью
+slug: Web/JavaScript/Memory_Management
+translation_of: Web/JavaScript/Memory_Management
+---
+<div>{{JsSidebar("Advanced")}}</div>
+
+<h2 id="Введение">Введение</h2>
+
+<p>Низкоуровневые языки программирования (например, C) имеют низкоуровневые примитивы для управления памятью, такие как <code>malloc()</code> и <code>free()</code>. В JavaScript же память выделяется динамически при создании сущностей (т.е., объектов, строк и т.п.) и "автоматически" освобождается, когда они больше не используются. Последний процесс называется <em>сборкой мусора</em> . Слово "автоматически" является источником путаницы и зачастую создает у программистов на JavaScript (и других высокоуровневых языках) ложное ощущение, что они могут не заботиться об управлении памятью.</p>
+
+<h2 id="Жизненный_цикл_памяти">Жизненный цикл памяти</h2>
+
+<p>Независимо от языка программирования, жизненный цикл памяти практически всегда один и тот же:</p>
+
+<ol>
+ <li>Выделение необходимой памяти.</li>
+ <li>Её использование (чтение, запись).</li>
+ <li>Освобождение выделенной памяти, когда в ней более нет необходимости.</li>
+</ol>
+
+<p>Первые два пункта осуществляются явным образом (т.е., непосредственно программистом) во всех языках программирования. Третий пункт осуществляется явным образом в низкоуровневых языках, но в большинстве высокоуровневых языков, в том числе и в JavaScript, осуществляется автоматически.</p>
+
+<h3 id="Выделение_памяти_в_JavaScript">Выделение памяти в JavaScript</h3>
+
+<h4 id="Выделение_памяти_при_инициализации_значений_переменных">Выделение памяти при инициализации значений переменных</h4>
+
+<p>Чтобы не утруждать программиста заботой о низкоуровневых операциях выделения памяти, интерпретатор JavaScript динамически выделяет необходимую память при объявлении переменных:</p>
+
+<div style="overflow: hidden;">
+<pre class="brush: js notranslate">var n = 123; // выделяет память для типа number
+var s = "azerty"; // выделяет память для типа string
+
+var o = {
+ a: 1,
+ b: null
+}; // выделяет память для типа object и всех его внутренних переменных
+
+var a = [1, null, "abra"]; // (like object) выделяет память для array и его внутренних значений
+
+function f(a){
+ return a + 2;
+} // выделяет память для function (которая представляет собой вызываемый объект)
+
+// функциональные выражения также выделяют память под object
+someElement.addEventListener('click', function(){
+ someElement.style.backgroundColor = 'blue';
+}, false);
+</pre>
+</div>
+
+<h4 id="Выделение_памяти_при_вызовах_функций">Выделение памяти при вызовах функций</h4>
+
+<p>Вызовы некоторых функций также ведут к выделению памяти под объект:</p>
+
+<pre class="brush: js notranslate">var d = new Date();
+var e = document.createElement('div'); // выделяет память под DOM элемент
+</pre>
+
+<p>Некоторые методы выделяют память для новых значений или объектов:</p>
+
+<pre class="brush: js notranslate">var s = "azerty";
+var s2 = s.substr(0, 3); // s2 это новый объект типа string
+// Т.к. строки - это постоянные значения, интерпретатор может решить, что память выделять не нужно, но нужно лишь сохранить диапазон [0, 3].
+
+var a = ["ouais ouais", "nan nan"];
+var a2 = ["generation", "nan nan"];
+var a3 = a.concat(a2); // новый массив с 4 элементами в результате конкатенации элементов 'a' и 'a2'
+</pre>
+
+<h3 id="Использование_значений">Использование значений</h3>
+
+<p>"Использование значений", как правило, означает -  чтение и запись значений из/в выделенной для них области памяти. Это происходит при чтении или записи значения какой-либо переменной, или свойства объекта или даже при передаче аргумента функции.</p>
+
+<h3 id="Освобождение_памяти_когда_она_более_не_нужна">Освобождение памяти, когда она более не нужна</h3>
+
+<p>Именно на этом этапе появляется большинство проблем из области "управления памятью". Наиболее сложной задачей в данном случае является чёткое определение того момента, когда "выделенная память более не нужна". Зачастую программист сам должен определить, что в данном месте программы данная часть памяти более уже не нужна и освободить её.</p>
+
+<p>Интерпретаторы языков высокого уровня снабжаются встроенным программным обеспечением под названием "сборщик мусора", задачей которого является следить за выделением и использованием памяти и при необходимости автоматически освобождать более не нужные участки памяти. Это происходит весьма приблизительно, так как основная проблема точного определения того момента, когда какая-либо часть памяти более не нужна -  <a class="external" href="http://en.wikipedia.org/wiki/Decidability_%28logic%29">неразрешима</a> (т.е., данная проблема не поддаётся однозначному алгоритмическому решению).</p>
+
+<h2 id="Сборка_мусора">Сборка мусора</h2>
+
+<p>Как уже упоминалось выше, проблема точного определения, когда какая-либо часть памяти "более не нужна" - однозначно неразрешима. В результате сборщики мусора решают поставленную задачу лишь частично. В этом разделе мы объясним основополагающие моменты, необходимые для понимания принципа действия основных алгоритмов сборки мусора и их ограничений.</p>
+
+<h3 id="Ссылки">Ссылки</h3>
+
+<p>Большая часть алгоритмов сборки мусора основана на понятии <em>ссылки</em>. В контексте управления памятью объект считается ссылающимся на другой объект, если у первого есть доступ ко второму (неважно - явный или неявный). К примеру, каждый объект JavaScript имеет ссылку на свой <a href="/en/JavaScript/Guide/Inheritance_and_the_prototype_chain" title="en/JavaScript/Guide/Inheritance_and_the_prototype_chain">прототип</a> (неявная ссылка) и ссылки на значения своих полей (явные ссылки).</p>
+
+<p>В данном контексте понятие "объект" понимается несколько шире, нежели для типичных JavaScript-объектов и дополнительно включает в себя понятие областей видимости функций (или глобальной лексической области)</p>
+
+<h3 id="Сборка_мусора_на_основе_подсчёта_ссылок">Сборка мусора на основе подсчёта ссылок</h3>
+
+<p>Это наиболее примитивный алгоритм сборки мусора, сужающий понятие "объект более не нужен" до "для данного объекта более нет ни одного объекта, ссылающегося на него". Объект считается подлежащим уничтожению сборщиком мусора, если количество ссылок на него равно нулю.</p>
+
+<h4 id="Пример">Пример</h4>
+
+<pre class="brush: js notranslate">var o = {
+ a: {
+ b:2
+ }
+}; // создано 2 объекта. Один ссылается на другой как на одно из своих полей.
+// Второй имеет виртуальную ссылку, поскольку присвоен в качестве значения переменной 'o'.
+// Очевидно, что ни один из них не подлежит сборке мусора.
+
+
+var o2 = o; // переменная 'o2' - вторая ссылка на объект
+o = 1; // теперь объект, имевший изначально ссылку на себя из 'o' имеет уникальную ссылку через переменную 'o2'
+
+var oa = o2.a; // ссылка на поле 'a' объекта.
+// Теперь на объект 2 ссылки: одна на его поле и вторая - переменная 'oa'
+
+o2 = "yo"; // Объект, на который изначально ссылалась переменная 'o', теперь имеет ноль ссылок на неё.
+// Может быть уничтожен при сборке мусора.
+// Однако, на его поле 'a' всё ещё ссылается переменная 'oa', так что удалять его ещё нельзя
+
+oa = null; // оригинальное значение поля объекта 'a' в переменной o имеет ноль ссылок на себя.
+// можно уничтожить при сборке мусора.
+</pre>
+
+<h4 id="Ограничение_циклические_ссылки">Ограничение : циклические ссылки</h4>
+
+<p>Основное ограничение данного наивного алгоритма заключается в том, что если два объекта ссылаются друг на друга (создавая таким образом циклическую ссылку), они не могут быть уничтожены сборщиком мусора, даже если "более не нужны".</p>
+
+<pre class="brush: js notranslate">function f(){
+ var o = {};
+ var o2 = {};
+ o.a = o2; // o ссылается на o2
+ o2.a = o; // o2 ссылается на o
+
+ return "azerty";
+}
+
+f();
+</pre>
+
+<p>Создаётся два ссылающихся друг на друга объекта, что порождает циклическую ссылку. Они не будут удалены из области видимости функции после завершения работы этой функции, таким образом, сборщик мусора не сможет их удалить, несмотря на их очевидную ненужность. Так как сборщик мусора считает, что, раз на каждый из объектов существует как минимум одна ссылка, то уничтожать их нельзя.</p>
+
+<h4 id="Пример_из_реальной_жизни">Пример из реальной жизни</h4>
+
+<p>Браузеры Internet Explorer версий 6, 7 имеют сборщик мусора для DOM-объектов, работающий по принципу подсчёта ссылок. Поэтому данные браузеры можно легко принудить к порождению систематических утечек памяти (memory leaks) следующим образом:</p>
+
+<pre class="brush: js notranslate">var div;
+window.onload = function(){
+ div = document.getElementById("myDivElement");
+ div.circularReference = div; // DOM-элемент "myDivElement" получает ссылку на себя
+ div.lotsOfData = new Array(10000).join("*");
+};
+</pre>
+
+<p>DOM-элемент "myDivElement" имеет циклическую ссылку на самого себя в поле "circularReference". Если это свойство не будет явно удалено или установлено в null, сборщик мусора всегда будет определять хотя бы одну ссылку на DOM-элемент, и будет держать DOM-элемент в памяти, даже если DOM-элемент удалят из DOM-дерева. Таким образом, если DOM-элемент содержит много данных (иллюстрируется полем "lotsOfData"), то память, используемая под эти данные, никогда не будет освобождена.</p>
+
+<h3 id="Алгоритм_Mark-and-sweep">Алгоритм "Mark-and-sweep"</h3>
+
+<p>Данный алгоритм сужает понятие "объект более не нужен" до "объект недоступен".</p>
+
+<p>Основывается на понятии о наборе объектов, называемых <em>roots</em> (в JavaScript root'ом является глобальный объект). Сборщик мусора периодически запускается из этих roots, сначала находя все объекты, на которые есть ссылки из roots, затем все объекты, на которые есть ссылки из найденных и так далее. Стартуя из roots, сборщик мусора, таким образом, находит все <em>доступные</em> объекты и уничтожает недоступные.</p>
+
+<p>Данный алгоритм лучше предыдущего, поскольку "ноль ссылок на объект" всегда входит в понятие "объект недоступен". Обратное же - неверно, как мы только что видели выше на примере циклических ссылок.</p>
+
+<p>Начиная с 2012 года, все современные веб-браузеры оснащаются сборщиками мусора, работающими исключительно по принципу mark-and-sweep ("пометь и выброси"). Все усовершенствования в области сборки мусора в интерпретаторах JavaScript (генеалогическая/инкрементальная/конкурентная/параллельная сборка мусора) за последние несколько лет представляют собой усовершенствования данного алгоритма, но не новые алгоритмы сборки мусора, поскольку дальнейшее сужение понятия "объект более не нужен" не представляется возможным.</p>
+
+<h4 id="Теперь_циклические_ссылки_-_не_проблема">Теперь циклические ссылки - не проблема</h4>
+
+<p>В вышеприведённом первом примере после возврата из функции оба объекта не имеют на себя никаких ссылок, доступных из глобального объекта. Соответственно, сборщик мусора пометит их как недоступные и затем удалит.</p>
+
+<p>То же самое касается и второго примера. Как только div и его обработчик станут недоступны из roots, они оба будут уничтожены сборщиком мусора, несмотря на наличие циклических ссылок друг на друга.</p>
+
+<h4 id="Ограничение_некоторые_объекты_нуждаются_в_явном_признаке_недоступности">Ограничение: некоторые объекты нуждаются в явном признаке недоступности</h4>
+
+<p>Хотя этот частный случай и расценивается, как ограничение, но на практике он встречается крайне редко, поэтому, в большинстве случаев, Вам не нужно беспокоиться о сборке мусора.</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a class="external" href="http://www.ibm.com/developerworks/web/library/wa-memleak/">статья IBM "Шаблоны утечек памяти в JavaScript" (2007)</a></li>
+ <li><a class="external" href="http://msdn.microsoft.com/en-us/magazine/ff728624.aspx">статья Kangax о том, как правильно регистрировать обработчики событий для предотвращения утечек памяти (2010)</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Performance" title="https://wiki.mozilla.org/Performance:Leak_Tools">Performance</a></li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/1.5/index.html b/files/ru/web/javascript/new_in_javascript/1.5/index.html
new file mode 100644
index 0000000000..a27746c51b
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/1.5/index.html
@@ -0,0 +1,37 @@
+---
+title: Новое в JavaScript 1.5
+slug: Web/JavaScript/New_in_JavaScript/1.5
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.5
+---
+<div>{{jsSidebar("New_in_JS")}}</div>
+
+<p>Следующий список описывает изменения в JavaScript 1.5. Эта версия была включена в Netscape Navigator 6.0, дата релиза которого – 14 ноября 2000 года. Также Javascript 1.5 использовался в более поздних версиях Netscape Navigator, а также Firefox 1.0.  JavaScript 1.5 соответствует JScript версии 5.5 используемой в Internet Explorer 5.5, который был представлен в июле 2000. Соответствующая версия стандарта ECMA – ECMA-262 третьей редакции (от декабря 1999 года).</p>
+
+<h2 id="Новое_в_JavaScript_1.5">Новое в JavaScript 1.5</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Number/toExponential"><code>Number.prototype.toExponential()</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed"><code>Number.prototype.toFixed()</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Number/toPrecision"><code>Number.prototype.toPrecision()</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/const"><code>const</code></a></li>
+ <li>Поддержка множественных <code>catch</code> в блоке <a href="/ru/docs/Web/JavaScript/Reference/Statements/try...catch"><code>try...catch</code></a>.</li>
+ <li>Добавлена возможность определения геттеров и сеттеров для объектов.</li>
+</ul>
+
+<h2 id="Что_изменилось_в_JavaScript_1.5">Что изменилось в JavaScript 1.5</h2>
+
+<ul>
+ <li>Об ошибках выполнения сообщается в виде исключений.</li>
+ <li>Изменения в регулярных выражениях:
+ <ul>
+ <li>Кванторы  <code>+</code>, <code>*</code>, <code>?</code> и <code>{}</code> теперь могут сопровождаться <code>?</code> для того, чтобы показать, что они не являются "жадными".</li>
+ <li>Поддержка группировки без обратной связи, <code>(?:x)</code> может быть использован вместо обычной группировки, <code>(x)</code>. Когда используется группировка без обратной связи, найденные подстроки недоступны для дальнейшего использования.</li>
+ <li>Поддержка позитивного и негативного просмотра. Доступен поиск подстроки, исходя из того, какой текст окружает искомую подстроку.</li>
+ <li>Поддержка флага <code>m </code>для реализации многострочного поиска.</li>
+ </ul>
+ </li>
+ <li>Функции теперь могут быть объявлены внутри условия if.</li>
+ <li>
+ <p>Функции теперь могут быть объявлены внутри выражения.</p>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/1.6/index.html b/files/ru/web/javascript/new_in_javascript/1.6/index.html
new file mode 100644
index 0000000000..252db0756e
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/1.6/index.html
@@ -0,0 +1,32 @@
+---
+title: Новое в JavaScript 1.6
+slug: Web/JavaScript/New_in_JavaScript/1.6
+tags:
+ - JavaScript
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.6
+---
+<div>{{jsSidebar("New_in_JS")}}</div>
+
+<p>The following is a changelog for JavaScript 1.6. This version was included in Firefox 1.5 (Gecko 1.8), which was released in November 2005. The corresponding ECMA standard is ECMA-262 Edition 3 and ECMAScript for XML (E4X) with some additional features. Several new features were introduced: E4X, several new <code>Array</code> methods, and Array and String generics.</p>
+
+<h2 id="New_features_in_JavaScript_1.6">New features in JavaScript 1.6</h2>
+
+<ul>
+ <li>Support for ECMAScript for XML (<a href="/en-US/docs/Archive/Web/E4X" title="E4X">E4X</a>) for creating and processing <a href="/en-US/docs/Glossary/XML" title="XML">XML</a> content within <a href="/en-US/docs/Web/JavaScript" title="JavaScript">JavaScript</a> has been added. See <a href="/en-US/docs/Archive/Web/E4X/Processing_XML_with_E4X" title="E4X/Processing_XML_with_E4X">Processing XML with E4X</a> for details.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf"><code>Array.prototype.indexOf()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf"><code>Array.prototype.lastIndexof()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every"><code>Array.prototype.every()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter"><code>Array.prototype.filter()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach"><code>Array.prototype.forEach()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map"><code>Array.prototype.map()</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some"><code>Array.prototype.some()</code></a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Array_generic_methods" title="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array#Array_generics">Array generics</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#String_generic_methods" title="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String#String_generics">String generics</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for_each...in"><code>for each...in</code></a></li>
+</ul>
+
+<h2 id="Changed_functionality_in_JavaScript_1.6">Changed functionality in JavaScript 1.6</h2>
+
+<ul>
+ <li>A <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=292215">bug</a> in which <a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments"><code>arguments[n]</code></a> cannot be set if <code>n</code> is greater than the number of formal or actual parameters has been fixed.</li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/1.8.1/index.html b/files/ru/web/javascript/new_in_javascript/1.8.1/index.html
new file mode 100644
index 0000000000..eeceb235b3
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/1.8.1/index.html
@@ -0,0 +1,31 @@
+---
+title: Новое в JavaScript 1.8.1
+slug: Web/JavaScript/New_in_JavaScript/1.8.1
+tags:
+ - Firefox 3.5
+ - JavaScript
+ - Версии
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.1
+---
+<div>{{jsSidebar("New_in_JS")}}</div>
+
+<p>Ниже приведен список изменений в JavaScript 1.8.1. Эта версия включена в <a href="/en-US/Firefox/Releases/3.5">Firefox 3.5</a>.</p>
+
+<p>JavaScript 1.8.1 это скромное обновление синтаксиса на JavaScript; главным изменением является добавление <a href="/en-US/docs/SpiderMonkey/Internals/Tracing_JIT" title="SpiderMonkey/Internals/Tracing JIT">Tracemonkey just-in-time compiler</a>, которое повышает производительность.</p>
+
+<h2 id="Новшества_в_JavaScript_1.8.1">Новшества в JavaScript 1.8.1</h2>
+
+<ul>
+ <li>{{jsxref("Object.getPrototypeOf()")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Using_native_JSON">Support for native JSON</a></li>
+ <li>{{jsxref("String.prototype.trim()")}}</li>
+ <li>{{jsxref("String.prototype.trimLeft()")}}</li>
+ <li>{{jsxref("String.prototype.trimRight()")}}</li>
+ <li>{{jsxref("String.prototype.startsWith()")}}</li>
+</ul>
+
+<h2 id="Измененные_функции_в_JavaScript_1.8.1">Измененные функции в JavaScript 1.8.1</h2>
+
+<ul>
+ <li>Неявные настройки свойств объекта и массив инициализаторов больше не исполняет сеттеры в JavaScript. Это делает поведение сеттеров более предсказуемым.</li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/1.8.5/index.html b/files/ru/web/javascript/new_in_javascript/1.8.5/index.html
new file mode 100644
index 0000000000..ab6a9d4ce3
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/1.8.5/index.html
@@ -0,0 +1,122 @@
+---
+title: Новое в JavaScript 1.8.5
+slug: Web/JavaScript/New_in_JavaScript/1.8.5
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8.5
+---
+<div>{{jsSidebar("New_in_JS")}}</div>
+
+<p>Далее приведён список изменений в JavaScript 1.8.5. Эта версия была включена в <a href="/en-US/Firefox/Releases/4">Firefox 4</a>.</p>
+
+<h2 id="Что_нового_в_JavaScript_1.8.5">Что нового в JavaScript 1.8.5</h2>
+
+<h3 id="Новые_функции">Новые функции</h3>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Функция</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create" title="JavaScript/Reference/Global Objects/Object/Create">Object.create()</a></code></td>
+ <td>Создаёт новый обЪект с указанным прототипом и свойствами. {{bug("492840")}}</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty" title="JavaScript/Reference/Global Objects/Object/DefineProperty">Object.defineProperty()</a></code></td>
+ <td>Добавляет свойство с переданным дескриптором к объекту.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties" title="JavaScript/Reference/Global Objects/Object/DefineProperties">Object.defineProperties()</a></code></td>
+ <td>Добавляет свойства с переданными дескрипторами к объекту.</td>
+ </tr>
+ <tr>
+ <td><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor" title="JavaScript/Reference/Global Objects/Object/GetOwnPropertyDescriptor">Object.getOwnPropertyDescriptor()</a></code></td>
+ <td>Возвращает дескриптор свойства переданного объекта. {{bug("505587")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys" title="JavaScript/Reference/Global Objects/Object/keys"><code>Object.keys()</code></a></td>
+ <td>Возвращает массив всех перечисляемых свойств объекта. {{bug("307791")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames" title="JavaScript/Reference/Global Objects/Object/getOwnPropertyNames"><code>Object.getOwnPropertyNames()</code></a></td>
+ <td>Возвращает массив всех перечисляемых и не перечисляемых свойств объекта. {{bug("518663")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions" title="JavaScript/Reference/Global Objects/Object/preventExtensions"><code>Object.preventExtensions()</code></a></td>
+ <td>Предотвращает любые расширения объекта. {{bug("492849")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible" title="JavaScript/Reference/Global Objects/Object/isExtensible"><code>Object.isExtensible()</code></a></td>
+ <td>Определяет, разрешено ли расширение объекта. {{bug("492849")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/seal" title="JavaScript/Reference/Global Objects/Object/seal"><code>Object.seal()</code></a></td>
+ <td>Запрещает остальному коду удаление свойств объекта {{bug("492845")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed" title="JavaScript/Reference/Global Objects/Object/isSealed"><code>Object.isSealed()</code></a></td>
+ <td>Определяет, запрещено ли удаление свойств объекта. {{bug("492845")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze" title="JavaScript/Reference/Global Objects/Object/freezed"><code>Object.freeze()</code></a></td>
+ <td>Замораживает объект: остальной код не может удалять или изменять значения его свойств. {{bug("492844")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen" title="JavaScript/Reference/Global Objects/Object/isFrozen"><code>Object.isFrozen()</code></a></td>
+ <td>Определяет, был ли объект заморожен. {{bug("492844")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray" title="JavaScript/Reference/Global Objects/Array/isArray"><code>Array.isArray()</code></a></td>
+ <td>Проверяет, является ли переменная массивом. {{bug("510537")}}</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toJSON" title="JavaScript/Reference/Global Objects/Date/toJSON"><code>Date.prototype.toJSON()</code></a></td>
+ <td>Возвращает строку в формате JSON для объекта <code>Date</code>.</td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind" title="JavaScript/Reference/Global_Objects/Function/bind"><code>Function.prototype.bind()</code></a></td>
+ <td>Метод <code>bind()</code> создаёт новую функцию, которая при вызове устанавливает в качестве контекста выполнения <code>this</code> предоставленное значение. В метод также передаётся набор аргументов, которые будут установлены перед переданными в привязанную функцию аргументами при её вызове.{{bug("429507")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Новые_возможности_ECMAScript5">Новые возможности ECMAScript5</h3>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/get" title="JavaScript/Reference/Operators/Special Operators/get Operator">get</a></code> и <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/set" title="JavaScript/Reference/Operators/Special Operators/set Operator">set</a></code> операторы теперь позволяют идентификатору быть строкой или числом. {{bug("520696")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="JavaScript/Reference/Global Objects/Function/apply"><code>Function.apply()</code></a> может принимать в качестве списка аргументов не только настоящие массивы, но и подобные массивам объекты.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode" title="JavaScript/Strict mode">strict mode support</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toString" title="JavaScript/Reference/Global Objects/Array/toString"><code>Array.toString()</code></a> теперь работает не только на массивах, возвращая либо результат вызова <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join" title="JavaScript/Reference/Global Objects/Array/join"><code>join()</code></a> , если он доступен, либо вызова  <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString" title="JavaScript/Reference/Global Objects/Object/toString">toString()</a>.</code></li>
+</ul>
+
+<h3 id="Другая_работа_по_стандартизации">Другая работа по стандартизации</h3>
+
+<p>Различные нестандартизованные синтаксические конструкции задания геттеров/сеттеров были удалены; Определенный в  ECMAScript 5 синтаксис изменениям не подвергся. Все они были несколько "эзотерическими" и довольно редко использовались на практике; если эти изменения Вас затронули, прочтите <a href="http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/">эту статью</a>.</p>
+
+<h3 id="Новые_объекты">Новые объекты</h3>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Объект</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Proxy" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Proxy">Proxy</a></code></td>
+ <td>Предлагает поддержку при создании <code>Object</code> и <code>Function</code> прокси, что позволяет использовать метапрограммирование на JavaScript.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Функциональность_изменённая_в_JavaScript_1.8.5">Функциональность, изменённая в JavaScript 1.8.5</h2>
+
+<ul>
+ <li>ISO 8601 поддерживается в <code>Date:</code> метод <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse">parse()</a> объекта <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date">Date</a>  теперь допускает использование формата  ISO 8601 для строкового представления даты.</li>
+ <li>Глобальные объекты стали доступны "только для чтения": глобальные объекты <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="JavaScript/Reference/Global Objects/NaN"><code>NaN</code></a>, <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity" title="JavaScript/Reference/Global Objects/Infinity"><code>Infinity</code></a>, и <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined" title="JavaScript/Reference/Global Objects/undefined"><code>undefined</code></a> теперь доступны только для чтения по спецификации ECMAScript 5.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/Parent" title="JavaScript/Reference/Global Objects/Object/Parent"><code>obj.__parent__</code></a> и <code>obj.__count__</code> устарели. Больше информации, почему это произошло: <a class="external" href="http://whereswalden.com/2010/05/07/spidermonkey-change-du-jour-the-special-__parent__-property-has-been-removed/" title="http://whereswalden.com/2010/05/07/spidermonkey-change-du-jour-the-special-__parent__-property-has-been-removed/">SpiderMonkey change du jour: the special __parent__ property has been removed</a> {{bug("551529")}} &amp; {{bug("552560")}}.</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse" title="Using native JSON"><code>JSON.parse()</code></a> больше не допускает использование конечных запятых.</li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/1.8/index.html b/files/ru/web/javascript/new_in_javascript/1.8/index.html
new file mode 100644
index 0000000000..8187682071
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/1.8/index.html
@@ -0,0 +1,38 @@
+---
+title: New in JavaScript 1.8
+slug: Web/JavaScript/New_in_JavaScript/1.8
+tags:
+ - Версии
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/1.8
+---
+<div>{{jsSidebar("New_in_JS")}}</div>
+
+<p>Следующее описание относится к  JavaScript 1.8. Эта версия была включена в <a href="/ru/docs/Firefox_3_for_developers">Firefox 3</a> является частью Gecko 1.9. {{ Bug("380236") }} – здесь вы можете просмотреть исправленные в процессе разработки JavaScript 1.8 баги.</p>
+
+<h2 id="Использование_JavaScript_1.8">Использование JavaScript 1.8</h2>
+
+<p>Чтобы воспользоваться преимуществами JavaScript 1.8, используйте следующий синтаксис подключения:</p>
+
+<pre class="brush: html"> &lt;script type="application/javascript;version=1.8"&gt; ... your code ... &lt;/script&gt;
+</pre>
+
+<p>Альтернативным методом является использование устаревшего аттрибута <code>language</code> тэга <code>script</code>. Для этого необходимо установить ему значение <code>JavaScript1.8</code>. Этот способ не рекомендуется к применению.</p>
+
+<p>При использовании <a href="/ru/docs/Web/JavaScript/JavaScript_шеллы" title="Introduction_to_the_JavaScript_shell">JavaScript шеллов</a>, JavaScript XPCOM компонент, или XUL <code>&lt;script&gt;</code> элементов, последняя версия JavaScript (JS1.8 в Mozilla 1.9) будет использована автоматически ({{ Bug(381031) }}, {{ Bug(385159) }}).</p>
+
+<p>Нововведения, которые используют ключевые слова <code>yield</code> и <code>let</code> требуют использования Javascript версии 1.7 или выше, потому как существующий код может использовать эти ключевые слова как названия переменных или функций. Остальные нововведения (например, генераторы) могут быть использованы без указания версии JavaScript.</p>
+
+<h2 id="Новое_в_JavaScript_1.8">Новое в JavaScript 1.8</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Expression_Closures">Короткий синтаксис определения функций</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Генераторы</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce"><code>Array.prototype.reduce()</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/ReduceRight"><code>Array.prototype.reduceRight()</code></a></li>
+</ul>
+
+<h2 id="Изменения_в_JavaScript_1.8">Изменения в JavaScript 1.8</h2>
+
+<h3 id="Изменения_в_деструктивном_присваивании">Изменения в деструктивном присваивании</h3>
+
+<p>Багфикс, который был добавлен в  JavaScript 1.8, решает проблему связанную с <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" title="New in JavaScript 1.7">деструктивным присваиванием</a>, которое было введено в JavaScript 1.7.  Изменен механизм  деструктуризации массивов при использовании <code>for (var [a,b] in array)</code>. Ранее был доступен вызов в форме, описанной выше, однако это вызывало некорректное поведение цикла при работе с итераторами. Проблема решена ({{ Bug("366941") }}). Теперь следует использовать следующий синтаксис: <code>for ( var [key, value] in Iterator(array))</code>.</p>
diff --git a/files/ru/web/javascript/new_in_javascript/ecmascript_5_support_in_mozilla/index.html b/files/ru/web/javascript/new_in_javascript/ecmascript_5_support_in_mozilla/index.html
new file mode 100644
index 0000000000..50fbcca8b5
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/ecmascript_5_support_in_mozilla/index.html
@@ -0,0 +1,46 @@
+---
+title: Поддержка ECMAScript 5 в Mozilla
+slug: Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla
+tags:
+ - ECMAScript5
+ - JavaScript
+ - Versions
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla
+---
+<p>{{jsSidebar("New_in_JS")}}</p>
+
+<p>Стандарт ECMAScript 5.1, последнее издание стандарта, на котором основан язык JavaScript, был принят в июне 2011 года.</p>
+
+<p>Среда выполнения JavaScript, используемая в последних версиях проектов Mozilla, включающих Firefox и Thunderbird, имеет полную поддержку возможностей ECMAScript 5.1. Эта статья описывает возможности, поддерживаемые разными версиями среды выполнения JavaScript Mozilla.</p>
+
+<h2 id="Supported_features" name="Supported_features">Поддерживаемые возможности</h2>
+
+<h3 id="Added_in_JavaScript_1.8.5_(Gecko_2.2C_Firefox_4_and_later)" name="Added_in_JavaScript_1.8.5_(Gecko_2.2C_Firefox_4_and_later)">Добавленные в JavaScript 1.8.5 (Gecko 2, Firefox 4 и более поздние)</h3>
+
+<p>Firefox 4 имеет полную поддержку стандарта ECMAScript 5, включая методы <code>Object.*</code> и строгий режим. Смотрите статью <a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8.5">Что нового в JavaScript 1.8.5</a>.</p>
+
+<h3 id="Added_in_JavaScript_1.8.1_(Gecko_1.9.1.2C_Firefox_3.5)" name="Added_in_JavaScript_1.8.1_(Gecko_1.9.1.2C_Firefox_3.5)">Добавленные в JavaScript 1.8.1 (Gecko 1.9.1, Firefox 3.5)</h3>
+
+<ul>
+ <li>Родная <a class="internal" href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON">поддержка JSON</a>.</li>
+ <li>Метод {{jsxref("Object.getPrototypeOf()")}}.</li>
+ <li>Метод {{jsxref("String.trim()")}}, обрезающий пробельные символы с обеих концов строки.</li>
+ <li>Gecko 1.9.1.4 обновил реализацию метода {{jsxref("JSON.stringify()", "JSON.stringify()", "Converting_objects_into_JSON")}} для соответствия стандарту ECMAScript 5.</li>
+</ul>
+
+<p>Реализованы улучшения в алгоритме разбора, внесённые ECMAScript 5. Изменения предотвращают рассмотрение XHTML в качестве кода на JavaScript, ранее происходившее в определённых обстоятельствах.</p>
+
+<h3 id="Added_in_JavaScript_1.6_(Gecko_1.8.2C_Firefox_1.5)" name="Added_in_JavaScript_1.6_(Gecko_1.8.2C_Firefox_1.5)">Добавленные в JavaScript 1.6 (Gecko 1.8, Firefox 1.5)</h3>
+
+<p>Новые методы {{jsxref("Global_Objects/Array", "Array")}}, предлагающие некоторые улучшенные возможности по манипулированию массивами, были частью JavaScript начиная с <a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.6">JavaScript 1.6</a>. Теперь они утверждены как часть стандарта ECMAScript 5.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a class="external" href="http://www.ecmascript.org/">Веб-сайт ECMAScript</a></li>
+ <li><a class="external" href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf">Спецификация стандарта ECMAScript 5.1</a></li>
+ <li><a class="external" href="http://es5.javascript.ru/">Перевод спецификации стандарта ECMAScript 5.1 с аннотациями на русский язык</a></li>
+ <li>Запись Джона Резига об <a class="external" href="http://ejohn.org/blog/objectgetprototypeof/">Object.getPrototypeOf</a></li>
+ <li>Реализация <a class="external" href="http://frugalcoder.us/post/2010/01/07/EcmaScript-5s-Date-Extensions.aspx">дат ECMAScript 5 в JavaScript</a> от Михаила Дж. Риана</li>
+ <li><a href="http://kangax.github.io/es5-compat-table/">Поддержка ECMAScript 5 среди браузеров</a></li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/ecmascript_6_support_in_mozilla/index.html b/files/ru/web/javascript/new_in_javascript/ecmascript_6_support_in_mozilla/index.html
new file mode 100644
index 0000000000..cfc66e9806
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/ecmascript_6_support_in_mozilla/index.html
@@ -0,0 +1,222 @@
+---
+title: Поддержка ECMAScript 6 в Mozilla
+slug: Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla
+tags:
+ - ECMAScript6
+ - JavaScript
+translation_of: Archive/Web/JavaScript/New_in_JavaScript/ECMAScript_2015_support_in_Mozilla
+---
+<p>{{jsSidebar("New_in_JS")}}</p>
+
+<p>ECMAScript 2015 - это новая версия стандарта, имеющая кодовое имя "Harmony","ES.next" или "ECMAScript 6". <a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">Черновая спецификация </a>может быть найдена в официальном вики ECMA. Первый рабочий черновик, основанный на ECMAScript 5.1, был опубликован 12 июля 2011 как "ES.next". По состоянию на август 2014 в ECMAScript 2015 больше не принимаются новые функции и ожидается окончание работы над ним в конце 2014 с официальной публикацией в марте 2015.</p>
+
+<p>Для получения обратной связи по стандартам ECMAScript используется канал <a href="https://mail.mozilla.org/listinfo/es-discuss">es-discuss</a>.</p>
+
+<h2 id="Поддерживаемые_функции">Поддерживаемые функции</h2>
+
+<p>Следующие функции уже реализованы в Firefox:</p>
+
+<h2 id="Стандартная_библиотека">Стандартная библиотека</h2>
+
+<h3 id="Дополнения_в_объекте_Array">Дополнения в объекте <code>Array</code></h3>
+
+<ul>
+ <li>Обход {{jsxref("Array")}} при помощи <code>for...of</code> (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)</li>
+ <li>{{jsxref("Array.from()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
+ <li>{{jsxref("Array.of()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Array.prototype.fill()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
+ <li>{{jsxref("Array.prototype.find()")}}, {{jsxref("Array.prototype.findIndex()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Array.prototype.entries()")}},<br>
+ {{jsxref("Array.prototype.keys()")}} (<a href="/en-US/Firefox/Releases/28">Firefox 28</a>)</li>
+ <li>{{jsxref("Array.prototype.copyWithin()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
+</ul>
+
+<h3 id="Новые_объекты_Map_и_Set_и_их_слабые_аналоги">Новые объекты <code>Map</code> и <code>Set</code> и их слабые аналоги</h3>
+
+<ul>
+ <li>{{jsxref("Map")}} (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)
+
+ <ul>
+ <li>Обход {{jsxref("Map")}} при помощи <code>for...of</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
+ <li>{{jsxref("Map.prototype.forEach()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Map.prototype.entries()")}},<br>
+ {{jsxref("Map.prototype.keys()")}},<br>
+ {{jsxref("Map.prototype.values()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
+ </ul>
+ </li>
+ <li>{{jsxref("Set")}} (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)
+ <ul>
+ <li>Обход {{jsxref("Set")}} при помощи <code>for...of</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
+ <li>{{jsxref("Set.prototype.forEach()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Set.prototype.entries()")}},<br>
+ {{jsxref("Set.prototype.keys()")}},<br>
+ {{jsxref("Set.prototype.values()")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>)</li>
+ </ul>
+ </li>
+ <li>{{jsxref("WeakMap")}} (<a href="/en-US/Firefox/Releases/6">Firefox 6</a>)
+ <ul>
+ <li>{{jsxref("WeakMap.clear()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
+ </ul>
+ </li>
+ <li>{{jsxref("WeakSet")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
+</ul>
+
+<h3 id="Новые_функции_в_объекте_Math">Новые функции в объекте <code>Math</code></h3>
+
+<ul>
+ <li>{{jsxref("Math.imul()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
+ <li>{{jsxref("Math.clz32()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
+ <li>{{jsxref("Math.fround()")}} (<a href="/en-US/Firefox/Releases/26">Firefox 26</a>)</li>
+ <li>{{jsxref("Math.log10()")}}, {{jsxref("Math.log2()")}}, {{jsxref("Math.log1p()")}}, {{jsxref("Math.expm1()")}}, {{jsxref("Math.cosh()")}}, {{jsxref("Math.sinh()")}}, {{jsxref("Math.tanh()")}}, {{jsxref("Math.acosh()")}}, {{jsxref("Math.asinh()")}}, {{jsxref("Math.atanh()")}}, {{jsxref("Math.hypot()")}}, {{jsxref("Math.trunc()")}}, {{jsxref("Math.sign()")}}, {{jsxref("Math.cbrt()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+</ul>
+
+<h3 id="Дополнения_в_объекте_Number">Дополнения в объекте <code>Number</code></h3>
+
+<ul>
+ <li>{{jsxref("Number.isNaN()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
+ <li>{{jsxref("Number.isFinite()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
+ <li>{{jsxref("Number.isInteger()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
+ <li>{{jsxref("Number.parseInt()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Number.parseFloat()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Number.EPSILON")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>{{jsxref("Number.MAX_SAFE_INTEGER")}}, {{jsxref("Number.MIN_SAFE_INTEGER")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
+ <li>{{jsxref("Number.isSafeInteger()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
+</ul>
+
+<h3 id="Дополнения_в_объекте_Object">Дополнения в объекте <code>Object</code></h3>
+
+<ul>
+ <li>{{jsxref("Object.is()")}} (<a href="/en-US/Firefox/Releases/22">Firefox 22</a>)</li>
+ <li>{{jsxref("Object.setPrototypeOf()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
+ <li>{{jsxref("Object.assign()")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
+ <li>{{jsxref("Object.getOwnPropertySymbols()")}} (<a href="/en-US/Firefox/Releases/33">Firefox 33</a>)</li>
+</ul>
+
+<h3 id="Новый_объект_Promise">Новый объект <code>Promise</code></h3>
+
+<ul>
+ <li>{{jsxref("Promise")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>, включён по умолчанию в <a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
+</ul>
+
+<h3 id="Дополнения_в_объекте_RegExp">Дополнения в объекте <code>RegExp</code></h3>
+
+<ul>
+ <li>В {{jsxref("RegExp")}} добавлен "липкий" флаг (y) (<a href="/en-US/Firefox/Releases/3">Firefox 3</a>)</li>
+</ul>
+
+<h3 id="Дополнения_в_объекте_String">Дополнения в объекте <code>String</code></h3>
+
+<ul>
+ <li>{{jsxref("String.fromCodePoint()")}} (<a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}} (<a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
+ <li>{{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
+ <li>{{jsxref("String.prototype.contains()")}} (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
+ <li>{{jsxref("String.prototype.repeat()")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>)</li>
+ <li>{{jsxref("String.prototype.normalize()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
+ <li>{{jsxref("String.raw()")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
+</ul>
+
+<h3 id="Новый_объект_Symbol">Новый объект <code>Symbol</code></h3>
+
+<ul>
+ <li>{{jsxref("Symbol")}} (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
+ <li>{{jsxref("Symbol.for()")}} - глобальный реестр символов</li>
+</ul>
+
+<h3 id="Типизированные_массивы">Типизированные массивы</h3>
+
+<p>Типизированные массивы стали часть спецификации ECMAScript 2015, а не только <a href="https://www.khronos.org/registry/typedarray/specs/latest/">своей собственной</a>.</p>
+
+<ul>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+ <li>{{jsxref("Int8Array")}}</li>
+ <li>{{jsxref("Uint8Array")}}</li>
+ <li>{{jsxref("Uint8ClampedArray")}}</li>
+ <li>{{jsxref("Int16Array")}}</li>
+ <li>{{jsxref("Uint16Array")}}</li>
+ <li>{{jsxref("Int32Array")}}</li>
+ <li>{{jsxref("Uint32Array")}}</li>
+ <li>{{jsxref("Float32Array")}}</li>
+ <li>{{jsxref("Float64Array")}}</li>
+</ul>
+
+<h2 id="Выражения_и_операторы">Выражения  и операторы</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Spread_operator">Оператор распространения в массивах</a> (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Spread_operator">Оператор распространения при вызовах функций</a> (<a href="/en-US/Firefox/Releases/27">Firefox 27</a>)</li>
+</ul>
+
+<h2 id="Операторы">Операторы</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a> (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)</li>
+</ul>
+
+<h2 id="Функции">Функции</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">Оставшиеся параметры</a> (<a href="/en-US/Firefox/Releases/15">Firefox 15</a>)</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">Параметры по умолчанию</a> (<a href="/en-US/Firefox/Releases/15">Firefox 15</a>)</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочные функции</a> (<a href="/en-US/Firefox/Releases/22">Firefox 22</a>)</li>
+</ul>
+
+<h2 id="Другие_возможности">Другие возможности</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Numeric_literals">Двоичные и восьмеричные литералы</a> (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
+ <li>Вычисляемые названия свойств (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/template_strings">Шаблонные строки</a> (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
+</ul>
+
+<h2 id="Стабилизируемые_и_обсуждаемые_функции">Стабилизируемые и обсуждаемые функции</h2>
+
+<p>Следующие функции частично реализованы в Firefox, но были добавлены до принятия стандарта ES2015 или ещё обсуждаются в стандарте ECMA TC39.</p>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Устаревшие итераторы и генераторы</a> (<a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>)
+
+ <ul>
+ <li>Итераторы и <a href="/ru/docs/Web/JavaScript/Reference/Statements/function*">генераторы</a> ES2015 реализованы в Firefox 26 и выше.</li>
+ </ul>
+ </li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">Деструктивное присваивание</a> (<a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>) (соответствие ES2015 {{bug("950547")}})</li>
+ <li>{{jsxref("Statements/const", "const")}} (<a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.5">JS 1.5</a>, Firefox 1.0) (соответствие ES2015 {{bug("950547")}})</li>
+ <li>{{jsxref("Statements/let", "let")}} (<a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>) (соответствие ES2015 {{bug("950547")}})</li>
+ <li>{{jsxref("Proxy", "Прокси")}} (<a href="/en-US/Firefox/Releases/18">Firefox 18</a>) (соответствие ES2015 {{bug("978228")}})</li>
+</ul>
+
+<h2 id="Не_реализованные_функции">Не реализованные функции</h2>
+
+<p>Следующие функции включены в черновик спецификации ECMAScript 2015, но пока не реализованы в Firefox:</p>
+
+<ul>
+ <li>Module ({{bug("568953")}})
+ <ul>
+ <li>Loader API</li>
+ <li><code>import</code> синтаксис</li>
+ <li><code>export</code> синтаксис</li>
+ </ul>
+ </li>
+ <li><code>class</code> синтаксис ({{bug("837314")}})</li>
+ <li>{{jsxref("Array.prototype.values()")}} ({{bug("875433")}})</li>
+ <li>Reflect API ({{bug("987514")}})</li>
+ <li>Экранирование \u{nnnnnn} в Unicode ({{bug("952985")}})</li>
+ <li>Широко используемые символы</li>
+ <li>{{jsxref("RegExp.prototype.match()")}},<br>
+ {{jsxref("RegExp.prototype.replace()")}},<br>
+ {{jsxref("RegExp.prototype.search()")}},<br>
+ {{jsxref("RegExp.prototype.split()")}}</li>
+ <li>Флаг "u" в RegExp</li>
+ <li>{{jsxref("Function.prototype.toMethod()")}}</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://www.ecmascript.org/">Сайт ECMAScript</a></li>
+ <li><a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">Черновик спецификации ECMAScript 2015</a></li>
+ <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=694100">Система отслеживания ошибок Mozilla ES2015</a></li>
+ <li><a href="http://kangax.github.io/es5-compat-table/es6" title="http://kangax.github.io/es5-compat-table">Поддержка ECMAScript 2015 в различных браузерах</a></li>
+</ul>
diff --git a/files/ru/web/javascript/new_in_javascript/index.html b/files/ru/web/javascript/new_in_javascript/index.html
new file mode 100644
index 0000000000..f01f13834f
--- /dev/null
+++ b/files/ru/web/javascript/new_in_javascript/index.html
@@ -0,0 +1,80 @@
+---
+title: Что нового в JavaScript
+slug: Web/JavaScript/New_in_JavaScript
+tags:
+ - JavaScript
+ - Versions
+translation_of: Archive/Web/JavaScript/New_in_JavaScript
+---
+<p>{{jsSidebar("New_in_JS")}}</p>
+
+<p>Эта глава содержит информацию об истории версий JavaScript и статусе их реализаций в основанных на Mozilla/SpiderMonkey JavaScript-приложениях, таких, как Firefox.</p>
+
+<h2 id="ECMAScript_versions" name="ECMAScript_versions">Версии ECMAScript</h2>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Language_Resources">Ресурсы по языку</a></dt>
+ <dd>Узнайте больше о стандартах ECMAScript, на которых основывается язык JavaScript.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla">Поддержка ECMAScript 5</a></dt>
+ <dd>Статус реализации стандарта ECMA-262 5-го издания в Firefox.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla">Поддержка ECMAScript 6</a></dt>
+ <dd>Статус реализации стандарта ECMA-262 6-го издания в Firefox.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_7_support_in_Mozilla">Поддержка ECMAScript 7</a></dt>
+ <dd>Статус реализации стандарта ECMA-262 7-го издания в Firefox.</dd>
+</dl>
+
+<h2 id="JavaScript_release_notes" name="JavaScript_release_notes">Замечания к выпускам JavaScript</h2>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/Firefox_JavaScript_changelog">Список изменений в JavaScript браузера Firefox</a></dt>
+ <dd>Смотрите этот список изменений, чтобы узнать, какие возможности JavaScript реализованы в Firefox 5 и выше.</dd>
+ <dt>Список изменений в JavaScript браузера Chrome</dt>
+ <dd>(TODO). Смотрите этот список изменений, чтобы узнать, какие возможности JavaScript реализованы в выпусках Chrome.</dd>
+</dl>
+
+<h2 id="JavaScript_versions" name="JavaScript_versions">Версии JavaScript</h2>
+
+<p><strong>Устарело</strong> ({{deprecated_inline}}). Явное версионирование и выбор возможностей языка было особенностью Mozilla и <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=867609">она находится в процессе удаления</a>. Firefox 4 был последней версией, ссылающийся на версию JavaScript (1.8.5). С новыми стандартами ECMA возможности языка JavaScript часто упоминаются вместе с их первоначальным определением в изданиях ECMA-262, например, с 6-м изданием (ES6).</p>
+
+<p>JavaScript версии 1.0 был выпущен в марте 1996 года в браузерах Netscape Navigator 2.0 и Internet Explorer 2.0.</p>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.1">JavaScript 1.1</a></dt>
+ <dd>Версия, содержащаяся в браузере Netscape Navigator 3.0. Выпущен 19 августа 1996 года.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.2">JavaScript 1.2</a></dt>
+ <dd>Версия, содержащаяся в браузерах Netscape Navigator 4.0-4.05. Выпущен 11 июня 1997 года.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.3">JavaScript 1.3</a></dt>
+ <dd>Версия, содержащаяся в браузерах Netscape Navigator 4.06-4.7x. Выпущен 19 октября 1998 года.<br>
+ Работа по стандартизации и совместимости с 1-м и 2-м изданиями ECMA-262.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.4">JavaScript 1.4</a></dt>
+ <dd>Версия, содержащаяся в серверном JavaScript Netscape. Выпущен в 1999 году.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.5">JavaScript 1.5</a></dt>
+ <dd>Версия, содержащаяся в браузерах Netscape Navigator 6.0 и Firefox 1.0. Выпущен 14 ноября 2000 года.<br>
+ Работа по стандартизации и совместимости с 3-им изданием ECMA-262.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.6">JavaScript 1.6</a></dt>
+ <dd>Версия, содержащаяся в браузере Firefox 1.5. Выпущен в ноябре 2005 года.<br>
+ Включает ECMAScript для XML (E4X), новые методы объекта <code>Array</code>, плюс обобщённые методы объектов <code>String</code> и <code>Array</code>.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">JavaScript 1.7</a></dt>
+ <dd>Версия, содержащаяся в браузере Firefox 2. Выпущен в октябре 2006 года.<br>
+ Включает генераторы, итераторы, выражения заполнения массива, выражения <code>let</code> и реструктуризующее присваивание.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8">JavaScript 1.8</a></dt>
+ <dd>Версия, содержащаяся в браузере Firefox 3. Выпущен в июне 2008 года.<br>
+ Включает выражения замыкания, выражения-генераторы и метод <code>Array.reduce()</code>.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8.1">JavaScript 1.8.1</a></dt>
+ <dd>Версия, содержащаяся в браузере Firefox 3.5. Выпущен 30 июня 2009 года.<br>
+ Включает компилятор TraceMonkey JIT и поддержку родного JSON.</dd>
+ <dt>JavaScript 1.8.2</dt>
+ <dd>Версия, содержащаяся в браузере Firefox 3.6. Выпущен 22 июня 2009 года.<br>
+ Включает только незначительные изменения.</dd>
+ <dt><a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.8.5">JavaScript 1.8.5</a></dt>
+ <dd>Версия, содержащаяся в браузере Firefox 4. Выпущен 27 июля 2010 года.<br>
+ Включает множество новых возможностей, соответствующих 5-му изданию ECMA-262.<br>
+ Это последняя версия JavaScript.</dd>
+</dl>
+
+<h2 id="Features_still_requiring_version_opt-in" name="Features_still_requiring_version_opt-in">Возможности, всё ещё требующие определённой версии</h2>
+
+<dl>
+ <dt><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">инструкция <code>let</code></a></dt>
+ <dd>Инструкция <code>let</code> требует версии JavaScript 1.7.</dd>
+</dl>
diff --git a/files/ru/web/javascript/reference/classes/class_fields/index.html b/files/ru/web/javascript/reference/classes/class_fields/index.html
new file mode 100644
index 0000000000..ade4b8151f
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/class_fields/index.html
@@ -0,0 +1,350 @@
+---
+title: Поля классов
+slug: Web/JavaScript/Reference/Classes/Class_fields
+tags:
+ - JavaScript
+ - Классы
+translation_of: Web/JavaScript/Reference/Classes/Public_class_fields
+---
+<div>{{JsSidebar("Classes")}}</div>
+
+<div class="note">Объявление публичных и приватных полей является <a href="https://github.com/tc39/proposal-class-fields">экспериментальной разработкой</a>, предложенной в коммитете стандартов JavaScript <a href="https://tc39.github.io/beta/">TC39</a>. Поддержка браузерами ограничена, но данное нововведение можно использовать посредством транспиляторов (например, <a href="https://babeljs.io/">Babel</a>). Смотрите информацию о совместимости ниже.</div>
+
+<h2 id="Публичные_поля">Публичные поля</h2>
+
+<p>И статические, и публичные поля являются изменяемыми, перечисляемыми, настраиваемыми свойствами. Таким образом, в отличие от приватных полей, они участвуют в прототипном наследовании.</p>
+
+<h3 id="Публичные_статические_поля">Публичные статические поля</h3>
+
+<p>Публичные статические поля полезны тогда, когда необходимо существование одного единственного поля для всего класса, а не для каждого созданного экземпляра по отдельности. Это полезно для кеша, конфигураций или любых прочих данных, которые одинаковы для всех экземпляров.</p>
+
+<p>Публичные статические поля объявляются при помощи ключевого слова <code>static</code>. Они добавляются в конструктор класса во время его создания с помощью <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a>. Доступ также осуществляется через конструктор класса.</p>
+
+<pre class="brush: js notranslate">class ClassWithStaticField {
+  static staticField = 'static field';
+}
+
+console.log(ClassWithStaticField.staticField);
+// Ожидаемый вывод: "static field"
+</pre>
+
+<p>Поля без инициализации имеют значение <code>undefined</code>.</p>
+
+<pre class="brush: js notranslate">class ClassWithStaticField {
+  static staticField;
+}
+
+console.assert(ClassWithStaticField.hasOwnProperty('staticField'));
+console.log(ClassWithStaticField.staticField);
+// Ожидаемый вывод: "undefined"</pre>
+
+<p>Публичные статические поля не переопределяются в наследниках класса, а могут быть доступны через иерархию прототипов.</p>
+
+<pre class="brush: js notranslate">class ClassWithStaticField {
+  static baseStaticField = 'base field';
+}
+
+class SubClassWithStaticField extends ClassWithStaticField {
+  static subStaticField = 'sub class field';
+}
+
+console.log(SubClassWithStaticField.subStaticField);
+// Ожидаемый вывод: "sub class field"
+
+console.log(SubClassWithStaticField.baseStaticField);
+// Ожидаемый вывод: "base field"</pre>
+
+<p>При определении полей <code>this</code> ссылается на конструктор класса. Также можно обратиться к нему по имени и использовать <code>super</code> для получения конструктора базового класса, если он существует.</p>
+
+<pre class="brush: js notranslate">class ClassWithStaticField {
+  static baseStaticField = 'base static field';
+  static anotherBaseStaticField = this.baseStaticField;
+
+  static baseStaticMethod() { return 'base static method output'; }
+}
+
+class SubClassWithStaticField extends ClassWithStaticField {
+  static subStaticField = super.baseStaticMethod();
+}
+
+console.log(ClassWithStaticField.anotherBaseStaticField);
+// Ожидаемый вывод: "base static field"
+
+console.log(SubClassWithStaticField.subStaticField);
+// Ожидаемый вывод: "base static method output"
+</pre>
+
+<h3 id="Публичные_поля_экземпляра">Публичные поля экземпляра</h3>
+
+<p>Такие публичные поля имеются у каждого экземпляра данного класса. Объявляя публичные поля, мы можем гарантировать, что поле всегда актуально, а объявление класса является более самодокументированным.</p>
+
+<p>Публичные поля экземпляра добавляются через <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty </a>либо перед тем, как будет исполнено тело конструктора в базовом классе, либо после того, как завершится <code>super()</code> в классе наследнике.</p>
+
+<pre class="brush: js notranslate">class ClassWithInstanceField {
+ instanceField = 'instance field';
+}
+
+const instance = new ClassWithInstanceField();
+console.log(instance.instanceField);
+// Ожидаемый вывод: "instance field"</pre>
+
+<p>Поля без инициализации имеют значение <code>undefined</code>.</p>
+
+<pre class="brush: js notranslate">class ClassWithInstanceField {
+  instanceField;
+}
+
+const instance = new ClassWithInstanceField();
+console.assert(instance.hasOwnProperty('instanceField'));
+console.log(instance.instanceField);
+// Ожидаемый вывод: "undefined"</pre>
+
+<p>Как и свойства, названия полей могут вычисляться.</p>
+
+<pre class="brush: js notranslate">const PREFIX = 'prefix';
+
+class ClassWithComputedFieldName {
+    [`${PREFIX}Field`] = 'prefixed field';
+}
+
+const instance = new ClassWithComputedFieldName();
+console.log(instance.prefixField);
+// Ожидаемый вывод: "prefixed field"</pre>
+
+<p>При определении полей <code>this</code> ссылается на создающийся экземпляр класса. Как и в публичных методах экземпляра, получить доступ к прототипу базового класса можно с помощью <code>super</code>.</p>
+
+<pre class="brush: js notranslate">class ClassWithInstanceField {
+  baseInstanceField = 'base field';
+  anotherBaseInstanceField = this.baseInstanceField;
+  baseInstanceMethod() { return 'base method output'; }
+}
+
+class SubClassWithInstanceField extends ClassWithInstanceField {
+  subInstanceField = super.baseInstanceMethod();
+}
+
+const base = new ClassWithInstanceField();
+const sub = new SubClassWithInstanceField();
+
+console.log(base.anotherBaseInstanceField);
+// Ожидаемый вывод: "base field"
+
+console.log(sub.subInstanceField);
+// Ожидаемый вывод: "base method output"</pre>
+
+<h2 id="Публичные_методы">Публичные методы</h2>
+
+<h3 id="Публичные_статические_методы">Публичные статические методы</h3>
+
+<p>Ключевое слово <code><strong>static</strong></code> объявляет статический метод класса. Статические методы не вызываются из экземпляра, вместо этого они вызывается из самого класса. Чаще всего это какие-либо служебные функции, такие как функции создания или копирования объектов.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/classes-static.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p>Статические методы добавляются в конструктор класса с помощью <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a> во время его создания. Эти методы - изменяемые, неперечисляемые и настраеваемые свойства объекта.</p>
+
+<h3 id="Публичные_методы_экземпляра">Публичные методы экземпляра</h3>
+
+<p>Как и следует из названия, публичные методы экземпляра это методы, доступные для вызова из экземпляров.</p>
+
+<pre class="brush: js notranslate">class ClassWithPublicInstanceMethod {
+ publicMethod() {
+ return 'hello world';
+ }
+}
+
+const instance = new ClassWithPublicInstanceMethod();
+console.log(instance.publicMethod());
+// Ожидаемый вывод: "hello worl​d"</pre>
+
+<p>Публичные методы добавляются в прототип класса во время его создания с помощью <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a>. Они изменяемы, неперечисляемы и настраиваемы.</p>
+
+<p>Вы можете использовать генераторы, асинхронные функции и асинхронные генераторы.</p>
+
+<pre class="brush: js notranslate">class ClassWithFancyMethods {
+ *generatorMethod() { }
+ async asyncMethod() { }
+ async *asyncGeneratorMethod() { }
+}</pre>
+
+<p>Внутри методов экземпляра, <code>this</code> ссылается на сам экземпляр.<br>
+ В классах наследниках, <code>super</code> дает доступ к прототипу базового класса, позволяя вызывать его методы.</p>
+
+<pre class="brush: js notranslate">class BaseClass {
+  msg = 'hello world';
+  basePublicMethod() {
+    return this.msg;
+  }
+}
+
+class SubClass extends BaseClass {
+  subPublicMethod() {
+    return super.basePublicMethod();
+  }
+}
+
+const instance = new SubClass();
+console.log(instance.subPublicMethod());
+// Ожидаемый вывод: "hello worl​d"
+</pre>
+
+<p>Геттеры и сеттеры это специальные методы, которые привязаны к свойствам класса и которые вызываются, когда к свойсту обращаются или записывают. Используйте <a href="/ru/docs/Web/JavaScript/Reference/Functions/get">get</a> и <a href="/ru/docs/Web/JavaScript/Reference/Functions/set">set</a> для объявления публичных геттеров и сеттеров экземпляра.</p>
+
+<pre class="brush: js notranslate">class ClassWithGetSet {
+  #msg = 'hello world';
+  get msg() {
+    return this.#msg;
+  }
+  set msg(x) {
+    this.#msg = `hello ${x}`;
+  }
+}
+
+const instance = new ClassWithGetSet();
+console.log(instance.msg);
+// Ожидаемый вывод: "hello worl​d"
+
+instance.msg = 'cake';
+console.log(instance.msg);
+// Ожидаемый вывод: "hello cake"
+</pre>
+
+<h2 id="Приватные_поля">Приватные поля</h2>
+
+<h3 id="Приватные_статические_поля">Приватные статические поля</h3>
+
+<p>Приватные поля доступны через конструктор внутри объявления самого класса.</p>
+
+<p>Также сохраняется ограничение на вызов статических полей только внутри статических методов.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD;
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42;
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD;
+  }
+}
+
+assert(ClassWithPrivateStaticField.publicStaticMethod() === 42);</pre>
+
+<p>Приватные статические поля добавляются в конструктор на этапе оценки класса.</p>
+
+<p>Существует ограничение происхождения приватных статических полей. Только класс, который объявляет приватное статическое поле, может обращаться к нему. Это может привести к неожиданному поведению при использовании <strong><code>this</code></strong>.</p>
+
+<pre class="brush: js notranslate">class BaseClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD;
+
+  static basePublicStaticMethod() {
+    this.#PRIVATE_STATIC_FIELD = 42;
+    return this.#PRIVATE_STATIC_FIELD;
+  }
+}
+
+class SubClass extends BaseClassWithPrivateStaticField { }
+
+assertThrows(() =&gt; SubClass.basePublicStaticMethod(), TypeError);
+</pre>
+
+<h3 id="Приватные_поля_экземпляра_объекта">Приватные поля экземпляра объекта</h3>
+
+<p>Приватные поля объекта объявляются как <strong># names </strong>( произносятся как "hash names"), <span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>которые являются идентификаторами с префиксом</span></span></span> #.  # <span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>является частью самого имени и также используется для объявления и доступа</span></span></span>.</p>
+
+<p><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Инкапсуляция обеспечивается языком.</span></span> <span class="ChMk0b JLqJ4b"><span>Ссылка на # names вне области видимости является синтаксической ошибкой</span></span></span>.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateField {
+  #privateField;
+
+  constructor() {
+    this.#privateField = 42;
+    this.#randomField = 666; # Syntax error
+  }
+}
+
+const instance = new ClassWithPrivateField();
+instance.#privateField === 42; // Syntax error
+</pre>
+
+<h2 id="Приватные_методы">Приватные методы</h2>
+
+<h3 id="Приватные_статические_методы">Приватные статические методы</h3>
+
+<p><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Как и публичные методы, приватные статические методы вызываются в классе, а не в экземплярах класса.</span></span> <span class="ChMk0b JLqJ4b"><span>Как и приватные статические поля, они доступны только из объявления класса.</span></span></span></p>
+
+<p>Приватные статические методы могут быть генераторами, асинхронными функциями и асинхронными генераторами.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateStaticMethod {
+    static #privateStaticMethod() {
+        return 42;
+    }
+
+    static publicStaticMethod() {
+        return ClassWithPrivateStaticMethod.#privateStaticMethod();
+    }
+}
+
+assert(ClassWithPrivateStaticField.publicStaticMethod() === 42);
+</pre>
+
+<h3 id="Приватные_методы_экземпляра_объекта">Приватные методы экземпляра объекта</h3>
+
+<p>Приватные методы экземпляра объекта являются методами, доступными в экземплярах класса <span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>чей доступ ограничен так же, как и</span></span></span> приватные поля экземпляра объекта.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world';
+  }
+
+  getPrivateMessage() {
+      return #privateMethod();
+  }
+}
+
+const instance = new ClassWithPrivateMethod();
+console.log(instance.getPrivateMessage());
+// expected output: "hello worl​d"</pre>
+
+<p>Приватные методы экземпляра объекта могут быть генераторами, асинхронными функциями и асинхронными генераторами. <span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Также возможны приватные геттеры и сеттеры</span></span></span>:</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateAccessor {
+  #message;
+
+  get #decoratedMessage() {
+    return `✨${this.#message}✨`;
+  }
+  set #decoratedMessage(msg) {
+    this.#message = msg;
+  }
+
+  constructor() {
+    this.#decoratedMessage = 'hello world';
+    console.log(this.#decoratedMessage);
+  }
+}
+
+new ClassWithPrivateAccessor();
+// expected output: "✨hello worl​d✨"
+</pre>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<h3 id="Публичные_поля_класса">Публичные поля класса</h3>
+
+
+
+<p>{{Compat("javascript.classes.public_class_fields")}}</p>
+
+<h3 id="Приватные_поля_класса">Приватные поля класса</h3>
+
+<div class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</div>
+
+<p>{{Compat("javascript.classes.private_class_fields")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://rfrn.org/~shu/2018/05/02/the-semantics-of-all-js-class-elements.html">Семантика всех элементов JS класса</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/classes/constructor/index.html b/files/ru/web/javascript/reference/classes/constructor/index.html
new file mode 100644
index 0000000000..7d7fe14e82
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/constructor/index.html
@@ -0,0 +1,205 @@
+---
+title: constructor
+slug: Web/JavaScript/Reference/Classes/constructor
+tags:
+ - ECMAScript 2015
+ - ES6
+ - JavaScript
+ - Классы
+translation_of: Web/JavaScript/Reference/Classes/constructor
+---
+<div>{{jsSidebar("Classes")}}</div>
+
+<div><code>constructor</code> - специальный метод, служащий для создания и инициализации объектов, созданных с использованием <code>class</code>.</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">constructor([arguments]) { ... }</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Конструктор позволяет произвести начальную инициализацию, которая должна быть выполнена до того, как остальные методы вызваны.</p>
+
+<pre class="notranslate">class Person {
+
+ constructor(name) {
+ this.name = name;
+ }
+
+ introduce() {
+ console.log(`Hello, my name is ${this.name}`);
+ }
+
+}
+
+const otto = new Person('Отто');
+
+otto.introduce();</pre>
+
+<p>Если вы не определили метод constructor, то будет использован конструктор по умолчанию. Если ваш класс базовый, то конструктор по умолчанию пустой:</p>
+
+<pre class="notranslate">constructor() {}</pre>
+
+<p>Если ваш класс является производным классом, конструктор по умолчанию вызывает родительский конструктор, передавая любые аргументы, которые были предоставлены:</p>
+
+<pre class="notranslate">constructor(...args) {
+ super(...args);
+}</pre>
+
+<p>Это позволяет работать код:</p>
+
+<pre class="notranslate">class ValidationError extends Error {
+
+ printCustomerMessage() {
+ return `Проверка не удалась :-( (подробности: ${this.message})`;
+ }
+
+}
+
+try {
+ throw new ValidationError("Не правильный номер телефона");
+} catch (error) {
+ if (error instanceof ValidationError) {
+ console.log(error.name); // Это Error вместо ValidationError!
+ console.log(error.printCustomerMessage());
+ } else {
+ console.log('Не известная ошибка', error);
+ throw error;
+ }
+}</pre>
+
+<p><code>ValidationError</code> классу не нужен явный (explicit) конструктор, потому что не требуется инициализация. Затем конструктор по умолчанию позаботится о инициализации родительского класса <code>Error</code> переданным ему аргументом.</p>
+
+<p>Однако, если определен ваш собственный конструктор и ваш класс является производным от какого-либо родительского класса, то вы должны явно объявить конструктор родительского класса, используя <code>super</code>. К примеру:</p>
+
+<pre class="notranslate">class ValidationError extends Error {
+
+ constructor(message) {
+ super(message); // вызов конструктора родительского класса
+ this.name = 'ValidationError';
+ this.code = '42';
+ }
+
+ printCustomerMessage() {
+ return `Проверка не удалась :-( (подробности: ${this.message}, code: ${this.code})`;
+ }
+
+}
+
+try {
+ throw new ValidationError("Не правильный номер телефона");
+} catch (error) {
+ if (error instanceof ValidationError) {
+ console.log(error.name); // Теперь это ValidationError!
+ console.log(error.printCustomerMessage());
+ } else {
+ console.log('Не известная ошибка', error);
+ throw error;
+ }
+}</pre>
+
+<p>В классе может быть только один метод с именем "<code>constructor</code>". Если класс содержит более одного <code>constructor</code>, будет сгенерировано исключение {{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_constructor">Использование метода <code>constructor</code></h3>
+
+<p>Данный фрагмент кода взят из <a href="https://github.com/GoogleChrome/samples/blob/gh-pages/classes-es6/index.html">classes sample</a> (<a href="https://googlechrome.github.io/samples/classes-es6/index.html">live demo</a>).</p>
+
+<pre class="brush: js notranslate">class Square extends Polygon {
+ constructor(length) {
+ // Здесь вызывается конструктор родительского класса,
+ // в который передается length в качестве аргументов,
+  // соответствующим полям width и height класса Polygon
+ super(length, length);
+ // Заметка: В производном классе, super() должен вызываться перед тем как
+ // вы сможете использовать 'this'. Иначе будет сгенерировано исключение reference error.
+ this.name = 'Square';
+ }
+
+ get area() {
+ return this.height * this.width;
+ }
+
+ set area(value) {
+ this.area = value;
+ }
+}</pre>
+
+<h3 id="Другой_пример">Другой пример</h3>
+
+<p>Посмотрите на этот отрывок кода.</p>
+
+<pre class="brush: js notranslate">class Polygon {
+ constructor() {
+ this.name = "Polygon";
+ }
+}
+
+class Square extends Polygon {
+ constructor() {
+ super();
+ }
+}
+
+class Rectangle {}
+
+Object.setPrototypeOf(Square.prototype, Rectangle.prototype);
+
+console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
+console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true
+
+let newInstance = new Square();
+console.log(newInstance.name); //Polygon</pre>
+
+<p>Здесь прототип <strong>Square</strong> класса изменен, но в то же время constructor предыдущего базового класса <strong>Polygon</strong> вызывается при создании нового экземпляра <strong>Square</strong>.</p>
+
+<h3 id="Constructors_по_умолчанию.">Constructors по умолчанию.</h3>
+
+<p>Если вы не определите метод constructor, будет использован constructor по умолчанию. Для базовых классов, constructor по умолчанию:</p>
+
+<pre class="brush: js notranslate">constructor() {}</pre>
+
+<p>Для производных классов, constructor по умолчанию:</p>
+
+<pre class="brush: js notranslate">constructor(...args) {
+ super(...args);
+}</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-static-semantics-constructormethod', 'Constructor Method')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-static-semantics-constructormethod', 'Constructor Method')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам запрос на слияние.</div>
+
+<p>{{Compat("javascript.classes.constructor")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/super">super()</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> declaration</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor">Object.prototype.constructor</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/classes/extends/index.html b/files/ru/web/javascript/reference/classes/extends/index.html
new file mode 100644
index 0000000000..df642e9e23
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/extends/index.html
@@ -0,0 +1,179 @@
+---
+title: extends
+slug: Web/JavaScript/Reference/Classes/extends
+tags:
+ - Классы
+ - Наследование
+ - Расширение
+translation_of: Web/JavaScript/Reference/Classes/extends
+---
+<div>{{jsSidebar("Classes")}}</div>
+
+<p>Ключевое слово <strong><code>extends</code></strong> используется в  <a href="/en-US/docs/Web/JavaScript/Reference/Statements/class">объявлении класса</a> или в  <a href="/en-US/docs/Web/JavaScript/Reference/Operators/class">выражениях класса</a> для создания дочернего класса.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">class ChildClass extends ParentClass { ... }</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Ключевое слово <strong><code>extends</code></strong> может быть использовано для создания дочернего класса для уже существующего класса или встроенного объекта.</p>
+
+<p>Свойство <strong><code>.prototype</code></strong> родительского класса или объекта должно быть {{jsxref("Object")}} или {{jsxref("null")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_extends">Использование <code>extends</code></h3>
+
+<p>В первом примере создаётся дочерний класс с именем <code>Square</code> от класса с именем <code>Polygon</code>. Этот пример был взят из <a href="https://googlechrome.github.io/samples/classes-es6/index.html">live demo</a> <a href="https://github.com/GoogleChrome/samples/blob/gh-pages/classes-es6/index.html">(source)</a>.</p>
+
+<pre class="brush: js">class Square extends Polygon {
+ constructor(length) {
+ // Здесь вызывается конструктор родительского класса,
+  // в который передается свойство length в качестве
+  // аргументов, соответствующих полям width и height,
+  // класса Polygon
+ super(length, length);
+ // Примечание:
+  // В конструкторе класса, метод super() должен быть вызван
+  // перед использованием this. В противном случае, будет
+  // выброшена ошибка.
+ this.name = 'Square';
+ }
+
+ get area() {
+ return this.height * this.width;
+ }
+}</pre>
+
+<h3 id="Расширение_встроенных_объектов_с_помощью_extends">Расширение встроенных объектов с помощью <code>extends</code></h3>
+
+<p>Этот пример расширяет встроенный объект {{jsxref("Date")}}. Пример взят из <a href="https://googlechrome.github.io/samples/classes-es6/index.html">live demo</a> <a href="https://github.com/GoogleChrome/samples/blob/gh-pages/classes-es6/index.html">(source)</a>.</p>
+
+<pre class="brush: js">class myDate extends Date {
+ constructor() {
+ super();
+ }
+
+ getFormattedDate() {
+ var months = [
+  'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
+ ];
+ return this.getDate() + '-' +
+  months[this.getMonth()] + '-' +
+  this.getFullYear();
+ }
+}</pre>
+
+<h3 id="Расширение_null">Расширение <code>null</code></h3>
+
+<p>Расширение {{jsxref("null")}} работает как и с обычным классом, за исключением того, что прототип объекта не наследует {{jsxref("Object.prototype")}}.</p>
+
+<pre class="brush: js">class nullExtends extends null {
+ constructor() {}
+}
+
+Object.getPrototypeOf(nullExtends); // Function.prototype
+Object.getPrototypeOf(nullExtends.prototype) // null
+
+new nullExtends(); //ReferenceError: this is not defined
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-class-definitions', 'extends')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'extends')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoDesktop(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Array subclassing</td>
+ <td>{{CompatChrome(43.0)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ </tr>
+ <tr>
+ <td>Array subclassing</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(43.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/super">super</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/classes/index.html b/files/ru/web/javascript/reference/classes/index.html
new file mode 100644
index 0000000000..883df1a1be
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/index.html
@@ -0,0 +1,414 @@
+---
+title: Классы
+slug: Web/JavaScript/Reference/Classes
+tags:
+ - ECMAScript 2015
+ - ECMAScript6
+ - JavaScript
+ - Reference
+ - Классы
+ - Наследование
+translation_of: Web/JavaScript/Reference/Classes
+---
+<div>{{JsSidebar("Классы")}}</div>
+
+<p>Классы в JavaScript были введены в ECMAScript 2015 и представляют собой синтаксический сахар над существующим в JavaScript механизмом прототипного наследования. Синтаксис классов <strong>не вводит</strong> новую объектно-ориентированную модель, а предоставляет более простой и понятный способ создания объектов и организации наследования.</p>
+
+<h2 id="Определение_классов">Определение классов</h2>
+
+<p>На самом деле классы — это "специальные <a href="/ru/docs/Web/JavaScript/Reference/Functions">функции</a>", поэтому точно также, как вы определяете функции (<a href="/ru-RU/docs/Web/JavaScript/Reference/Operators/function">function expressions</a> и <a href="/ru-RU/docs/Web/JavaScript/Reference/Statements/function">function declarations</a>), вы можете определять и классы с помощью: <a href="/en-US/docs/Web/JavaScript/Reference/Statements/class">class declarations</a> и <a href="/en-US/docs/Web/JavaScript/Reference/Operators/class">class expressions</a>.</p>
+
+<h3 id="Объявление_класса">Объявление класса</h3>
+
+<p>Первый способ определения класса — <strong>class declaration (</strong><em>объявление класса</em><strong>)</strong>. Для этого необходимо воспользоваться ключевым словом <code>class</code> и указать имя класса (в примере — «Rectangle»).</p>
+
+<pre class="brush: js notranslate"><code>class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}</code></pre>
+
+<h4 id="Подъём_hoisting">Подъём (hoisting)</h4>
+
+<p>Разница между <em>объявлением функции</em> (<em>function declaration</em>) и <em>объявлением класса</em> (<em>class declaration</em>) в том, что <em>объявление функции</em> совершает подъём ({{Glossary("Hoisting", "hoisted")}}), в то время как <em>объявление класса</em> — нет. Поэтому вначале необходимо объявить ваш класс и только затем работать с ним, а код же вроде следующего сгенерирует исключение типа {{jsxref("ReferenceError")}}:</p>
+
+<pre class="brush: js notranslate"><code>var p = new Rectangle(); // ReferenceError
+
+class Rectangle {}</code></pre>
+
+<h3 id="Выражение_класса">Выражение класса</h3>
+
+<p>Второй способ определения класса — <strong>class expression (</strong><em>выражение класса</em><strong>)</strong>. Можно создавать именованные и безымянные выражения. В первом случае имя выражения класса находится в локальной области видимости класса и может быть получено через свойства самого класса, а не его экземпляра.</p>
+
+<pre class="brush: js notranslate"><code>// безымянный
+var Rectangle = class {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+};
+console.log(Rectangle.name);
+// отобразится: "Rectangle"
+
+// именованный
+var Rectangle = class Rectangle2 {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+};
+console.log(Rectangle.name);
+// отобразится: "Rectangle2" </code>
+</pre>
+
+<div class="note">
+<p><strong>Обратите внимание: выражения </strong>класса подвержены тем же проблемам с подъёмом (hoisting), что и <strong>объявления</strong> класса.</p>
+</div>
+
+<h2 id="Тело_класса_и_задание_методов">Тело класса и задание методов</h2>
+
+<p>Тело класса — это часть кода, заключенная в фигурные скобки <code>{}</code>. Здесь вы можете объявлять члены класса, такие как методы и конструктор.</p>
+
+<h3 id="Строгий_режим">Строгий режим</h3>
+
+<p>Тела <em>объявлений классов</em> и <em>выражений классов</em> выполняются в строгом режиме (<a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>).</p>
+
+<h3 id="Constructor">Constructor</h3>
+
+<p>Метод <code><a href="/ru/docs/Web/JavaScript/Reference/Classes/constructor">constructor</a></code> — специальный метод, необходимый для создания и инициализации объектов, созданных, с помощью класса. В классе может быть только один метод с именем <code>constructor</code>. Исключение типа {{jsxref("SyntaxError")}} будет выброшено, если класс содержит более одного вхождения метода <code>constructor</code>.</p>
+
+<p>Ключевое слово <code>super</code> можно использовать в методе <code>constructor</code> для вызова конструктора родительского класса.</p>
+
+<h3 id="Методы_прототипа">Методы прототипа</h3>
+
+<p>См. также <a href="/ru/docs/Web/JavaScript/Reference/Functions/%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2">определение методов</a>.</p>
+
+<pre class="brush: js notranslate"><code>class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+
+ get area() {
+ return this.calcArea();
+ }
+
+ calcArea() {
+ return this.height * this.width;
+ }
+}
+
+const square = new Rectangle(10, 10);
+
+console.log(square.area); // 100</code></pre>
+
+<h3 id="Статические_методы_и_свойства">Статические методы  и свойства</h3>
+
+<p>Ключевое слово <code><a href="/en-US/docs/Web/JavaScript/Reference/Classes/static">static</a></code>, определяет статический метод или свойства для класса. Статические методы и свойства вызываются без <a href="/ru/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#The_Object_.28Class_Instance.29">инстанцирования</a> их класса, и <strong>не могут</strong> быть вызваны у экземпляров (<em>instance</em>) класса. Статические методы, часто используются для создания служебных функций для приложения, в то время как статические свойства полезны для кеширования в рамках класса, фиксированной конфигурации или любых других целей, не связанных с реплецированием данных между экземплярами.</p>
+
+<pre class="brush: js notranslate"><code>class Point {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ static displayName = "Точка";
+ static distance(a, b) {
+ const dx = a.x - b.x;
+ const dy = a.y - b.y;
+
+ return Math.hypot(dx, dy);
+ }
+}
+
+const p1 = new Point(5, 5);
+const p2 = new Point(10, 10);
+p1.displayName; //undefined
+p1.distance; //undefined
+p2.displayName; //undefined
+p2.distance; //undefined
+
+console.log(Point.displayName); // "Точка"
+console.log(Point.distance(p1, p2)); // 7.0710678118654755</code></pre>
+
+<h3 id="Привязка_this_в_прототипных_и_статических_методах">Привязка <code>this</code> в прототипных и статических методах</h3>
+
+<p>Когда статический или прототипный метод вызывается без привязки к <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font> объекта (или когда <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font> является типом boolean, string, number, undefined, null), тогда <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font> будет иметь значение <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">undefined</span></font> внутри вызываемой функции. Автоупаковка не будет произведена. Поведение будет таким же как если бы мы писали код в нестрогом режиме.</p>
+
+<pre class="brush: js notranslate"><code>class Animal {
+ speak() {
+ return this;
+ }
+ static eat() {
+ return this;
+ }
+}
+
+let obj = new Animal();
+obj.speak(); // объект Animal
+let speak = obj.speak;
+speak(); // undefined
+
+Animal.eat() // класс Animal
+let eat = Animal.eat;
+eat(); // undefined</code></pre>
+
+<p>Если мы напишем этот же код используя классы основанные на функциях, тогда произойдет автоупаковка основанная на значении <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font>, в течение которого функция была вызвана. В строгом режиме автоупаковка не произойдет - значение <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font> останется прежним.</p>
+
+<pre class="brush: js notranslate"><code>function Animal() { }
+
+Animal.prototype.speak = function(){
+ return this;
+}
+
+Animal.eat = function() {
+ return this;
+}
+
+let obj = new Animal();
+let speak = obj.speak;
+speak(); // глобальный объект (нестрогий режим)
+
+let eat = Animal.eat;
+eat(); // глобальный объект (нестрогий режим)</code>
+</pre>
+
+<h3 id="Свойства_экземпляра">Свойства экземпляра</h3>
+
+<p>Свойства экземпляра должны быть определены в методе класса:</p>
+
+<pre class="notranslate">class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}</pre>
+
+<p>Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса:</p>
+
+<pre class="notranslate">Rectangle.staticWidth = 20;
+Rectangle.prototype.prototypeWidth = 25;
+</pre>
+
+<h3 id="Определение_полей">Определение полей</h3>
+
+<div class="blockIndicator warning">
+<p>Публичные и приватные поля - это <a href="https://github.com/tc39/proposal-class-fields">экспериментальная особенность (stage 3)</a>, предложенная комитетом <a href="https://tc39.es/">TC39</a> по стандартам языка Javascript. Поддержка баузерами ограничена, но это нововведение может быть использовано на моменте сборки, используя к примеру <a href="https://babeljs.io/">Babel</a>.</p>
+</div>
+
+<h4 id="Публичные_поля">Публичные поля</h4>
+
+<p>Используя Javascript синтаксис определения полей, приведенный выше пример может быть изменен следующим образом:</p>
+
+<pre class="notranslate">class Rectangle {
+ height = 0;
+ width;
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}</pre>
+
+<p>Как видно из примера, поля могут быть объявлены как со начальным значением, так и без него.</p>
+
+<p>Более подробно об этом написано в <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes/Class_fields">публичные поля класса</a>.</p>
+
+<h4 id="Приватные_поля">Приватные поля</h4>
+
+<p>Предыдущий пример может быть изменен следующим образом, используя приватные поля:</p>
+
+<pre class="notranslate">class Rectangle {
+ #height = 0;
+ #width;
+ constructor(height, width) {
+ this.#height = height;
+ this.#width = width;
+ }
+}</pre>
+
+<p>Приватные поля могут быть изменены или прочитаны только в рамках класса и не могут быть вызваны извне. Определяя вещи, которые не видны за пределами класса, вы гарантируете, что пользователи ваших классов не могут зависеть от внутренних компонентов, которые могут изменить версию на версию.</p>
+
+<div class="blockIndicator note">
+<p>Приватные поля могут быть объявлены только заранее в объявлении поля.</p>
+</div>
+
+<p>Приватные поля не могут быть созданы позже путем присваивания им значения, в отличии от обычных свойств.</p>
+
+<p>Более подробно об этом написано в <a href="/ru/docs/Web/JavaScript/Reference/Classes/%D0%9F%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D0%BB%D1%8F_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0">Приватные поля класса</a>.</p>
+
+<h2 id="Наследование_классов_с_помощью_extends">Наследование классов с помощью <code>extends</code></h2>
+
+<p>Ключевое слово <code><a href="/en-US/docs/Web/JavaScript/Reference/Classes/extends">extends</a></code> используется в <em>объявлениях классов</em> и <em>выражениях классов</em> для создания класса, дочернего относительно другого класса.</p>
+
+<pre class="brush: js notranslate"><code class="language-js">class Animal {
+ constructor(name) {
+ this.name = name;
+ }</code>
+
+ speak() {
+ console.log(`${this.name} издает звук.`);
+ }
+}
+
+class Dog extends Animal {
+ constructor(name) {
+  super(name); // вызывает конструктор super класса и передает параметр name
+ }
+
+  speak() {
+ console.log(`${this.name} лает.`);
+ }
+}
+
+<code class="language-js">let d = new Dog('Митци');
+d.speak(); // Митци лает</code></pre>
+
+<p>Если в подклассе присутствует конструктор, он должен сначала вызвать <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">super</span></font>, прежде чем использовать <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">this</span></font>.</p>
+
+<p>Аналогичным образом можно расширять традиционные, основанные на функциях "классы":</p>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js">function Animal (name) {
+ this.name = name;
+}
+Animal.prototype.speak = function () {
+ console.log(</code>`${this.name} издает звук.`<code class="language-js">);
+}
+
+class Dog extends Animal {
+ speak() {
+ console.log(</code>`${this.name} лает.`<code class="language-js">);
+ }
+}
+
+let d = new Dog('Митци');
+d.speak(); // Митци лает
+
+// </code>Для аналогичных методов дочерний метод имеет приоритет над родительским.</pre>
+
+<p>Обратите внимание, что классы не могут расширять обычные (non-constructible) объекты. Если вам необходимо создать наследование от обычного объекта, в качестве замены можно использовать {{jsxref("Object.setPrototypeOf()")}}:</p>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js">var Animal = {
+ speak() {
+ console.log(</code>`${this.name} издает звук.`<code class="language-js">);
+ }
+};
+
+class Dog {
+ constructor(name) {
+ this.name = name;
+ }
+}
+
+// Если вы этого не сделаете, вы получите ошибку TypeError при вызове speak.
+Object.setPrototypeOf(Dog.prototype, Animal);
+
+let d = new Dog('Митци');
+d.speak(); // Митци издает звук.</code></pre>
+
+<h2 id="Species">Species</h2>
+
+<p>Допустим, вам хотелось бы возвращать объекты типа {{jsxref("Array")}} в вашем производном от массива классе <code>MyArray</code>. Паттерн species позволяет вам переопределять конструкторы по умолчанию.</p>
+
+<p>Например, при использовании таких методов, как {{jsxref("Array.map", "map()")}}, который возвращает конструктор по умолчанию, вам хотелось бы, чтобы они возвращали родительский объект <code>Array</code> вместо объекта <code>MyArray</code>. Символ {{jsxref("Symbol.species")}} позволяет это реализовать:</p>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js">class MyArray extends Array {
+ // Изменить species на родительский конструктор Array
+ static get [Symbol.species]() { return Array; }
+}
+var a = new MyArray(1,2,3);
+var mapped = a.map(x =&gt; x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array); // true</code></pre>
+
+<h2 id="Обращение_к_родительскому_классу_с_помощью_super">Обращение к родительскому классу с помощью <code>super</code></h2>
+
+<p>Ключевое слово <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/super">super</a></code> используется для вызова функций на родителе объекта.</p>
+
+<pre class="brush: js language-js notranslate"><code class="language-js">class Cat {
+ constructor(name) {
+ this.name = name;
+ }
+
+ speak() {
+ console.log(</code>`${this.name} издает звук.`<code class="language-js">);
+ }
+}
+
+class Lion extends Cat {
+  speak() {
+  super.speak();
+  console.log(</code>`${this.name}<code class="language-js"> рычит.`);
+  }
+}
+
+let l = new Lion('Фаззи');
+l.speak();
+// Фаззи издает звук.
+// Фаззи рычит.</code>
+</pre>
+
+<h2 id="Mix-ins">Mix-ins</h2>
+
+<p>Абстрактные подклассы, или mix-ins, — это шаблоны для классов. У класса в ECMAScript может быть только один родительский класс, поэтому множественное наследование (к примеру, от tooling classes) невозможно. Функциональность должен предоставлять родительский класс.</p>
+
+<p>Для реализации mix-ins в ECMAScript можно использовать функцию, которая в качестве аргумента принимает родительский класс, а возвращает подкласс, его расширяющий:</p>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js">var calculatorMixin = Base =&gt; class extends Base {
+ calc() { }
+};
+
+var randomizerMixin = Base =&gt; class extends Base {
+ randomize() { }
+};</code></pre>
+
+<p>Класс, использующий такие mix-ins, можно описать следующим образом:</p>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js">class Foo { }
+class Bar extends calculatorMixin(randomizerMixin(Foo)) { }</code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.classes")}}</p>
+
+<h2 id="Повторное_определение_класа">Повторное определение класа</h2>
+
+<p>Класс не может быть переопределен. Попытка этого приведет к <code>SyntaxError</code> .</p>
+
+<p>Если мы запускаете код в веб браузере, к примеру в Firefox Web Console (<strong>Tools </strong>&gt;<strong> Web Developer </strong>&gt;<strong> Web Console</strong>) и вы используете ('Run') определение класса с одним и тем же именем дважды, вы получите <code>SyntaxError: redeclaration of let <em>ClassName</em>;</code>. (Обсуждение по ошибке можно посмотреть в {{Bug(1428672)}}.) Chrome Developer Tools возвращает сообщение типа <code>Uncaught SyntaxError: Identifier '<em>ClassName</em>' has already been declared at &lt;anonymous&gt;:1:1</code>.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Функции</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/class">Определение классов</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/class">Выражение классов</a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes/Class_fields">Публичные поля класса</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Classes/%D0%9F%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D0%BB%D1%8F_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0">Приватные поля класса</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/super">super</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/07/es6-in-depth-classes/">Статья в блоге: "ES6 In Depth: Classes"</a></li>
+ <li><a href="https://github.com/tc39/proposal-class-fields">Fields and public/private class properties proposal (stage 3)</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/classes/static/index.html b/files/ru/web/javascript/reference/classes/static/index.html
new file mode 100644
index 0000000000..cec6516733
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/static/index.html
@@ -0,0 +1,129 @@
+---
+title: static
+slug: Web/JavaScript/Reference/Classes/static
+translation_of: Web/JavaScript/Reference/Classes/static
+---
+<div>{{jsSidebar("Classes")}}</div>
+
+<p>Для того, чтобы объявить статический метод класса, необходимо использовать ключевое слово <strong>static</strong>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">static <em>methodName</em>() { ... }</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Cтатические методы вызываются через имя класса. Вызывать статические методы через имя объекта запрещено. Статические методы часто используются для создания вспомогательных функций приложения.</p>
+
+<h2 id="Вызов_статических_методов">Вызов статических методов</h2>
+
+<h3 id="Вызов_из_другого_статического_метода">Вызов из другого статического метода</h3>
+
+<p>Чтобы вызвать статический метод в другом статическом методе того же класса, вы можете использовать ключевое слово <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code>.</p>
+
+<pre class="brush: js">class StaticMethodCall {
+ static staticMethod() {
+ return 'Вызван статический метод';
+ }
+ static anotherStaticMethod() {
+ return this.staticMethod() + ' из другого статического метода';
+ }
+}
+StaticMethodCall.staticMethod();
+// 'Вызван статический метод'
+
+StaticMethodCall.anotherStaticMethod();
+// 'Вызван статический метод из другого статического метода'
+</pre>
+
+<h3 id="Вызов_из_конструктора_класса_и_других_методов">Вызов из конструктора класса и других методов</h3>
+
+<p>Статические методы недоступны напрямую, используя ключевое слово <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code> из нестатических методов. Вам нужно вызвать их с помощью имени класса: <code>CLASSNAME.STATIC_METHOD_NAME()</code> или вызовом метода как свойства конструктора: <code>this.constructor.STATIC_METHOD_NAME()</code>.</p>
+
+<pre class="brush: js">class StaticMethodCall {
+ constructor() {
+ console.log(StaticMethodCall.staticMethod());
+ // 'вызван статический метод.'
+
+ console.log(this.constructor.staticMethod());
+ // 'вызван статический метод.'
+ }
+
+ static staticMethod() {
+ return 'вызван статический метод.';
+ }
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий пример демонстрирует:</p>
+
+<ol>
+ <li>Как статический метод реализуется в классе.</li>
+ <li>Как переопределить статический метод при наследовании.</li>
+ <li>Как можно и как нельзя вызывать статические методы.</li>
+</ol>
+
+<pre class="brush: js">class Triple {
+ static triple(n) {
+ if (n === undefined) {
+ n = 1;
+ }
+ return n * 3;
+ }
+}
+
+class BiggerTriple extends Triple {
+ static triple(n) {
+ return super.triple(n) * super.triple(n);
+ }
+}
+
+console.log(Triple.triple()); // 3
+console.log(Triple.triple(6)); // 18
+
+var tp = new Triple();
+
+console.log(BiggerTriple.triple(3));
+// 81 (не затрагивается экземпляром родителя)
+
+console.log(tp.triple());
+// Выведет сообщение, что "tripple" не является
+// функцией ('tp.tripple is not a function').
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_в_браузерах">Поддержка в браузерах</h2>
+
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам запрос на слияние.</div>
+
+<p>{{Compat("javascript.classes.static")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> declaration</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/classes/приватные_поля_класса/index.html b/files/ru/web/javascript/reference/classes/приватные_поля_класса/index.html
new file mode 100644
index 0000000000..09fe2505e2
--- /dev/null
+++ b/files/ru/web/javascript/reference/classes/приватные_поля_класса/index.html
@@ -0,0 +1,205 @@
+---
+title: Приватные поля класса
+slug: Web/JavaScript/Reference/Classes/Приватные_поля_класса
+translation_of: Web/JavaScript/Reference/Classes/Private_class_fields
+---
+<div>{{JsSidebar("Classes")}}</div>
+
+<p><span class="seoSummary">Свойства класса по умолчанию являются общедоступными и могут быть рассмотрены или изменены вне класса. Тем не менее, есть <a href="https://github.com/tc39/proposal-class-fields">экспериментальное предложение</a>, позволяющее определить приватные поля класса, используя префикс хэша <code>#</code>.</span></p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">class ClassWithPrivateField {
+ #privateField
+}
+
+class ClassWithPrivateMethod {
+ #privateMethod() {
+ return 'hello world'
+ }
+}
+
+class ClassWithPrivateStaticField {
+ static #PRIVATE_STATIC_FIELD
+}
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Приватные_статические_поля">Приватные статические поля</h3>
+
+<p>Приватные поля доступны в конструкторе класса изнутри самой декларации класса.</p>
+
+<p>Ограничение статических переменных, вызываемых только статическими методами, все еще сохраняется.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+
+  static publicStaticMethod() {
+    ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD = 42
+    return ClassWithPrivateStaticField.#PRIVATE_STATIC_FIELD
+  }
+}
+
+console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)</pre>
+
+<p>Приватные статические поля добавляются в конструктор класса во время обработки класса.</p>
+
+<p>Существует ограничение по происхождению частных статических полей. Только класс, который определяет приватное статическое поле, может получить доступ к этому полю.</p>
+
+<p>Это может привести к неожиданному поведению при использовании this.</p>
+
+<pre class="brush: js notranslate">class BaseClassWithPrivateStaticField {
+  static #PRIVATE_STATIC_FIELD
+
+  static basePublicStaticMethod() {
+    this.#PRIVATE_STATIC_FIELD = 42
+    return this.#PRIVATE_STATIC_FIELD
+  }
+}
+
+class SubClass extends BaseClassWithPrivateStaticField { }
+
+let error = null
+
+try {
+ SubClass.basePublicStaticMethod()
+} catch(e) { error = e}
+
+console.assert(error instanceof TypeError)
+</pre>
+
+<h3 id="Приватные_поля_экземпляров">Приватные поля экземпляров</h3>
+
+<p>Приватные поля экзмепляров объявляются <strong>#имя </strong>(произносится как "хэш нэймс"), которые идентифицируются префиксом <code><strong>#</strong></code>. <code>#</code> является частью имени, а также используется для объявления и доступа.</p>
+
+<p><span class="tlid-translation translation" lang="ru"><span title="">Инкапсуляция обеспечивается языком.</span> <span title="">Обращение к <code>#</code> именам вне области видимости является синтаксической ошибкой.</span></span></p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateField {
+  #privateField
+
+  constructor() {
+    this.#privateField = 42
+    this.#randomField = 666 // Syntax error
+  }
+}
+
+const instance = new ClassWithPrivateField()
+instance.#privateField === 42 // Syntax error
+</pre>
+
+<h3 id="Приватные_методы">Приватные методы</h3>
+
+<h4 id="Приватные_статические_методы">Приватные статические методы</h4>
+
+<p>Приватные статические методы</p>
+
+<p>Как и их публичный эквивалент, приватные статические методы вызываются на самом классе, а не на экземплярах класса. Как и приватные статические поля, они доступны только изнутри объявления класса.</p>
+
+<p>Приватные статические методы могут быть генераторами, асинхронными функциями и асинхронными функциями-генераторами.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateStaticMethod {
+    static #privateStaticMethod() {
+        return 42
+    }
+
+    static publicStaticMethod1() {
+        return ClassWithPrivateStaticMethod.#privateStaticMethod();
+    }
+
+    static publicStaticMethod2() {
+       return this.#privateStaticMethod();
+  }
+}
+
+console.assert(ClassWithPrivateStaticMethod.publicStaticMethod1() === 42);
+console.assert(ClassWithPrivateStaticMethod.publicStaticMethod2() === 42);
+</pre>
+
+<p>Это может привести к неожиданному поведению при его использовании <strong><code>this</code></strong>. В следующем примере <code>this</code> относится к классу <code>Derived</code> (а не к классу <code>Base</code>), когда мы пытаемся вызвать <code>Derived.publicStaticMethod2()</code>, и, таким образом, имеет такое же "ограничение по происхождению", как упоминалось выше:</p>
+
+<pre class="brush: js notranslate">class Base {
+    static #privateStaticMethod() {
+        return 42;
+    }
+    static publicStaticMethod1() {
+        return Base.#privateStaticMethod();
+    }
+    static publicStaticMethod2() {
+        return this.#privateStaticMethod();
+    }
+}
+
+class Derived extends Base {}
+
+console.log(Derived.publicStaticMethod1()); // 42
+console.log(Derived.publicStaticMethod2()); // TypeError
+</pre>
+
+<h4 id="Приватные_методы_экземпляровinstance">Приватные методы экземпляров(instance)</h4>
+
+<p>Приватные методы экземпляров это методы, доступные у экземпляров класса, доступ к которым запрещен также, как у приватных полей класса.</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateMethod {
+  #privateMethod() {
+    return 'hello world'
+  }
+
+  getPrivateMessage() {
+      return this.#privateMethod()
+  }
+}
+
+const instance = new ClassWithPrivateMethod()
+console.log(instance.getPrivateMessage())
+// expected output: "hello worl​d"</pre>
+
+<p>Приватные методы экземпляров могут быть генератором, async, или функциями async генератора. Приватные геттеры и сеттеры также возможны:</p>
+
+<pre class="brush: js notranslate">class ClassWithPrivateAccessor {
+  #message
+
+  get #decoratedMessage() {
+    return `✨${this.#message}✨`
+  }
+  set #decoratedMessage(msg) {
+    this.#message = msg
+  }
+
+  constructor() {
+    this.#decoratedMessage = 'hello world'
+    console.log(this.#decoratedMessage)
+  }
+}
+
+new ClassWithPrivateAccessor();
+// expected output: "✨hello worl​d✨"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице составлена из структурированных данных. Если Вы хотите внести свой вклад в данные, пожалуйста, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос.</div>
+
+<p>{{Compat("javascript.classes.private_class_fields")}}</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes/Public_class_fields">Public class fields</a></li>
+ <li><a href="https://rfrn.org/~shu/2018/05/02/the-semantics-of-all-js-class-elements.html">The Semantics of All JS Class Elements</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/deprecated_and_obsolete_features/index.html b/files/ru/web/javascript/reference/deprecated_and_obsolete_features/index.html
new file mode 100644
index 0000000000..e579175a94
--- /dev/null
+++ b/files/ru/web/javascript/reference/deprecated_and_obsolete_features/index.html
@@ -0,0 +1,290 @@
+---
+title: Deprecated and obsolete features
+slug: Web/JavaScript/Reference/Deprecated_and_obsolete_features
+tags:
+ - Deprecated
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Deprecated_and_obsolete_features
+---
+<div>{{JsSidebar("More")}}</div>
+
+<p>This page lists features of JavaScript that are deprecated (that is, still available but planned for removal) and obsolete (that is, no longer usable).</p>
+
+<h2 id="Deprecated_features">Deprecated features</h2>
+
+<p>These deprecated features can still be used, but should be used with caution because they are expected to be removed entirely sometime in the future. You should work to remove their use from your code.</p>
+
+<h3 id="RegExp_properties">RegExp properties</h3>
+
+<p>The following properties are deprecated. This does not affect their use in {{jsxref("String.replace", "replacement strings", "", 1)}}:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.n", "$1-$9")}}</td>
+ <td>
+ <p>Parenthesized substring matches, if any.<br>
+ <strong>Warning:</strong> Using these properties can result in problems, since browser extensions can modify them. Avoid them!</p>
+ </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.input", "$_")}}</td>
+ <td>Смотрите <code>input</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.multiline", "$*")}}</td>
+ <td> Смотрите <code>multiline</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.lastMatch", "$&amp;")}}</td>
+ <td>Смотрите <code>lastMatch</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.lastParen", "$+")}}</td>
+ <td>Смотрите <code>lastParen</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.leftContext", "$`")}}</td>
+ <td>Смотрите <code>leftContext</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.rightContext", "$'")}}</td>
+ <td>Смотрите <code>rightContext</code>.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.input", "input")}}</td>
+ <td>The string against which a regular expression is matched.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.lastMatch", "lastMatch")}}</td>
+ <td>The last matched characters.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.lastParen", "lastParen")}}</td>
+ <td>The last parenthesized substring match, if any.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.leftContext", "leftContext")}}</td>
+ <td>The substring preceding the most recent match.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.rightContext", "rightContext")}}</td>
+ <td>The substring following the most recent match.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>The following are now properties of <code>RegExp</code> instances, no longer of the <code>RegExp</code> object:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.global", "global")}}</td>
+ <td>Whether or not to test the regular expression against all possible matches in a string, or only against the first.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.ignoreCase", "ignoreCase")}}</td>
+ <td>Whether or not to ignore case while attempting a match in a string.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.lastIndex", "lastIndex")}}</td>
+ <td>The index at which to start the next match.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.multiline", "multiline")}}</td>
+ <td>Whether or not to search in strings across multiple lines.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("RegExp.source", "source")}}</td>
+ <td>The text of the pattern.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="RegExp_methods">RegExp methods</h3>
+
+<ul>
+ <li>The {{jsxref("RegExp.compile", "compile()")}} method is deprecated.</li>
+ <li>The <code>valueOf</code> method is no longer specialized for <code>RegExp</code>. Use {{jsxref("Object.valueOf()")}}.</li>
+</ul>
+
+<h3 id="Function_properties">Function properties</h3>
+
+<ul>
+ <li>The {{jsxref("Global_Objects/Function/caller", "caller")}} and {{jsxref("Global_Objects/Function/arguments", "arguments")}} properties are deprecated, because they leak the function caller. Instead of the arguments property, you should use the {{jsxref("Functions/arguments", "arguments")}} object inside function closures.</li>
+</ul>
+
+<h3 id="Legacy_generator">Legacy generator</h3>
+
+<ul>
+ <li>{{jsxref("Statements/Legacy_generator_function", "Legacy generator function statement")}} and {{jsxref("Operators/Legacy_generator_function", "Legacy generator function expression")}} are deprecated. Use {{jsxref("Statements/function*", "function* statement")}} and {{jsxref("Operators/function*", "function* expression")}} instead.</li>
+ <li>{{jsxref("Operators/Array_comprehensions", "JS1.7/JS1.8 Array comprehension", "#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions")}} and {{jsxref("Operators/Generator_comprehensions", "JS1.7/JS1.8 Generator comprehension", "#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions")}} are deprecated.</li>
+</ul>
+
+<h3 id="Iterator">Iterator</h3>
+
+<ul>
+ <li>{{jsxref("Global_Objects/StopIteration", "StopIteration")}} устарел.</li>
+ <li>{{jsxref("Global_Objects/Iterator", "Iterator")}} устарел.</li>
+</ul>
+
+<h3 id="Object_methods">Object methods</h3>
+
+<ul>
+ <li>{{jsxref("Object.watch", "watch")}} and {{jsxref("Object.unwatch", "unwatch")}} are deprecated. Use {{jsxref("Proxy")}} instead.</li>
+ <li><code>__iterator__</code> устарел.</li>
+ <li>{{jsxref("Object.noSuchMethod", "__noSuchMethod__")}} is deprecated. Use {{jsxref("Proxy")}} instead.</li>
+</ul>
+
+<h3 id="Методы_даты">Методы даты</h3>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Date/getYear", "getYear")}} и {{jsxref("Global_Objects/Date/setYear", "setYear")}} are affected by the Year-2000-Problem and have been subsumed by {{jsxref("Global_Objects/Date/getFullYear", "getFullYear")}} и {{jsxref("Global_Objects/Date/setFullYear", "setFullYear")}}.</li>
+ <li>You should use {{jsxref("Global_Objects/Date/toISOString", "toISOString")}} instead of the deprecated {{jsxref("Global_Objects/Date/toGMTString", "toGMTString")}} method in new code.</li>
+ <li>{{jsxref("Global_Objects/Date/toLocaleFormat", "toLocaleFormat")}} is deprecated.</li>
+</ul>
+
+<h3 id="Functions">Functions</h3>
+
+<ul>
+ <li>{{jsxref("Operators/Expression_closures", "Expression closures", "", 1)}} are deprecated. Use regular {{jsxref("Operators/function", "functions")}} or {{jsxref("Functions/Arrow_functions", "arrow functions", "", 1)}} instead.</li>
+</ul>
+
+<h3 id="Proxy">Proxy</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Archive/Web/Old_Proxy_API">Proxy.create</a> and <a href="/en-US/docs/Archive/Web/Old_Proxy_API">Proxy.createFunction</a> are deprecated. Use {{jsxref("Proxy")}} instead.</li>
+ <li>The following traps are obsolete:
+ <ul>
+ <li><code>hasOwn</code> ({{bug(980565)}}, Firefox 33).</li>
+ <li><code>getEnumerablePropertyKeys</code> ({{bug(783829)}}, Firefox 37)</li>
+ <li><code>getOwnPropertyNames</code> ({{bug(1007334)}}, Firefox 33)</li>
+ <li><code>keys</code> ({{bug(1007334)}}, Firefox 33)</li>
+ </ul>
+ </li>
+</ul>
+
+<h3 id="Escape_sequences">Escape sequences</h3>
+
+<ul>
+ <li>Octal escape sequences (\ followed by one, two, or three octal digits) are deprecated in string and regular expression literals.</li>
+ <li>The {{jsxref("Global_Objects/escape", "escape")}} and {{jsxref("Global_Objects/unescape", "unescape")}} functions are deprecated. Use {{jsxref("Global_Objects/encodeURI", "encodeURI")}}, {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}}, {{jsxref("Global_Objects/decodeURI", "decodeURI")}} or {{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} to encode and decode escape sequences for special characters.</li>
+</ul>
+
+<h3 id="Методы_строк">Методы строк</h3>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/tag/HTML%20wrapper%20methods">HTML wrapper methods</a> like {{jsxref("String.prototype.fontsize")}} and {{jsxref("String.prototype.big")}}.</li>
+ <li>{{jsxref("String.prototype.quote")}} is removed from Firefox 37.</li>
+ <li>non standard <code>flags</code> parameter in {{jsxref("String.prototype.search")}}, {{jsxref("String.prototype.match")}}, and {{jsxref("String.prototype.replace")}} are deprecated.</li>
+ <li>{{jsxref("String.prototype.substr")}} probably won't be removed anytime soon, but it's defined in <a href="https://www.ecma-international.org/ecma-262/9.0/index.html#sec-string.prototype.substr" rel="noopener">Annex B</a> of the ECMA-262 standard, whose <a href="https://www.ecma-international.org/ecma-262/9.0/index.html#sec-additional-ecmascript-features-for-web-browsers">introduction</a> states: "… Programmers should not use or assume the existence of these features and behaviours when writing new ECMAScript code. …"</li>
+</ul>
+
+<h2 id="Obsolete_features">Obsolete features</h2>
+
+<p>These obsolete features have been entirely removed from JavaScript and can no longer be used as of the indicated version of JavaScript.</p>
+
+<h3 id="Объект">Объект</h3>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Object/count", "__count__")}}</td>
+ <td>Returns the number of enumerable properties directly on a user-defined object.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Object/Parent", "__parent__")}}</td>
+ <td>Points to an object's context.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Object/eval", "Object.prototype.eval()")}}</td>
+ <td>Evaluates a string of JavaScript code in the context of the specified object.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Object.observe()")}}</td>
+ <td>Asynchronously observing the changes to an object.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Object.unobserve()")}}</td>
+ <td>Remove observers.</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Object.getNotifier()")}}</td>
+ <td>Creates an object that allows to synthetically trigger a change.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Function">Function</h3>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>{{jsxref("Global_Objects/Function/arity", "arity")}}</td>
+ <td>Number of formal arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Массив">Массив</h3>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td>Свойство</td>
+ <td>Описание</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Array.observe()")}}</td>
+ <td>Асинхронный просмотр изменений в массивах. </td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Array.unobserve()")}}</td>
+ <td>Remove observers.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Число">Число</h3>
+
+<ul>
+ <li>{{jsxref("Number.toInteger()")}}</li>
+</ul>
+
+<h3 id="ParallelArray">ParallelArray</h3>
+
+<ul>
+ <li>{{jsxref("ParallelArray")}}</li>
+</ul>
+
+<h3 id="Statements">Statements</h3>
+
+<ul>
+ <li>{{jsxref("Statements/for_each...in", "for each...in")}} is deprecated. Use {{jsxref("Statements/for...of", "for...of")}} instead.</li>
+ <li>Destructuring {{jsxref("Statements/for...in", "for...in")}} is deprecated. Use {{jsxref("Statements/for...of", "for...of")}} instead.</li>
+ <li>let blocks and let expressions are obsolete.</li>
+</ul>
+
+<h3 id="E4X">E4X</h3>
+
+<p>Смотрите <a href="/en-US/docs/Archive/Web/E4X">E4X</a>.</p>
+
+<h3 id="Sharp_variables">Sharp variables</h3>
+
+<p>Смотрите <a href="/en-US/docs/Archive/Web/Sharp_variables_in_JavaScript">Sharp variables in JavaScript</a>.</p>
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
new file mode 100644
index 0000000000..5de1095a97
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/already_has_pragma/index.html
@@ -0,0 +1,44 @@
+---
+title: >-
+ Warning: -file- is being assigned a //# sourceMappingURL, but already has
+ one(Внимание: -file- является в сущности назначенным //# sourceMappingURL, но
+ уже имеет один)
+slug: Web/JavaScript/Reference/Errors/Already_has_pragma
+translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Опасно: Внимание: -file- является в сущности назначенным //# sourceMappingURL, но уже имеет один)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждение. Выполнение скрипта не будет остановлено.</p>
+
+<h2 id="Что_вы_сделали_не_так">Что вы сделали не так?</h2>
+
+<p> </p>
+
+<p>Для данного источника JavaScript исходная карта была указана несколько раз.</p>
+
+<p>Источники JavaScript часто объединяются и минимизируются, чтобы сделать их доставку с сервера более эффективной. С помощью сопоставлений исходного кода отладчик может сопоставить выполняемый код с исходными файлами. Существует два способа назначения исходной карты: с помощью комментария или путем установки заголовка для файла JavaScript.</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Настройка исходной карты с помощью комментария в файле:</p>
+
+<pre class="brush: js example-good">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre>
+
+<p>Или, в качестве альтернативы, вы можете установить заголовок, на ваш JavaScript файл :</p>
+
+<pre class="brush: js example-good">X-SourceMap: /path/to/file.js.map</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Tools/Debugger/How_to/Use_a_source_map">How to use a source map – Firefox Tools documentation</a></li>
+ <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Introduction to source maps – HTML5 rocks</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/array_sort_argument/index.html b/files/ru/web/javascript/reference/errors/array_sort_argument/index.html
new file mode 100644
index 0000000000..49709baa5f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/array_sort_argument/index.html
@@ -0,0 +1,45 @@
+---
+title: >-
+ TypeError: invalid Array.prototype.sort argument (TypeError: недопустимый
+ Array.prototype.sort argument)
+slug: Web/JavaScript/Reference/Errors/Array_sort_argument
+translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: аргумент не является объектом функции (Edge)
+TypeError: недопустимый Array.prototype.sort аргумент для (Firefox)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Аргумент {{jsxref("Array.prototype.sort()")}} предполагается либо {{jsxref("undefined")}} или функцию, которая сравнивает его операндов.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильные_примеры">Неправильные примеры</h3>
+
+<pre class="brush: js example-bad">[1, 3, 2].sort(5); // TypeError
+
+var cmp = { asc: (x, y) =&gt; x &gt;= y, dsc: (x, y) =&gt; x &lt;= y };
+[1, 3, 2].sort(cmp[this.key] || 'asc'); // TypeError
+</pre>
+
+<h3 id="правильные">правильные</h3>
+
+<pre class="brush: js example-good">[1, 3, 2].sort(); // [1, 2, 3]
+
+
+var cmp = { asc: (x, y) =&gt; x &gt;= y, dsc: (x, y) =&gt; x &lt;= y };
+[1, 3, 2].sort(cmp[this.key || 'asc']); // [1, 2, 3]</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.sort()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/bad_octal/index.html b/files/ru/web/javascript/reference/errors/bad_octal/index.html
new file mode 100644
index 0000000000..d36656c80e
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/bad_octal/index.html
@@ -0,0 +1,53 @@
+---
+title: 'Внимание: 08/09 не является восьмеричной постоянной по ECMA-262'
+slug: Web/JavaScript/Reference/Errors/Bad_octal
+tags:
+ - Ошибки
+ - Предупреждения
+ - Синтаксические ошибки
+translation_of: Web/JavaScript/Reference/Errors/Bad_octal
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Внимание: Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262.
+Внимание: Синтаксическая ошибка: 09 не является восьмеричной постоянной по ECMA-262.
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждение. Выполнение JavaScript не будет остановлено.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Десятеричные литералы могут начинаться с нуля (<code>0</code>), за которым следуют другие десятеричные цифры. Но, если все цифры после начального нуля (<code>0</code>) меньше 8, то число интерпретируется как восьмеричное. Т.к. 08 и 09 не соответствуют даному условию, JavaScript выводит предупреждение об этом.</p>
+
+<p>Следует отметить, что восьмеричные литералы и восьмеричные управляющие последовательности являются устаревшими и <span id="result_box" lang="ru"><span>будут содержать дополнительное предупреждение об этом.</span></span> С выпуском ECMAScript 6 версии в синтаксисе используется начальный нуль (<code>0</code>), за которым следует <span id="result_box" lang="ru"><span>строчная или прописная</span></span> Латинская буква "O" (<code>0o</code> или <code>0O)</code>.  <span id="result_box" lang="ru"><span>Дополнительную информацию смотрите на странице о </span></span> <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">лексической грамматике</a>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Недопустимые_восьмеричные_числа">Недопустимые восьмеричные числа</h3>
+
+<pre class="brush: js example-bad">08;
+09;
+// Синтаксическая ошибка: 08 не является восьмеричной постоянной по ECMA-262.
+// Синтаксическая ошибка: восьмеричные литералы с "0"-префиксом и восьмеричные управляющие последовательности
+// являются устаревшими</pre>
+
+<h3 id="Допустимые_восьмеричные_числа">Допустимые восьмеричные числа</h3>
+
+<p><span id="result_box" lang="ru"><span>Используйте начальный нуль, за которым следует буква «o»;</span></span></p>
+
+<pre class="brush: js example-good">0O755;
+0o644;
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">Лексический синтаксис</a></li>
+ <li>
+ <p><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal">Синтаксическая ошибка: восьмеричные литералы с "0"-префиксом и восьмеричные управляющие последовательности являются устаревшими</a></p>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/bad_radix/index.html b/files/ru/web/javascript/reference/errors/bad_radix/index.html
new file mode 100644
index 0000000000..b3e84de1e7
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/bad_radix/index.html
@@ -0,0 +1,61 @@
+---
+title: 'RangeError: radix must be an integer'
+slug: Web/JavaScript/Reference/Errors/Bad_radix
+tags:
+ - JavaScript
+ - RangeError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Bad_radix
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: radix must be an integer at least 2 and no greater than 36 (Firefox)
+RangeError: toString() radix argument must be between 2 and 36 (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><span class="notranslate">Метод </span> {{jsxref("Number.prototype.toString()")}} <span class="notranslate">был вызван с дополнительным параметром <code>radix</code>.</span> <span class="notranslate"> Его значение должно быть целым числом, принадлежащим промежутку от 2 до 36 и указывающим основание системы счисления, которая должна быть использована для представления численных значений.</span> <span class="notranslate"> Например, десятичное (основание 10) число 169 представляется в шестнадцатеричном виде (основание 16) как A9.</span></p>
+
+<p><span class="notranslate">Почему значение этого параметра не может быть больше, чем 36? Для оснований</span><span class="notranslate">, превышающих 10, в качестве цифр используются алфавитные символы;</span> <span class="notranslate"> следовательно, основание не может быть больше 36, поскольку в латинском алфавите (используемом английским и многими другими языками) только 26 символов.</span></p>
+
+<p><span class="notranslate">Наиболее распространенные основания систем счисления:</span></p>
+
+<ul>
+ <li>2 для <a href="https://ru.wikipedia.org/wiki/Двоичная_система_счисления">двоичных чисел</a>,</li>
+ <li>8 для <a href="https://ru.wikipedia.org/wiki/Восьмеричная_система_счисления">восьмеричных чисел</a>,</li>
+ <li>10 для <a href="https://ru.wikipedia.org/wiki/Десятичная_система_счисления">десятичных чисел</a>,</li>
+ <li>16 для <a href="https://ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления">шестнадцатеричных чисел</a>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 class="highlight-spanned" id="Некорректное_применение"><span class="highlight-span"><span class="notranslate">Некорректное применение</span></span></h3>
+
+<pre class="brush: js example-bad">(42).toString(0);
+(42).toString(1);
+(42).toString(37);
+(42).toString(150);
+// Нельзя использовать для форматирования строку данного вида:
+(12071989).toString('MM-dd-yyyy');
+</pre>
+
+<h3 id="Корректное_применение">Корректное применение</h3>
+
+<pre class="brush: js example-good">(42).toString(2); // "101010" (двоичная система)
+(13).toString(8); // "15" (восьмеричная)
+(0x42).toString(10); // "66" (десятичная)
+(100000).toString(16) // "186a0" (шестнадцатеричная)
+</pre>
+
+<h2 id="Смотрите_также"><span class="notranslate">Смотрите также</span></h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..6e3604af66
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/bad_regexp_flag/index.html
@@ -0,0 +1,102 @@
+---
+title: 'SyntaxError: invalid regular expression flag "x"'
+slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag
+translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: invalid regular expression flag "x" (Firefox)
+SyntaxError: Invalid regular expression flags (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>В коде есть недопустимые флаги регулярных выражений. Литерал в регулярном выражении, который содержит шаблон заключенный между двумя слэшами, флаги определяются после второго флага. Они также могут быть объявлены в конструкторе функции {{jsxref("RegExp")}} object (второй параметр). Флаги регулярного выражения могут быть использованы отдельно или вместе в любой очередности, но в ECMAScript их только пять.</p>
+
+<p>Чтоб включить флаг в регулярное выражение, используйте синтаксис:</p>
+
+<pre class="brush: js">var re = /pattern/flags;
+</pre>
+
+<p>или</p>
+
+<pre class="brush: js">var re = new RegExp('pattern', 'flags');</pre>
+
+<p>Флаги регулярного выражения</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Флаг</th>
+ <th scope="col">Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>g</code></td>
+ <td>Глобальный поиск.</td>
+ </tr>
+ <tr>
+ <td>i</td>
+ <td>Нечувствительный к регистру поиск.</td>
+ </tr>
+ <tr>
+ <td>m</td>
+ <td>Поиск по всем строкам.</td>
+ </tr>
+ <tr>
+ <td>u</td>
+ <td>Unicode; обрабатывать шаблон как последовательность кода Unicode</td>
+ </tr>
+ <tr>
+ <td>y</td>
+ <td>Выполняет «липкий» поиск, который будет начинаться с текущей позиции в целевой строке. Cм. {{jsxref("RegExp.sticky", "sticky")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Существует только пять действительных флагов регулярных выражений.</p>
+
+<pre class="brush: js example-bad">/foo/bar;
+
+// Ошибка синтаксиса: недействительный флаг "b" для регулярного выражения
+</pre>
+
+<p>Вы намеревались создать регулярное выражение? Выражение, содержащее два слэша, интерпретируется как литерал регулярного выражения.</p>
+
+<pre class="brush: js example-bad">let obj = {
+ url: /docs/Web
+};
+
+// Ошибка синтаксиса: недействительный флаг "W" для регулярного выражения
+</pre>
+
+<p>Или вы хотели создать строку вместо этого? Добавьте одинарные или двойные кавычки, чтобы создать строковый литерал. </p>
+
+<pre class="brush: js example-good">let obj = {
+ url: '/docs/Web'
+};</pre>
+
+<h3 id="Действительные_флаги_регулярного_выражения">Действительные флаги регулярного выражения </h3>
+
+<p>Вгляните на таблицу выше, где представлены пять действительных флагов регулярного выражения, которые разрешены в JavaScript</p>
+
+<pre class="brush: js example-good">/foo/g;
+/foo/gim;
+/foo/uy;
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">Regular expressions</a></li>
+ <li><a href="http://xregexp.com/flags/">XRegEx flags</a> – библиотека регулярного выражения, которая предоставляет четыре новых флага (<code>n</code>, <code>s</code>, <code>x</code>, <code>A</code>)</li>
+</ul>
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
new file mode 100644
index 0000000000..dd69cb3167
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/bad_return_or_yield/index.html
@@ -0,0 +1,56 @@
+---
+title: 'SyntaxError: return not in function'
+slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: 'return' statement outside of function (Edge)
+SyntaxError: return not in function (Firefox)
+SyntaxError: yield not in function (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Вызов оператора <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/return">return</a></code> или <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code> был осуществлен вне <a href="/ru/docs/Web/JavaScript/Guide/Functions">функции</a>. Может, где-то пропущена фигурная скобка? Операторы <code>return</code> и <code>yield</code> не могут существовать вне функции, поскольку они завершают (или останавливают и возобновляют) её исполнение и указывают значение, возвращаемое в место, откуда она была вызвана.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js example-bad">var cheer = function(score) {
+ if (score === 147)
+ return 'Максимум!';
+ };
+ if (score &gt; 100) {
+ return 'Столетие!';
+ }
+}
+
+// SyntaxError: return not in function</pre>
+
+<p>На первый взгляд кажется, что фигурные скобки расставлены правильно, но в данном примере пропущена <code>{</code> после первого оператора <code>if</code>. Правильный вариант:</p>
+
+<pre class="brush: js example-good">var cheer = function(score) {
+ if (score === 147) {
+ return 'Максимум!';
+ }
+ if (score &gt; 100) {
+ return 'Столетие!';
+ }
+};</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/return">return</a></code></li>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code></li>
+</ul>
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
new file mode 100644
index 0000000000..0d309530e6
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/called_on_incompatible_type/index.html
@@ -0,0 +1,67 @@
+---
+title: X.prototype.y called on incompatible type
+slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type
+translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<div> </div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: 'this' не является Set объектом (EdgE)
+TypeError: Function.prototype.toString вызывается несовместимый объект (Firefox)
+TypeError: Function.prototype.bind вызывается несовместимая цель (Firefox)
+TypeError: Метод Set.prototype.add called вызывается несовместимый приемник undefined (Chrome)
+TypeError: Bind должен вызываться для функции(Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки </h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>При возникновении этой ошибки вызывается функция (для данного объекта) с типом this, не соответствующим типу, ожидаемому функцией.</p>
+
+<p>Эта проблема может возникнуть при использовании {{jsxref("Function.prototype.call()")}} ил {{jsxref("Function.prototype.apply()")}} методы и предоставление аргумента this, который не имеет ожидаемого типа.</p>
+
+<p>Эта проблема также может возникнуть при предоставлении функции (хранящейся в объекте) в качестве аргумента другой функции. В этом случае объект не будет целью this функции. Чтобы обойти эту проблему, необходимо либо предоставить лямбда-код, который выполняет вызов, либо использовать{{jsxref("Function.prototype.bind()")}} функция для принудительной передачи аргумента this ожидаемому объекту.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильные">Неправильные</h3>
+
+<pre class="brush: js example-bad">var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add);
+// mySet.add is a function, but "mySet" is not captured as this.
+
+var myFun = function () {
+ console.log(this);
+};
+['bar', 'baz'].forEach(myFun.bind);
+// myFun.bind is a function, but "myFun" is not captured as this.
+
+</pre>
+
+<h3 id="Правильные">Правильные</h3>
+
+<pre class="brush: js example-good">var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add.bind(mySet));
+// This works due to binding "mySet" as this.
+
+var myFun = function () {
+ console.log(this);
+};
+['bar', 'baz'].forEach(x =&gt; myFun.bind(x));
+// This works using the "bind" function. It creates a lambda forwarding the argument.
+
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..e5c0553e8a
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html
@@ -0,0 +1,60 @@
+---
+title: 'ReferenceError: can''t access lexical declaration`X'' before initialization'
+slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init
+tags:
+ - Errors
+ - JavaScript
+ - ReferenceError
+translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
+ReferenceError: 'x' is not defined (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("ReferenceError")}}</p>
+
+<h2 id="Что_случилось">Что случилось?</h2>
+
+<p>Попытка доступа к лексической переменной до ее инициализации. Это может произойти в любом блоке, если попытаться обратиться к переменной, объявленной с помощью ключевых слов <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code> или <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code> до того, как им было присвоено значение.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильно">Неправильно</h3>
+
+<p>Здесь переменная "foo" заново объявляется внутри блока с помощью ключевого слова <code>let</code>.</p>
+
+<pre class="brush: js example-bad">function test() {
+ let foo = 33;
+ if (true) {
+ let foo = (foo + 55);
+ // ReferenceError: can't access lexical
+ // declaration `foo' before initialization
+ }
+}
+test();
+</pre>
+
+<h3 id="Правильно">Правильно</h3>
+
+<p>Чтобы изменить "foo" в теле выражения if, надо убрать ключевое слово <code>let</code> и таким образом избавиться от повторного объявления.</p>
+
+<pre class="brush: js example-good">function test(){
+ let foo = 33;
+ if (true) {
+ foo = (foo + 55);
+ }
+}
+test();
+</pre>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let">Temporal Dead Zone and errors with let</a></li>
+</ul>
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
new file mode 100644
index 0000000000..df4ab49b2a
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_access_property/index.html
@@ -0,0 +1,58 @@
+---
+title: >-
+ 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
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Message">Message</h2>
+
+<pre class="syntaxbox">TypeError: не удается получить свойство {x} неопределенной или нулевой ссылки (Edge)
+TypeError: не удается получить доступ к свойству {x} of {y} (Firefox)
+TypeError: {y} не определен, не может получить доступ к свойству {x} (Firefox)
+TypeError: {y} имеет значение null, не может получить доступ к свойству {x} (Firefox)
+
+Образцы:
+TypeError: x не определен, не может получить доступ к свойству "prop"
+TypeError: x имеет значение null, не может получить доступ к свойству "prop"
+TypeError: не удается получить доступ к свойству "prop" неопределенного
+TypeError: не удается получить доступ к свойству "prop" значения null
+
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>Доступ к собственности осуществлялся {{jsxref("undefined")}} или {{jsxref("null")}} переменными</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильные_примеры">Неправильные примеры</h3>
+
+<pre class="brush: js example-bad">// undefined and null cases on which the substring method won't work
+var foo = undefined;
+foo.substring(1); // TypeError: x не определен, не может получить доступ к свойству substring
+
+var foo = null;
+foo.substring(1); // TypeError: x имеет значение null, не может получить доступ к свойству substring
+</pre>
+
+<h3 id="Исправление_проблемы">Исправление проблемы</h3>
+
+<p>Чтобы исправить указатель null на неопределенные или нулевые значения, можно использовать оператор typeof, например.</p>
+
+<pre class="brush: js">if (typeof foo !== 'undefined') {
+ // Теперь мы знаем, что foo определен.
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("undefined")}}</li>
+ <li>{{jsxref("null")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html b/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html
new file mode 100644
index 0000000000..fd1e8a30e5
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_assign_to_property/index.html
@@ -0,0 +1,52 @@
+---
+title: 'TypeError: can''t assign to property "x" on "y": not an object'
+slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property
+translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<div>Ошибка строгого режима JavaScript "can't assign to property" ("невозможно присвоить свойство") происходит в тот момент, когда Вы пытаетесь создать свойство примитивного типа данных (такого как символ, строка, число или булевое значение). Примитивные типы данных не могут содержать никаких свойств. </div>
+
+<h2 id="Message">Message</h2>
+
+<pre class="syntaxbox notranslate">TypeError: <code class="highlighted" id="line-87">can't assign to property "x" on {y}: not an object</code> (Firefox)
+TypeError: Cannot create property 'x' on {y} (Chrome)
+</pre>
+
+<h2 id="Error_type">Error type</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="What_went_wrong">What went wrong?</h2>
+
+<p>In {{jsxref("Strict_mode")}}, a {{jsxref("TypeError")}} is raised when attempting to create a property on <a href="/en-US/docs/Glossary/primitive">primitive</a> value such as a <a href="/en-US/docs/Glossary/symbol">symbol</a>, a <a href="/en-US/docs/Glossary/string">string</a>, a <a href="/en-US/docs/Glossary/number">number</a> or a <a href="/en-US/docs/Glossary/boolean">boolean</a>. <a href="/en-US/docs/Glossary/Primitive">Primitive</a> values cannot hold any <a href="/en-US/docs/Glossary/property/JavaScript">property</a>.</p>
+
+<p>The problem might be that an unexpected value is flowing at an unexpected place, or that an object variant of a {{jsxref("String")}} or a {{jsxref("Number")}} is expected.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Invalid_cases">Invalid cases</h3>
+
+<pre class="brush: js example-bad notranslate">'use strict';
+
+var foo = "my string";
+// The following line does nothing if not in strict mode.
+foo.bar = {}; // <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">TypeError: can't assign to property "bar" on "my string": not an object</span></span></span>
+</pre>
+
+<h3 id="Fixing_the_issue">Fixing the issue</h3>
+
+<p>Either fix the code to prevent the <a href="/en-US/docs/Glossary/primitive">primitive</a> from being used in such places, or fix the issue is to create the object equivalent {{jsxref("Object")}}.</p>
+
+<pre class="brush: js example-good notranslate">'use strict';
+
+var foo = new String("my string");
+foo.bar = {};
+</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Strict_mode")}}</li>
+ <li><a href="/en-US/docs/Glossary/primitive">primitive</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html b/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html
new file mode 100644
index 0000000000..59499e302d
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html
@@ -0,0 +1,65 @@
+---
+title: 'TypeError: can''t define property "x": "obj" is not extensible'
+slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible
+tags:
+ - Error
+ - Errors
+ - JavaScript
+ - TypeError
+ - Исключение
+translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre>TypeError: Cannot create property for a non-extensible object (Edge)
+TypeError: can't define property "x": "obj" is not extensible (Firefox)
+TypeError: Cannot define property: "x", object is not extensible. (Chrome)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_произошло_не_так">Что произошло не так?</h2>
+
+<p>Обычно, объект расширяемый и к нему можно добавать новые свойства. Однако в этой ситуации {{jsxref("Object.preventExtensions()")}} сделал объект нерасширяемым, так что у него не может появиться других свойств, отличных от тех, которые были объявлены когда объект стал нерасширяемым.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В строгом режиме при попытке добавить новые свойства в нерасширяемый объект возникает ошибка TypeError. В нестрогом режиме добавление свойства "x" игнорируется.</p>
+
+<pre class="brush: js example-bad">'use strict';
+
+var obj = {};
+Object.preventExtensions(obj);
+
+obj.x = 'foo';
+// TypeError: can't define property "x": "obj" is not extensible
+</pre>
+
+<p>В обеих, строгом и нестрогом режимах, вызов {{jsxref("Object.defineProperty()")}} вызывает исключнеие при добавлении нового свойства в нерасширяемый объект.</p>
+
+<pre class="brush: js example-bad">var obj = { };
+Object.preventExtensions(obj);
+
+Object.defineProperty(obj,
+ 'x', { value: "foo" }
+);
+// TypeError: can't define property "x": "obj" is not extensible
+</pre>
+
+<p>Чтобы исправить эту ошибку, необходимо удалить вызов {{jsxref("Object.preventExtensions()")}} полностью или переместить его в положение, чтобы сначала свойство добавлялось, а потом объект помечался как нерасширяемый. Конечно вы также можете удалить свойство, которое пытались добавить, если оно вам не нужно.</p>
+
+<pre class="brush: js example-good">'use strict';
+
+var obj = {};
+obj.x = 'foo'; // add property first and only then prevent extensions
+
+Object.preventExtensions(obj);</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/cant_delete/index.html b/files/ru/web/javascript/reference/errors/cant_delete/index.html
new file mode 100644
index 0000000000..88dd78272d
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_delete/index.html
@@ -0,0 +1,60 @@
+---
+title: >-
+ TypeError: property "x" is non-configurable and can't be deleted(свойство "x"
+ не настраивается и не может быть удалено)
+slug: Web/JavaScript/Reference/Errors/Cant_delete
+translation_of: Web/JavaScript/Reference/Errors/Cant_delete
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: вызов delete на 'x' не разрешен в строгом режиме (Edge)
+TypeError: свойство "x" не настраивается и не может быть удалено. (браузер Firefox)
+TypeError: не удается удалить свойство "x" из #&lt;Object&gt; (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}} in strict mode only.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p> </p>
+
+<p>Была сделана попытка удалить свойство, но это свойство не изменяется. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).</p>
+
+<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция возвращает false.</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Не настраиваемые свойства не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.</p>
+
+<pre class="brush: js example-bad">'use strict';
+var obj = Object.freeze({name: 'Elsa', score: 157});
+delete obj.score; // TypeError
+
+'use strict';
+var obj = {};
+Object.defineProperty(obj, 'foo', {value: 2, configurable: false});
+delete obj.foo; // TypeError
+
+'use strict';
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray.pop(); // TypeError
+</pre>
+
+<p>В JavaScript также встроено несколько настраиваемых свойств. Возможно, вы пытались удалить математическую константу.</p>
+
+<pre class="brush: js example-bad">'use strict';
+delete Math.PI; // TypeError</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete operator</a></li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..f164596b55
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cant_redefine_property/index.html
@@ -0,0 +1,49 @@
+---
+title: >-
+ 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
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: невозможно изменить свойство, недоступное для записи {x} (Edge)
+TypeError: невозможно переопределить не настраиваемое свойство "x" (Firefox)
+TypeError: не удается переопределить свойство: "x" (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки </h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>Была предпринята попытка переопределить свойство, но это свойство не настраивается. Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи). Обычно свойства объекта, созданного инициализатором объекта, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Не_настраиваемые_свойства_созданные_Object.defineProperty">Не настраиваемые свойства, созданные <code>Object.defineProperty</code></h3>
+
+<p>The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства, если они не указаны как настраиваемые.</p>
+
+<pre class="brush: js example-bad">var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar"});
+
+Object.defineProperty(obj, "foo", {value: "baz"});
+// TypeError: не удается переопределить не настраиваемое свойство "foo"
+</pre>
+
+<p>Вам нужно будет установить свойство "foo" в конфигурируемое, если вы собираетесь переопределить его позже в коде.</p>
+
+<pre class="brush: js example-good">var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar", configurable: true});
+Object.defineProperty(obj, "foo", {value: "baz", configurable: true});</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..cfbf6eb56c
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/cyclic_object_value/index.html
@@ -0,0 +1,70 @@
+---
+title: 'TypeError: cyclic object value(TypeError: циклическое значение объекта)'
+slug: Web/JavaScript/Reference/Errors/Cyclic_object_value
+tags:
+ - Ошибка
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox notranslate">TypeError: циклическое значение объекта (Firefox)
+TypeError: преобразование круговой структуры в JSON (Chrome и Opera)
+TypeError: циклическая ссылка в аргументе значения не поддерживается (Edge)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки?</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>The <a href="https://www.json.org/">JSON format</a> per se doesn't support object references (although an <a href="http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03">IETF draft exists</a>), hence {{jsxref("JSON.stringify()")}} doesn't try to solve them and fail accordingly.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В круговой структуре как эта</p>
+
+<pre class="brush: js notranslate">var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+</pre>
+
+<p>{{jsxref("JSON.stringify()")}} закончится неудачей</p>
+
+<pre class="brush: js example-bad notranslate">JSON.stringify(circularReference);
+// TypeError: циклическое значение объекта
+</pre>
+
+
+
+<p>Для сериализации циклических ссылок можно использовать библиотеку, которая их поддерживает (например, cycle.js) или самостоятельно реализовать решение, которое потребует поиска и замены (или удаления) циклических ссылок сериализуемыми значениями.</p>
+
+<p>Во фрагменте кода ниже показано, как найти и отфильтровать циклическую ссылку (что приводит к потере данных) с помощью параметра <code>replacer</code>{{jsxref("JSON.stringify()")}}:</p>
+
+
+
+<pre class="brush: js notranslate">const getCircularReplacer = () =&gt; {
+ const seen = new WeakSet();
+ return (key, value) =&gt; {
+ if (typeof value === "object" &amp;&amp; value !== null) {
+ if (seen.has(value)) {
+ return;
+ }
+ seen.add(value);
+ }
+ return value;
+ };
+};
+
+JSON.stringify(circularReference, getCircularReplacer());
+// {"otherData":123}
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("JSON.stringify")}}</li>
+ <li><a href="https://github.com/douglascrockford/JSON-js/blob/master/cycle.js">cycle.js</a> – вводит две функции, JSON.decycle и JSON.retrocycle, что дает возможность кодирования и декодирования циклических структур и групп обеспечения доступности баз данных в расширенный и обратно совместимый формат JSON.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/dead_object/index.html b/files/ru/web/javascript/reference/errors/dead_object/index.html
new file mode 100644
index 0000000000..de666b01d8
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/dead_object/index.html
@@ -0,0 +1,48 @@
+---
+title: >-
+ TypeError: can't access dead object (Тип ошибки:не удается получить доступ к
+ мертвому объекту)
+slug: Web/JavaScript/Reference/Errors/Dead_object
+translation_of: Web/JavaScript/Reference/Errors/Dead_object
+---
+<div>{{JSSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: can't access dead object
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>Для улучшения использования памяти и предотвращения утечек памяти Firefox запрещает надстройкам сохранять строгие ссылки на объекты DOM после уничтожения родительского документа. Мертвый объект содержит сильную ссылку (keep alive) на элемент DOM, который сохраняется даже после того, как он был уничтожен в DOM. Чтобы избежать этих проблем, ссылки на узлы DOM во внешнем документе должны храниться в объекте, который относится к этому документу, и очищаться при выгрузке документа или храниться как слабые ссылки.</p>
+
+<h2 id="Проверка_если_объект_мертв">Проверка, если объект мертв</h2>
+
+<p><a href="/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a> предлагает <code>isDeadWrapper()</code>метод, который может использовать привилегированный код. <br>
+  </p>
+
+<pre class="brush: js">if (Components.utils.isDeadWrapper(window)) {
+ // dead
+}</pre>
+
+<p>Непривилегированный код не имеет доступа к Component.utils и мог бы просто быть в состоянии поймать исключение.</p>
+
+<pre class="brush: js">try {
+ String(window);
+}
+catch (e) {
+ console.log("window is likely dead");
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://blog.mozilla.org/addons/2012/09/12/what-does-cant-access-dead-object-mean/">What does “can’t access dead object” mean?</a>(Что значит “не могу получить доступ к мертвому объекту”?)</li>
+ <li><a href="/en-US/docs/Extensions/Common_causes_of_memory_leaks_in_extensions">Common causes of memory leaks in extensions</a>(Распространенные причины утечек памяти в расширениях)</li>
+ <li><a href="/en-US/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a></li>
+ <li><a href="/en-US/docs/Mozilla/Zombie_compartments">Zombie Compartments</a></li>
+</ul>
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
new file mode 100644
index 0000000000..de2b1bbce1
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/delete_in_strict_mode/index.html
@@ -0,0 +1,68 @@
+---
+title: >-
+ SyntaxError: applying the 'delete' operator to an unqualified name is
+ deprecated (SyntaxError: применение оператора 'delete' к неполному имени не
+ рекомендуется)
+slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode
+translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: вызов delete on expression запрещен в строгом режиме в (Edge)
+SyntaxError: применение оператора 'delete' к неполному имени не рекомендуется в (Firefox)
+SyntaxError: удаление неполного идентификатора в строгом режиме запрещенно в (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p>
+
+<h2 id="В_чем_ошибка">В чем ошибка?</h2>
+
+<p>Обычные переменные в JavaScript нельзя удалить с помощью оператора <code>delete</code>. В строгом режиме попытка удалить переменную вызовет ошибку и не будет разрешена.</p>
+
+<p>Оператор <code>delete </code>может удалять только свойства объекта. Свойства объекта "квалифицированы", если они конфигурируемы.</p>
+
+<p>В отличие от общепринятого мнения, оператор <code>delete </code>не имеет ничего общего с непосредственным освобождением памяти. Управление памятью осуществляется косвенным образом через нарушение ссылок см.<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management">memory management</a> . В разделе управление памятью и страницы оператора delete для более подробной информации.</p>
+
+<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде операция просто возвращает false.</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Попытка удалить простую переменную не работает в JavaScript и выдает ошибку в строгом режиме:</p>
+
+<pre class="brush: js example-bad">'use strict';
+
+var x;
+
+// ...
+
+delete x;
+
+// SyntaxError: применение оператора 'delete' к неполному имени является устаревшим
+</pre>
+
+<p>Чтобы освободить содержимое переменной, задайте для нее значение {{jsxref("null")}}:</p>
+
+<pre class="brush: js example-good">'use strict';
+
+var x;
+
+// ...
+
+x = null;
+
+// X может быть собран "мусор"
+</pre>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Memory_Management">Memory management</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Cant_delete">TypeError: property "x" is non-configurable and can't be deleted</a>(TypeError: свойство "x" не настраивается и не может быть удалено)</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html b/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html
new file mode 100644
index 0000000000..c42695a5aa
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html
@@ -0,0 +1,76 @@
+---
+title: 'Ошибка Ссылки: устаревший вызывающий объект или использование аргументов'
+slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage
+tags:
+ - JavaScript
+ - Ошибки
+ - Строгий режим
+ - предупреждение
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Messageсообщение">Message(сообщение)</h2>
+
+<pre class="syntaxbox">TypeError(Ошибка Типа): 'arguments', 'callee' и 'caller' являются ограниченными свойствами функции и не могут быть доступны в этом контексте (EDGE)
+Warning: ReferenceError(Ошибка Ссылки): deprecated caller usage (устаревшие использование вызывающего абонента Firefox)
+Warning: ReferenceError(Ошибка Ссылки): deprecated arguments usage (использование устаревших аргументов Firefox)
+TypeError(Ошибка Типа): 'callee' и 'caller' (не может быть доступен в строгом режиме safari)
+</pre>
+
+<h2 id="Error_type_Тип_ошибки">Error type (Тип ошибки)</h2>
+
+<p>Предупреждение строгого режима, при котором произошла операция {{jsxref("ReferenceError")}} выполнение JavaScript не будет остановлено.</p>
+
+<h2 id="What_went_wrongЧто_пошло_не_так">What went wrong?(Что пошло не так?)</h2>
+
+<p>В строгом режиме используются свойства {{jsxref("Function.caller")}} или {{jsxref("Function.arguments")}} которых не должны быть. Они являются устаревшими, потому что они утечка вызывающей функции, являются нестандартными, и их трудно оптимизировать, и это потенциально опасный для производительности компонент. </p>
+
+<h2 id="ExamplesПримеры">Examples(Примеры)</h2>
+
+<h3 id="Устаревшая_function.caller_или_arguments.callee.caller">Устаревшая <code>function.caller</code> или <code>arguments.callee.caller</code></h3>
+
+<p>{{jsxref("Function.caller")}} и <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code> являются устаревшими (Дополнительные сведения см. в справочных статьях).</p>
+
+<pre class="brush: js example-bad">'use strict';
+
+function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+myFunc();
+// Warning: ReferenceError: устаревшее использование вызывающего абонента
+// "функция была вызвана сверху!"</pre>
+
+<h3 id="Function.arguments"><code>Function.arguments</code></h3>
+
+<p>{{jsxref("Function.arguments")}} является устаревшим (Дополнительные сведения см. в справочной статье).</p>
+
+<pre class="brush: js example-bad">'use strict';
+
+function f(n) { g(n - 1); }
+
+function g(n) {
+ console.log('before: ' + g.arguments[0]);
+ if (n &gt; 0) { f(n); }
+ console.log('after: ' + g.arguments[0]);
+}
+
+f(2);
+
+console.log('returned: ' + g.arguments);
+// Warning: ReferenceError: использование устаревших аргументов
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">Deprecated and obsolete features</a> (Устаревшие функции)</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">Strict mode</a> (строгий режим)</li>
+ <li>{{jsxref("Function.arguments")}}</li>
+ <li>{{jsxref("Function.caller")}} и <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code></li>
+</ul>
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
new file mode 100644
index 0000000000..40dc8dc913
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_expression_closures/index.html
@@ -0,0 +1,76 @@
+---
+title: 'Предупреждение: затворы выражения являются устаревшими'
+slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures
+tags:
+ - JavaScript
+ - Warning
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Warning: замыкания выражений являются устаревшими
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждающий. Выполнение скрипта не будет остановлено.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Нестандартный синтаксис закрытия выражений (сокращенный синтаксис функций) устарел и больше не должен использоваться. Этот синтаксис будет полностью удален в Этот синтаксис будет полностью удален в {{bug(1083458)}} а скрипты с его помощью {{jsxref("SyntaxError")}} затем.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильтный_синтаксис">Неправильтный синтаксис</h3>
+
+<p>Замыкания выражений пропускают фигурные скобки или операторы return из объявлений функций или определений методов в объектах.</p>
+
+<pre class="brush: js example-bad">var x = function() 1;
+
+var obj = {
+ count: function() 1
+};
+</pre>
+
+<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3>
+
+<p>To convert the non-standard expression closures syntax to standard ECMAScript syntax, you can add curly braces and return statements.</p>
+
+<pre class="brush: js example-good">var x = function() { return 1; }
+
+var obj = {
+ count: function() { return 1; }
+};
+</pre>
+
+<h3 id="Стандартный_синтаксис_с_использованием_функций_со_стрелками">Стандартный синтаксис с использованием функций со стрелками:</h3>
+
+<pre class="brush: js example-good">var x = () =&gt; 1;</pre>
+
+<h3 id="Стандартный_синтаксис_с_использованием_сокращенного_синтаксиса_метода">Стандартный синтаксис с использованием сокращенного синтаксиса метода</h3>
+
+<p>Замыкания выражений также можно найти с помощью getter'а и setter'а, например:</p>
+
+<pre class="brush: js example-bad">var obj = {
+ get x() 1,
+ set x(v) this.v = v
+};
+</pre>
+
+<p>With ES2015 <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a>, это может быть конвертированно в:</p>
+
+<pre class="brush: js example-good">var obj = {
+ get x() { return 1 },
+ set x(v) { this.v = v }
+};
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Expression_closures">Expression closures</a> (Закрытие выражений)</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Arrow functions</a> (Стрелочные функции)</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">Method definitions</a> (Определение метода)</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/deprecated_octal/index.html b/files/ru/web/javascript/reference/errors/deprecated_octal/index.html
new file mode 100644
index 0000000000..b397c5adb3
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_octal/index.html
@@ -0,0 +1,70 @@
+---
+title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated'
+slug: Web/JavaScript/Reference/Errors/Deprecated_octal
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<p> </p>
+
+<pre>SyntaxError: Octal numeric literals and escape characters not allowed in strict mode (Edge)
+SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated;
+for octal literals use the "0o" prefix instead</pre>
+
+<p>Перевод:</p>
+
+<pre class="syntaxbox">Ошибка синтаксиса: Восьмеричные числовые литералы и escape-последовательности, не разрешены в строгом режиме (Edge)
+Ошибка синтаксиса: восьмеричные литералы с префиксом "0", и восьмеричные escape-последовательности считаются устаревшими;
+для восьмеричных литералов используйте префикс "0o"
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p>
+
+<h2 id="Что_пошло_не_так"><strong>Что пошло не так?</strong></h2>
+
+<p>Восьмеричные литералы и восьмеричные escape-последовательности являются устаревшими и будут выдавать {{jsxref("SyntaxError")}} в строгом режиме. С ECMAScript2015 стандартным синтаксисом является использование ведующего нуля с последующеей заглавной или строчной латинской буквой "O" (<code>0o</code> bили <code>0O</code>)</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="0-prefixed_octal_literals_(восьмеричные_литералы_с_префиксом_0)">"0"-prefixed octal literals (восьмеричные литералы с префиксом "0")<br>
+  </h3>
+
+<pre class="brush: js example-bad">"use strict";
+
+03;
+
+// Ошибка синтаксиса: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
+</pre>
+
+<h3 id="Octal_escape_sequences_(Восьмеричные_escape-последовательности)">Octal escape sequences (Восьмеричные escape-последовательности)</h3>
+
+<pre class="brush: js example-bad">"use strict";
+
+"\251";
+
+// SyntaxError: восьмеричные литералы с префиксом "0" и восьмеричные escape-последовательности считаются устаревшими
+</pre>
+
+<h3 id="Valid_octal_numbers_(Допустимые_восьмеричные_числа)">Valid octal numbers (Допустимые восьмеричные числа)</h3>
+
+<p>Используйте ноль с последующей латинской буквой "o" или "O".</p>
+
+<pre class="brush: js example-good">0o3;
+</pre>
+
+<p>Вместо escape-последовательностей можно использовать шестнадцатеричные escape-последовательности:</p>
+
+<pre class="brush: js"><span style="font-size: 1rem; letter-spacing: -0.00278rem;">'\xA9';</span></pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">Lexical grammar</a>(Лексическая грамматика)</li>
+ <li>
+ <p><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Bad_octal">Warning: 08/09 is not a legal ECMA-262 octal constant</a>(Предупреждение: 08/09 нет законной восьмиштырьковой константы ECMA-262)</p>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html b/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html
new file mode 100644
index 0000000000..8d15ecea2f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_source_map_pragma/index.html
@@ -0,0 +1,113 @@
+---
+title: >-
+ SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //#
+ instead
+slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma
+tags:
+ - Explorer
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+ - карты кода
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
+
+Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждение о том, что произошла ошибка {{jsxref("SyntaxError")}}. Выполнение скрипта не будет остановлено.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Есть устаревший синтаксис карты кода в исходном коде JavaScript.</p>
+
+<p>Файлы JavaScript нередко объединяются и сокращаются, чтобы доставлять их с сервера более эффективно. С <a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">картой кода</a>, отладчик может сопоставить код выполнения для исходных файлов.</p>
+
+<p>Спецификация карты кода меняет синтаксис из-за конфликта с IE всякий раз, когда он был найден в странице после <code>//@cc_on</code> было интерпретировано для включения условной компиляции в IE JScript engine. <a href="https://msdn.microsoft.com/en-us/library/8ka90k2e%28v=vs.94%29.aspx">Комментарий условной компиляции</a> для IE малоизвестен, и это разбивает карты кода <a href="https://bugs.jquery.com/ticket/13274">jQuery</a> и других библиотек.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Устаревший_синтаксис">Устаревший синтаксис</h3>
+
+<p>Синтаксис с использованием знака "@" устарел.</p>
+
+<pre class="brush: js example-bad">//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+</pre>
+
+<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3>
+
+<p>Используйте знак "#".</p>
+
+<pre class="brush: js example-good">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre>
+
+<p>Или, в качестве альтернативы, вы можете установить заголовок для Вашего JavaScript-файла чтобы избежать комментирования:</p>
+
+<pre class="brush: js example-good">X-SourceMap: /path/to/file.js.map</pre>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Характеристика</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Новый синтаксис</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop(24) }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Характеристика</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Новый синтаксис</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{ CompatGeckoMobile(24) }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="sect1"> </h2>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Tools/Debugger/How_to/Use_a_source_map">Как использовать карты кода – документация Firefox Tools</a></li>
+ <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Введение в карты кода – HTML5 rocks</a></li>
+</ul>
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
new file mode 100644
index 0000000000..fa10558782
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_string_generics/index.html
@@ -0,0 +1,103 @@
+---
+title: 'Warning: String.x is deprecated; use String.prototype.x instead'
+slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics
+tags:
+ - JavaScript
+ - предупреждение
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<div>Поддержка строковых обобщенных методов прекращена с версии Firefox 68. Более старые версии предупреждают об использовании данных методов следующим образом:</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Warning: String.charAt is deprecated; use String.prototype.charAt instead
+Warning: String.charCodeAt is deprecated; use String.prototype.charCodeAt instead
+Warning: String.concat is deprecated; use String.prototype.concat instead
+Warning: String.contains is deprecated; use String.prototype.contains instead
+Warning: String.endsWith is deprecated; use String.prototype.endsWith instead
+Warning: String.includes is deprecated; use String.prototype.includes instead
+Warning: String.indexOf is deprecated; use String.prototype.indexOf instead
+Warning: String.lastIndexOf is deprecated; use String.prototype.lastIndexOf instead
+Warning: String.localeCompare is deprecated; use String.prototype.localeCompare instead
+Warning: String.match is deprecated; use String.prototype.match instead
+Warning: String.normalize is deprecated; use String.prototype.normalize instead
+Warning: String.replace is deprecated; use String.prototype.replace instead
+Warning: String.search is deprecated; use String.prototype.search instead
+Warning: String.slice is deprecated; use String.prototype.slice instead
+Warning: String.split is deprecated; use String.prototype.split instead
+Warning: String.startsWith is deprecated; use String.prototype.startsWith instead
+Warning: String.substr is deprecated; use String.prototype.substr instead
+Warning: String.substring is deprecated; use String.prototype.substring instead
+Warning: String.toLocaleLowerCase is deprecated; use String.prototype.toLocaleLowerCase instead
+Warning: String.toLocaleUpperCase is deprecated; use String.prototype.toLocaleUpperCase instead
+Warning: String.toLowerCase is deprecated; use String.prototype.toLowerCase instead
+Warning: String.toUpperCase is deprecated; use String.prototype.toUpperCase instead
+Warning: String.trim is deprecated; use String.prototype.trim instead
+Warning: String.trimLeft is deprecated; use String.prototype.trimLeft instead
+Warning: String.trimRight is deprecated; use String.prototype.trimRight instead
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждение. Исполнение кода JavaScript не будет остановлено.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Нестандартные обобщенные методы {{jsxref("String")}} являются устаревшими, поддержка в Firefox прекращена, начиная с версии 68. Строковые обобщенные методы предоставляют возможность применять методы экземпляров <code>String</code> к любым объектам.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Устаревший_синтаксис">Устаревший синтаксис</h3>
+
+<pre class="brush: js example-bad">var num = 15;
+String.replace(num, /5/, '2');</pre>
+
+<h3 id="Стандартный_синтаксис">Стандартный синтаксис</h3>
+
+<pre class="brush: js example-good">var num = 15;
+String(num).replace(/5/, '2');
+</pre>
+
+<h2 id="Прослойка">Прослойка</h2>
+
+<p>Ниже приведен код прослойки, с помощью которой можно добавить поддержку обобщенных методов String в другие браузеры:</p>
+
+<pre class="brush: js">/*globals define*/
+// Предполагаем, что все требуемые методы экземпляров String уже присутствуют
+// (если нет, для них так же можно использовать полифиллы)
+(function() {
+ 'use strict';
+
+ var i,
+ // Мы могли построить массив методов следующим образом, однако метод
+ // getOwnPropertyNames() нельзя реализовать на JavaScript:
+ // Object.getOwnPropertyNames(String).filter(function(methodName) {
+ // return typeof String[methodName] === 'function';
+ // });
+ methods = [
+ 'contains', 'substring', 'toLowerCase', 'toUpperCase', 'charAt',
+ 'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith',
+ 'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase', 'normalize',
+ 'toLocaleUpperCase', 'localeCompare', 'match', 'search', 'slice',
+ 'replace', 'split', 'substr', 'concat', 'localeCompare'
+ ],
+ methodCount = methods.length,
+ assignStringGeneric = function(methodName) {
+ var method = String.prototype[methodName];
+ String[methodName] = function(arg1) {
+ return method.apply(arg1, Array.prototype.slice.call(arguments, 1));
+ };
+ };
+
+ for (i = 0; i &lt; methodCount; i++) {
+ assignStringGeneric(methods[i]);
+ }
+}());</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html
new file mode 100644
index 0000000000..e5d4eb3d00
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/deprecated_tolocaleformat/index.html
@@ -0,0 +1,90 @@
+---
+title: 'Warning: Date.prototype.toLocaleFormat (Является устаревшим)'
+slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat
+translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Внимание: Date.prototype.toLocaleFormat устарело; рассмотрите возможность использования Intl.DateTimeFormat взамен.
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>предупреждающий. Выполнение скрипта не будет остановлено.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?  </h2>
+
+<p>Нестандартный {{jsxref("Date.prototype.toLocaleFormat")}} метод, устарел и больше не должен использоваться. Он использует строку формата в том же формате, ожидаемом<br>
+ <code>strftime()</code> функция в C. функция больше не доступна в Firefox 58+.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильный_синтаксис">Неправильный синтаксис</h3>
+
+<p>В {{jsxref("Date.prototype.toLocaleFormat")}} метод устарел и будет удален (поддержка кроссбраузерных браузеров, доступна только в Firefox).</p>
+
+<pre class="brush: js example-bad">var today = new Date();
+var date = today.toLocaleFormat('%A, %e. %B %Y');
+
+console.log(date);
+// In German locale
+// "Freitag, 10. März 2017"</pre>
+
+<h3 id="Альтернативный_стандартный_синтаксис_с_использованием_ECMAScript_IntlAPI">Альтернативный стандартный синтаксис с использованием ECMAScript IntlAPI</h3>
+
+<p>Стандарт ECMA-402 (ECMAScript Intl API) определяет стандартные объекты и методы, которые позволяют форматировать дату и время с учетом языка (доступно в Chrome 24+, Firefox 29+, IE11+, Safari10+).</p>
+
+<p>You can now either use the {{jsxref("Date.prototype.toLocaleDateString")}} method if you just want to format one date.</p>
+
+<pre class="brush: js example-good">var today = new Date();
+var options = { weekday: 'long', year: 'numeric',
+ month: 'long', day: 'numeric' };
+var date = today.toLocaleDateString('de-DE', options);
+
+console.log(date);
+// "Freitag, 10. März 2017"
+</pre>
+
+<p> </p>
+
+<p>Или, вы можете использовать {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} объект, который позволяет кэшировать объект с большинством вычислений, выполненных таким образом, чтобы Форматирование было быстрым. Это полезно, если у вас есть цикл дат для форматирования.</p>
+
+<pre class="brush: js example-good">var options = { weekday: 'long', year: 'numeric',
+ month: 'long', day: 'numeric' };
+var dateFormatter = new Intl.DateTimeFormat('de-DE', options)
+
+var dates = [Date.UTC(2012, 11, 20, 3, 0, 0),
+ Date.UTC(2014, 04, 12, 8, 0, 0)];
+
+dates.forEach(date =&gt; console.log(dateFormatter.format(date)));
+
+// "Donnerstag, 20. Dezember 2012"
+// "Montag, 12. Mai 2014"
+</pre>
+
+<h3 id="Альтернативный_стандартный_ситнаксис_с_использованием_Дата_методов">Альтернативный стандартный ситнаксис с использованием Дата методов</h3>
+
+<p>{{jsxref("Date")}} объект предлагает несколько методов для построения пользовательской строки даты.</p>
+
+<pre class="brush: js example-bad">(new Date()).toLocaleFormat("%Y%m%d");
+// "20170310"
+</pre>
+
+<p>Может быть преобразован в:</p>
+
+<pre class="brush: js example-good">let now = new Date();
+let date = now.getFullYear() * 10000 +
+ (now.getMonth() + 1) * 100 + now.getDate();
+
+console.log(date);
+// "20170310"</pre>
+
+<h2 id="Смотрите_также">Смотрите также </h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString")}}</li>
+ <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..4219e825ba
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/equal_as_assign/index.html
@@ -0,0 +1,51 @@
+---
+title: >-
+ SyntaxError: test for equality (==) mistyped as assignment (=)?(тест на
+ равенство (==) опечатка как присваивание (=)?)
+slug: Web/JavaScript/Reference/Errors/Equal_as_assign
+translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">Warning: SyntaxError: тест на равенство (==) опечатка как присваивание (=)?
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>(Только в Firefox) {{jsxref("SyntaxError")}} предупреждение, в котором сообщается, только если <code>javascript.options.strict</code> предпочтение установлено в<code>true</code>.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Было присвоение ( = ), когда вы обычно ожидали тест на присвоение (==). Чтобы помочь отладке, JavaScript (с включенными строгими предупреждениями) предупреждает об этом шаблоне.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Задание_в_условных_выражениях">Задание в условных выражениях</h3>
+
+<p>Рекомендуется не использовать простые назначения в условном выражении (например, if...else), поскольку при просмотре кода назначение можно спутать с равенством. Например, не используйте следующий код:</p>
+
+<pre class="brush: js example-bad">if (x = y) {
+ // делать правильные вещи
+}
+</pre>
+
+<p>Если необходимо использовать присваивание в условном выражении, то обычно вокруг него ставят дополнительные скобки. Например:</p>
+
+<pre class="brush: js">if ((x = y)) {
+ // делать правильные вещи
+}</pre>
+
+<p>В противном случае вы, вероятно, хотели использовать оператор сравнения (например, = = или ===):</p>
+
+<pre class="brush: js">if (x == y) {
+ // делать правильные вещи
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">Comparison operators</a></li>
+</ul>
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
new file mode 100644
index 0000000000..861f44e1e9
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html
@@ -0,0 +1,163 @@
+---
+title: 'Предупреждение: циклы JavaScript 1.6 for-each-in устарели'
+slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated
+tags:
+ - Устаревшие циклы
+translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Предупреждение: циклы JavaScript 1.6 for-each-in устарели; вместо них рекомендуется использовать ES6 for-of
+</pre>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>JavaScript 1.6's {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} оператор устарел и будет удален в ближайшем будущем.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Итерация_обьекта">Итерация обьекта</h3>
+
+<p>{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по указанным значениям объектов.</p>
+
+<h4 id="Устаревший_синтаксис">Устаревший синтаксис</h4>
+
+<pre class="brush: js example-bad">var object = { a: 10, b: 20 };
+
+for each (var x in object) {
+ console.log(x); // 10
+ // 20
+}
+</pre>
+
+<h4 id="Альтернативный_стандартный_синтаксис">Альтернативный стандартный синтаксис</h4>
+
+<p>Теперь вы можете использовать стандартный {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:</p>
+
+<pre class="brush: js example-good">var object = { a: 10, b: 20 };
+
+for (var key in object) {
+ var x = object[key];
+ console.log(x); // 10
+ // 20
+}
+</pre>
+
+<p>Or, using {{jsxref("Statements/for...of", "for...of")}} (ES2015) and {{jsxref("Object.values")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:</p>
+
+<pre class="brush: js example-good">var object = { a: 10, b: 20 };
+
+for (var x of Object.values(object)) {
+ console.log(x); // 10
+ // 20
+}
+</pre>
+
+<h3 id="Итерация_массива">Итерация массива</h3>
+
+<p>{{jsxref("Statements/for_each...in", "for each...in")}} используется для итерации по заданным элементам массива.</p>
+
+<h4 id="Устаревший_синтаксис_2">Устаревший синтаксис</h4>
+
+<pre class="brush: js example-bad">var array = [10, 20, 30];
+
+for each (var x in array) {
+ console.log(x); // 10
+ // 20
+ // 30
+}
+</pre>
+
+<h4 id="Альтернативный_стандартный_синтаксис_2">Альтернативный стандартный синтаксис</h4>
+
+<p>Это теперь возможно с {{jsxref("Statements/for...of", "for...of")}} (ES2015) петли также.</p>
+
+<pre class="brush: js example-good">var array = [10, 20, 30];
+
+for (var x of array) {
+ console.log(x); // 10
+ // 20
+ // 30
+}
+</pre>
+
+<h3 id="Итерация_по_нулевому_массиву">Итерация по нулевому массиву</h3>
+
+<p>{{jsxref("Statements/for_each...in", "for each...in")}} ничего не делает, если указанное значение <code>null</code> или <code>undefined</code>, но {{jsxref("Statements/for...of", "for...of")}} выдаст исключение в этих случаях.</p>
+
+<h4 id="Непрвильный_синтаксис">Непрвильный синтаксис</h4>
+
+<pre class="brush: js example-bad">function func(array) {
+ for each (var x in array) {
+ console.log(x);
+ }
+}
+func([10, 20]); // 10
+ // 20
+func(null); // prints nothing
+func(undefined); // prints nothing
+</pre>
+
+<h4 id="Альтернативный_стандартный_синтаксис_3">Альтернативный стандартный синтаксис</h4>
+
+<p>Переписать  {{jsxref("Statements/for_each...in", "for each...in")}} операторы, чтобы значения могли быть <code>null</code> или <code>undefined</code> с{{jsxref("Statements/for...of", "for...of")}} также необходимо охранять {{jsxref("Statements/for...of", "for...of")}}.</p>
+
+<pre class="brush: js example-good">function func(array) {
+ if (array) {
+ for (var x of array) {
+ console.log(x);
+ }
+ }
+}
+func([10, 20]); // 10
+ // 20
+func(null); // prints nothing
+func(undefined); // prints nothing
+</pre>
+
+<h3 id="Итерация_по_паре_ключ-значение_объекта">Итерация по паре ключ-значение объекта</h3>
+
+<h4 id="Неправильный_синтаксис">Неправильный синтаксис</h4>
+
+<p>Существует устаревшая идиома для итерации по парам ключ-значение указанного объекта с помощью {{jsxref("Statements/for_each...in", "for each...in")}} и осужденный {{jsxref("Iterator")}} обьект.</p>
+
+<pre class="brush: js example-bad">var object = { a: 10, b: 20 };
+
+for each (var [key, value] in Iterator(object)) {
+ console.log(key, value); // "a", 10
+ // "b", 20
+}
+</pre>
+
+<h4 id="Альтернативный_стандартный_ситнтаксис">Альтернативный стандартный ситнтаксис</h4>
+
+<p>Теперь можно использовать стандартный цикл {{jsxref("Statements/for...in", "for...in")}} цикл для итерации по указанным ключам объекта и получения каждого значения внутри цикла:</p>
+
+<pre class="brush: js example-good">var object = { a: 10, b: 20 };
+
+for (var key in object) {
+ var value = object[key];
+ console.log(key, value); // "a", 10
+ // "b", 20
+}
+</pre>
+
+<p>Или, использовать {{jsxref("Statements/for...of", "for...of")}} (ES2015) и {{jsxref("Object.entries")}} (ES2017), можно получить массив указанных значений объекта и выполнить итерацию по массиву следующим образом:</p>
+
+<pre class="brush: js example-good">var object = { a: 10, b: 20 };
+
+for (var [key, value] of Object.entries(object)) {
+ console.log(key, value); // "a", 10
+ // "b", 20
+}
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}}</li>
+ <li>{{jsxref("Object.values")}}</li>
+ <li>{{jsxref("Object.entries")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/getter_only/index.html b/files/ru/web/javascript/reference/errors/getter_only/index.html
new file mode 100644
index 0000000000..9dc64f048f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/getter_only/index.html
@@ -0,0 +1,81 @@
+---
+title: >-
+ TypeError: setting getter-only property "x"(установка свойства только для
+ геттера "x")
+slug: Web/JavaScript/Reference/Errors/Getter_only
+translation_of: Web/JavaScript/Reference/Errors/Getter_only
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
+TypeError: установка свойства только для геттера "x" (Firefox)
+TypeError: не удается установить свойство "prop" из #&lt;Object&gt;, который имеет только геттер (Chrome)
+
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}} только в строгом режиме.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Предпринята попытка задать новое значение свойству, для которого указан только геттер. . Пока это молча будет проигнорировано в non-strict режиме, оно бросит {{jsxref("TypeError")}} в <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В приведенном ниже примере показано, как установить getter для свойства. Он не задает сеттер, так TypeError выдается при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в {{jsxref("Object.defineProperty()")}} странице.</p>
+
+<pre class="brush: js example-bad">"use strict";
+
+function Archiver() {
+ var temperature = null;
+ Object.defineProperty(this, 'temperature', {
+ get: function() {
+ console.log('get!');
+ return temperature;
+ }
+ });
+}
+
+var arc = new Archiver();
+arc.temperature; // 'get!'
+
+arc.temperature = 30;
+// TypeError: setting getter-only property "temperature"</pre>
+
+<p>Чтобы устранить эту ошибку, необходимо либо удалить строку 16, в которой предпринята попытка задать свойство temperature, либо реализовать для нее сеттер, например, как показано ниже:</p>
+
+<pre class="brush: js example-good highlight[12]">"use strict";
+
+function Archiver() {
+ var temperature = null;
+ var archive = [];
+
+ Object.defineProperty(this, 'temperature', {
+ get: function() {
+ console.log('get!');
+ return temperature;
+ },
+ set: function(value) {
+ temperature = value;
+ archive.push({ val: temperature });
+ }
+ });
+
+ this.getArchive = function() { return archive; };
+}
+
+var arc = new Archiver();
+arc.temperature; // 'get!'
+arc.temperature = 11;
+arc.temperature = 13;
+arc.getArchive(); // [{ val: 11 }, { val: 13 }]</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.defineProperties()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..9a0108616e
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/identifier_after_number/index.html
@@ -0,0 +1,58 @@
+---
+title: >-
+ SyntaxError: identifier starts immediately after numeric literal(идентификатор
+ начинается сразу после числового литерала)
+slug: Web/JavaScript/Reference/Errors/Identifier_after_number
+translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number
+---
+<div>{{JSSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: непредвиденный идентификатор после числового литерала (Edge)
+SyntaxError: идентификатор запускается сразу после числового литерала (Firefox)
+SyntaxError: непредвиденное число (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p> </p>
+
+<p>Имена переменных, называемых {{Glossary("Identifier", "identifiers")}} соответствуют определенным правилам, которых должен придерживаться ваш код!</p>
+
+<p>Идентификатор JavaScript должен начинаться с буквы, символа подчеркивания ( _ ) или знака доллара ($). Они не могут начать с цифры! Только последующие символы могут быть цифрами (0-9).</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Имена_переменных_начинающиеся_с_числовых_литералов">Имена переменных, начинающиеся с числовых литералов</h3>
+
+<p>Имена переменных не могут начинаться с чисел в JavaScript. Следующие сбои:</p>
+
+<pre class="brush: js example-bad">var 1life = 'foo';
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+
+var foo = 1life;
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+
+alert(1.foo);
+// SyntaxError:  идентификатор начинается сразу после числового литерала
+</pre>
+
+<p>Вы можете переназвать вашу перемменную чтобы избежать ведущего числа.</p>
+
+<pre class="brush: js example-good">var life1 = 'foo';
+var foo = life1;
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables">Variables</a> in the <a href="/en-US/docs/Web/JavaScript/Guide">JavaScript Guide</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/illegal_character/index.html b/files/ru/web/javascript/reference/errors/illegal_character/index.html
new file mode 100644
index 0000000000..84a67e254f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/illegal_character/index.html
@@ -0,0 +1,70 @@
+---
+title: 'SyntaxError: illegal character'
+slug: Web/JavaScript/Reference/Errors/Illegal_character
+translation_of: Web/JavaScript/Reference/Errors/Illegal_character
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Присутсвует недопустимый или неожиданный знак, который не принадлежит данной позиции в коде. Используйте редактор, поддерживающий подсветку синтаксиса, и внимательно проверьте ваш код на предмет таких несовпадений, как знак минус (<code> - </code>) вместо тире  (<code> – </code>) или простые кавычки (<code> " </code>) вместо нестандратных знаков цитирования (<code> “ </code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Несоответсвующие_символы">Несоответсвующие символы</h3>
+
+<p>Некоторые символы выглядят одинаково, но становтся причиной того, что анализатор не выполняет итерпретацию вашего кода.</p>
+
+<pre class="brush: js example-bad">“This looks like a string”;
+// SyntaxError: illegal character
+
+42 – 13;
+// SyntaxError: illegal character
+</pre>
+
+<p>Так должно работать:</p>
+
+<pre class="brush: js example-good">"This is actually a string";
+
+42 - 13;
+</pre>
+
+<h3 id="Пропущенные_символы">Пропущенные символы</h3>
+
+<p>Это просто <span class="st">—</span> пропустить символ здесь или там.</p>
+
+<pre class="brush: js example-bad">var colors = ['#000', #333', '#666'];
+// SyntaxError: illegal character
+</pre>
+
+<p>Добавляем пропущенную кавычку для <code><strong>'</strong>#333'</code> .</p>
+
+<pre class="brush: js example-good">var colors = ['#000', '#333', '#666'];</pre>
+
+<h3 id="Скрытые_символы">Скрытые символы</h3>
+
+<p>Подчас копирования кода из внешнего источника могут встречаться недействительные символы. Будьте внимательны!</p>
+
+<pre class="brush: js example-bad">var foo = 'bar';​
+// SyntaxError: illegal character
+</pre>
+
+<p>Если проверить этот код в редакторе вроде Vim, вы можете увидеть, что в коде присутсвтует символ, именуемый <a href="https://en.wikipedia.org/wiki/Zero-width_space">нулевой пробел (zero-width space (ZWSP) (U+200B))</a>.</p>
+
+<pre class="brush: js">var foo = 'bar';​&lt;200b&gt;</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+</ul>
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
new file mode 100644
index 0000000000..a61a8d5f41
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/in_operator_no_object/index.html
@@ -0,0 +1,71 @@
+---
+title: >-
+ 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
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: недопустимый операнд в "in" (edge)
+TypeError: правая часть 'in' должна быть объектом, есть 'x' (Firefox)
+TypeError: невозможно использовать оператор 'in' для поиска 'x' в 'y' (Firefox, Chrome)
+
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Оператор in можно использовать только для проверки наличия свойства в объекте. Вы не можете искать в строках, числах или других примитивных типах.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Поиск_в_строках">Поиск в строках</h3>
+
+<p>В отличие от других языков программирования (например, Python), поиск в строках с помощью оператора in невозможен.</p>
+
+<pre class="brush: js example-bad">"Hello" in "Hello World";
+// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'</pre>
+
+<p>Вместо этого вам нужно будет использовать{{jsxref("String.prototype.indexOf()")}}или примеры</p>
+
+<pre class="brush: js example-good">"Hello World".indexOf("Hello") !== -1;
+// true</pre>
+
+<h3 id="Операнд_не_может_бытьnull_или_undefined">Операнд не может быть<code>null</code> или <code>undefined</code></h3>
+
+<p>Убедитесь, что объект, который вы осматриваете, на самом деле не {{jsxref("null")}} или {{jsxref("undefined")}}.</p>
+
+<pre class="brush: js example-bad">var foo = null;
+"bar" in foo;
+// TypeError: не удается использовать оператор 'in' для поиска 'bar' в 'foo' (Chrome)
+// TypeError: правая часть 'in' должна быть объектом, полученным null (Firefox)
+</pre>
+
+<p>Оператор in всегда ожидает объект.</p>
+
+<pre class="brush: js example-good">var foo = { baz: "bar" };
+"bar" in foo; // false
+
+"PI" in Math; // true
+"pi" in Math; // false
+</pre>
+
+<h3 id="Поиск_в_Массивах">Поиск в Массивах</h3>
+
+<p>Будьте осторожны при использовании оператора для поиска {{jsxref("Array")}} объекты. the <code>in</code> оператор проверяет номер индекса, а не его значение.</p>
+
+<pre class="brush: js">var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+3 in trees; // true
+"oak" in trees; // false</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/index.html b/files/ru/web/javascript/reference/errors/index.html
new file mode 100644
index 0000000000..08f8f1c808
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/index.html
@@ -0,0 +1,25 @@
+---
+title: JavaScript ссылки на ошибки
+slug: Web/JavaScript/Reference/Errors
+tags:
+ - JavaScript
+ - NeedsTranslation
+translation_of: Web/JavaScript/Reference/Errors
+---
+<p>{{jsSidebar("Errors")}}</p>
+
+<p>Ниже, Вы найдете список ошибок, которые возвращает JavaScript. Эти ошибки могут буть полезны при отладке, но неполадки не всегда сразу понятны. Страницы ниже  предлагают дополнительную информацию об этих ошибках. Каждая ошибка это Объект на основании {{jsxref("Error")}} object, и имеет имя (<code>name)</code> и сообщение (<code>message)</code>.</p>
+
+<p>Ошибки отображенные в Web консоли могут содержать ссылку на соответствующую страницу ниже, чтобы помочь вам быстро понять проблему в коде.</p>
+
+<h2 id="Список_ошибок">Список ошибок</h2>
+
+<p>В представленном списке, каждая страница проименована (тип ошибки) и сообщение (более подробное удобочитаемое сообщение об ошибке). Вместе, эти два свойства послужат отправной точкой к пониманию и устранению ошибки. Для большей информации, перейдите по ссылкам ниже!</p>
+
+<p>{{ListSubPages("/ru/docs/Web/JavaScript/Reference/Errors")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong">What went wrong? Troubleshooting JavaScript</a>: Вводный Учебник для начинающих для исправления ошибок JavaScript.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/invalid_array_length/index.html b/files/ru/web/javascript/reference/errors/invalid_array_length/index.html
new file mode 100644
index 0000000000..317a3c4fb0
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_array_length/index.html
@@ -0,0 +1,76 @@
+---
+title: 'RangeError: invalid array length'
+slug: Web/JavaScript/Reference/Errors/Invalid_array_length
+tags:
+ - JavaScript
+ - Диапазон
+ - Массив
+ - Ошибка
+ - Размер массива
+translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: invalid array length (Firefox)
+RangeError: Invalid array length (Chrome)
+RangeError: Invalid array buffer length (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Ошибка, связанная с размером массива может произойти в следующих случаях:</p>
+
+<ul>
+ <li>При создании {{jsxref("Array")}} или {{jsxref("ArrayBuffer")}}, размер оказался либо отрицательным, либо равным или привышающим 2<sup>32</sup>, или</li>
+ <li>при установке свойства {{jsxref("Array.length")}} значение оказалось либо отрицательным, либо равным или привышающим 2<sup>32</sup>.</li>
+</ul>
+
+<p>Поскольку свойство <code>length</code> в  <code>Array</code> или <code>ArrayBuffer</code> представлено в виде беззнакового 32-битного целого числа (integer), значение этого свойства находится в диапазоне от 0 до 2<sup>32</sup>-1.</p>
+
+<p>В конструкторе (<code>new Array()</code>) первым аргументом является длина массива, поэтому при создании можно задать нужное значение. Так же, можно задать размер массива, обратившись к свойству <code>length</code> напрямую.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js example-bad">new Array(Math.pow(2, 40))
+new Array(-1)
+new ArrayBuffer(Math.pow(2, 32))
+new ArrayBuffer(-1)
+
+let a = [];
+a.length = a.length - 1; // установка длинны -1
+
+let b = new Array(Math.pow(2, 32) - 1);
+b.length = b.length + 1; // установка длинны 2^32
+</pre>
+
+<h3 id="sect1"> </h3>
+
+<pre class="brush: js example-good">[ Math.pow(2, 40) ] // [ 1099511627776 ]
+[ -1 ] // [ -1 ]
+new ArrayBuffer(Math.pow(2, 32) - 1)
+new ArrayBuffer(0)
+
+let a = [];
+a.length = Math.max(0, a.length - 1);
+
+let b = new Array(Math.pow(2, 32) - 1);
+b.length = Math.min(0xffffffff, b.length + 1);
+
+// 0xffffffff является шестнадцатеричным представлением
+// 2^32 - 1, которое также можно записать в виде (-1 &gt;&gt;&gt; 0)</pre>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Array.length")}}</li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html b/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html
new file mode 100644
index 0000000000..3ce5c4ac6b
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html
@@ -0,0 +1,54 @@
+---
+title: 'ReferenceError: invalid assignment left-hand side'
+slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side
+tags:
+ - JavaScript
+ - ReferenceError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">ReferenceError: invalid assignment left-hand side
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("ReferenceError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Найдено неожиданное присваивание. <span id="result_box" lang="ru"><span>Это может быть связано, например, с несоответствием <a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">оператора присваивания</a> и <a href="/ru/docs/Web/JavaScript/Reference/Operators/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F">оператора сравнения</a>: один знак «<code>=</code>» присваивает значение переменной, а операторы «<code>==</code>» или «<code>===</code>» осуществляют сравнение.</span></span></p>
+
+<h2 id="Пример">Пример</h2>
+
+<pre class="brush: js example-bad">if (Math.PI = 3 || Math.PI = 4) {
+ console.log('исключено!');
+}
+// ReferenceError: invalid assignment left-hand side
+
+var str = 'Привет, '
++= 'не меня ли '
++= 'ты ищешь?';
+// ReferenceError: invalid assignment left-hand side
+</pre>
+
+<p><span id="result_box" lang="ru"><span>В выражении <code>if</code> вам нужно использовать оператор сравнения («==»), а для конкатенации строк необходим оператор плюс («+»).</span></span></p>
+
+<pre class="brush: js example-good">if (Math.PI == 3 || Math.PI == 4) {
+ console.log('исключено!');
+}
+
+var str = 'Привет '
++ 'с другой '
++ 'стороны!';
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators" title="Операторы присваивания">Операторы присваивания</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" title="Операторы сравнения">Операторы сравнения</a></li>
+</ul>
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
new file mode 100644
index 0000000000..eaf8b0b185
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_const_assignment/index.html
@@ -0,0 +1,87 @@
+---
+title: 'TypeError: invalid assignment to const "x"(недопустимое назначение const "x")'
+slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment
+translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: недопустимое назначение const "x" (Firefox)
+TypeError: присвоение переменной константы. (Хромированный)
+TypeError: присвоение const (Edge)
+TypeError: повторное объявление const 'x' (IE)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Константа-это значение, которое не может быть изменено программой в обычном исполнении. Он не может быть изменен путем повторного назначения и не может быть повторно объявлен. В JavaScript, константы объявляются с помощью ключевого слова const.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Недопустимое_повторное_объявление">Недопустимое повторное объявление</h3>
+
+<p>Assigning a value to the same constant name in the same block-scope will throw.</p>
+
+<pre class="brush: js example-bad">const COLUMNS = 80;
+
+// ...
+
+COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'</pre>
+
+<h3 id="Решение_проблемы">Решение проблемы</h3>
+
+<p>Есть несколько вариантов, чтобы исправить эту ошибку. Проверьте, что должно было быть достигнуто с рассматриваемой константой.</p>
+
+<h4 id="Переназавите">Переназавите</h4>
+
+<p>Если вы хотели объявить другую константу, выберите другое имя и переименовать. Это имя константы уже используется в этой области.</p>
+
+<pre class="brush: js example-good">const COLUMNS = 80;
+const WIDE_COLUMNS = 120;</pre>
+
+<h4 id="const_let_или_var"><code>const</code>, <code>let</code> или <code>var</code>?</h4>
+
+<p>Не используйте const, если вы не хотели объявлять константу. Возможно, вы хотели объявить переменную в области блока с let или глобальную переменную с var.</p>
+
+<pre class="brush: js example-good">let columns = 80;
+
+// ...
+
+let columns = 120;
+</pre>
+
+<h4 id="Обзор">Обзор</h4>
+
+<p>Проверить, если вы находитесь в правильной области. Должна ли эта константа появиться в этой области или она должна была появиться в функции, например?</p>
+
+<pre class="brush: js example-good">const COLUMNS = 80;
+
+function setupBigScreenEnvironment() {
+ const COLUMNS = 120;
+}</pre>
+
+<h3 id="const_и_неизменность"><code>const</code> и неизменность</h3>
+
+<p>Объявление const создает ссылку только для чтения на значение. Это не означает, что значение, которое он содержит, является неизменяемым, просто идентификатор переменной не может быть переназначен. Например, если содержимое является объектом, это означает, что сам объект все еще может быть изменен. Это означает, что нельзя изменить значение, хранящееся в переменной:</p>
+
+<pre class="brush: js example-bad">const obj = {foo: 'bar'};
+obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
+</pre>
+
+<p>Но можно изменить свойства в переменной:</p>
+
+<pre class="brush: js example-good">obj.foo = 'baz';
+obj; // Object { foo: "baz" }</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/invalid_date/index.html b/files/ru/web/javascript/reference/errors/invalid_date/index.html
new file mode 100644
index 0000000000..89a108c475
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_date/index.html
@@ -0,0 +1,54 @@
+---
+title: 'RangeError: invalid date'
+slug: Web/JavaScript/Reference/Errors/Invalid_date
+tags:
+ - Errors
+ - JavaScript
+ - RangeError
+translation_of: Web/JavaScript/Reference/Errors/Invalid_date
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: invalid date (Firefox)
+RangeError: invalid time value (Chrome)
+RangeError: Provided date is not in valid range (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><span id="result_box" lang="ru"><span>Строка, ведущая к недопустимой дате, была выведена</span></span> {{jsxref("Date")}} или {{jsxref("Date.parse()")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неверные_записи">Неверные записи</h3>
+
+<p>Неопознанные строки или даты, содержащие недопустимые значения элементов в строках, отформатированных ISO, обычно возвращают <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="Глобальное свойство NaN является значением, представляющим не-число (Not-A-Number)."><code>NaN</code></a>. Тем не менее, в зависимости от реализации, при несоответствии строкам формата ISO, может также возникнуть ошибка <code>RangeError: invalid date</code>, например в следующих случаях, в Firefox.</p>
+
+<pre class="brush: js example-bad">new Date('foo-bar 2014');
+new Date('2014-25-23').toISOString();
+new Date('foo-bar 2014').toString();
+</pre>
+
+<p>Это, без сомнения, вернёт {{jsxref("NaN")}} в Firefox:</p>
+
+<pre class="brush: js example-bad">Date.parse('foo-bar 2014'); // NaN</pre>
+
+<p>Для получения более подробной информации, смотрите документацию по {{jsxref("Date.parse()")}}</p>
+
+<h3 id="Верная_запись">Верная запись</h3>
+
+<pre class="brush: js example-good">new Date('05 October 2011 14:48 UTC');</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date")}}</li>
+ <li>{{jsxref("Date.prototype.parse()")}}</li>
+ <li>{{jsxref("Date.prototype.toISOString()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..4538cd6b0b
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_for-in_initializer/index.html
@@ -0,0 +1,73 @@
+---
+title: >-
+ SyntaxError: for-in loop head declarations may not have
+ initializers(SyntaxError: объявления for-in loop head могут не иметь
+ инициализаторов)
+slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer
+translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Message">Message</h2>
+
+<pre class="syntaxbox">SyntaxError: объявления for-in loop head не могут иметь инициализатора (Edge)
+SyntaxError: объявления for-in loop head могут не иметь инициализаторов (Firefox)
+SyntaxError: объявление переменной цикла for-in может не иметь инициализатора. (Chrome)
+
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}} только в строгом режиме.</p>
+
+<h2 id="Что_пошло_нетак">Что пошло нетак?</h2>
+
+<p>Глава цикла <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a> содержит выражение инициализатора. То есть переменная объявляется и присваивается значение <code>|for (var i = 0 in obj)|</code>. В нестрогом режиме это объявление head игнорируется и ведет себя как <code>|for (var i in obj)|</code>. Однако в строгом режиме создается синтаксическая ошибка.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Данный пример дает SyntaxError:</p>
+
+<pre class="brush: js example-bad">"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i = 0 in obj) {
+ console.log(obj[i]);
+}
+
+ SyntaxError: объявления for-in loop head могут не иметь инициализаторов
+</pre>
+
+<h3 id="Правильный_for-in_loop">Правильный for-in loop</h3>
+
+<p>Можно удалить инициализатор (i = 0) в начале цикла for-in.</p>
+
+<pre class="brush: js example-good">"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i in obj) {
+ console.log(obj[i]);
+}
+</pre>
+
+<h3 id="Итерация_массива">Итерация массива</h3>
+
+<p>Цикл for...in не должен использоваться для итерации массива. Вы намеревались использовать цикл for вместо цикла for-in для итерации {{jsxref("Array")}}? Цикл for позволяет также установить инициализатор:</p>
+
+<pre class="brush: js example-good">var arr = [ "a", "b", "c" ]
+
+for (var i = 2; i &lt; arr.length; i++) {
+ console.log(arr[i]);
+}
+
+// "c"</pre>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> – также запрещает инициализатор как в строгом, так и в нестрогом режиме.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code> –  предпочтительно для итерации массива, позволяет определить инициализатор.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html b/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html
new file mode 100644
index 0000000000..fd3b630239
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_for-of_initializer/index.html
@@ -0,0 +1,63 @@
+---
+title: >-
+ SyntaxError: a declaration in the head of a for-of loop can't have an
+ initializer
+slug: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer
+tags:
+ - Error
+ - JavaScript
+ - SyntaxError
+translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: a declaration in the head of a for-of loop can't have an initializer (Firefox)
+
+SyntaxError: for-of loop variable declaration may not have an initializer. (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_случилось">Что случилось?</h2>
+
+<p>В заголовке цикла<a href="/ru/docs/Web/JavaScript/Reference/Statements/for...of"> for...of</a> инициализируется переменная.  Иными словами, переменная объявляется и получает значение|<code>for (var i = 0 of iterable)</code>|. В подобных циклах это не допускается. Инициализировать переменные можно в циклах <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильный_цикл_for-of">Неправильный цикл <code>for-of</code></h3>
+
+<pre class="brush: js example-bad">let iterable = [10, 20, 30];
+
+for (let value = 50 of iterable) {
+ console.log(value);
+}
+
+// SyntaxError: a declaration in the head of a for-of loop can't
+// have an initializer</pre>
+
+<h3 id="Правильный_цикл_for-of">Правильный цикл <code>for-of</code></h3>
+
+<p>Надо убрать инициализацию (<code>value = 50</code>) в заголовке цикла <code>for-of</code>. Если требуется использовать смещение 50, это можно сделать в теле цикла.</p>
+
+<pre class="brush: js example-good">let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+ value += 50;
+ console.log(value);
+}
+// 60
+// 70
+// 80
+</pre>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code> – В строгом режиме инициализация тоже не разрешается (<a href="/ru/docs/Web/JavaScript/Reference/Errors/Invalid_for-in_initializer">SyntaxError: for-in loop head declarations may not have initializers</a>)</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for">for</a></code> – Инициализация во время итерации разрешена.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html b/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html
new file mode 100644
index 0000000000..b158098787
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html
@@ -0,0 +1,61 @@
+---
+title: >-
+ TypeError: invalid 'instanceof' operand 'x'(Тип ошибки: неверный
+ 'экземпляром' операнд 'х')
+slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand
+translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: недопустимый операнд "instanceof" "x" (Firefox)
+TypeError: "x" не является функцией (Firefox)
+TypeError: правая часть "instanceof" не является объектом (Chrome)
+TypeError: правая часть "instanceof" не вызывается (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>The <a href="/en-US/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> operator</a> ожидает, что операнды правой стороны будут объектом конструктора, т. е. объектом, который имеет свойство прототипа и является вызываемым.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js example-bad">"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
+42 instanceof 0; // TypeError: invalid 'instanceof' operand 0
+
+function Foo() {}
+var f = Foo(); // Foo() is called and returns undefined
+var x = new Foo();
+
+x instanceof f; // TypeError: invalid 'instanceof' operand f
+x instanceof x; // TypeError: x is not a function
+</pre>
+
+<p>Чтобы исправить эти ошибки, необходимо либо заменить оператор <code>instanceof </code>оператором <code>typeof</code>, либо убедиться, что вместо результата его вычисления используется имя функции.</p>
+
+<pre class="brush: js example-good">typeof "test" == "string"; // true
+typeof 42 == "number" // true
+
+function Foo() {}
+var f = Foo; // Do not call Foo.
+var x = new Foo();
+
+x instanceof f; // true
+x instanceof Foo; // true
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> operator</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof"><code>typeof</code> operator</a></li>
+</ul>
+
+<h2 id="Админ_дрочит_на_постер_ОБАМКИ_и_это_случайный_аргумент!">Админ дрочит на постер ОБАМКИ и это случайный аргумент!</h2>
+
+<p> </p>
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
new file mode 100644
index 0000000000..c084aac4e3
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/is_not_iterable/index.html
@@ -0,0 +1,100 @@
+---
+title: 'TypeError: ''x'' is not iterable (Тип ошибки ''x'' не является итерационным)'
+slug: Web/JavaScript/Reference/Errors/is_not_iterable
+translation_of: Web/JavaScript/Reference/Errors/is_not_iterable
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: "x" не является итерационным (Firefox, Chrome)
+TypeError: 'x' не является функцией или ее возвращаемое значение не является итерационным (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Значение, которое дается как правая сторона for...of или как аргумент функции, такой как {{jsxref("Promise.all")}} или {{jsxref("TypedArray.from")}}, не является итерационным объектом.  Повторяемое может быть, встроенный итератор типа, такие как {{jsxref("Array")}}, {{jsxref("String")}} или {{jsxref("Map")}}, генератор результатом, или объект, реализующий итератор протокол.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Итерация_по_свойствам_объекта">Итерация по свойствам объекта</h3>
+
+<p>В JavaScript, {{jsxref("object")}} не повторяется, если они реализуют итерационный протокол . Поэтому нельзя использовать for...of для перебора свойств объекта.</p>
+
+<pre class="brush: js example-bad">var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj не является итерационным
+ // …
+}
+</pre>
+
+<p>Вместо этого вы должны использовать {{jsxref("Object.keys")}} или {{jsxref("Object.entries")}}, для итерации по свойствам или записям объекта.</p>
+
+<pre class="brush: js example-good">var obj = { 'France': 'Paris', 'England': 'London' };
+// Iterate over the property names:
+for (let country of Object.keys(obj)) {
+ var capital = obj[country];
+ console.log(country, capital);
+}
+
+for (const [country, capital] of Object.entries(obj))
+ console.log(country, capital);
+
+
+</pre>
+
+<p>Другим вариантом для этого варианта использования может быть использование  {{jsxref("Map")}}:</p>
+
+<pre class="brush: js example-good">var map = new Map;
+map.set('France', 'Paris');
+map.set('England', 'London');
+// Iterate over the property names:
+for (let country of map.keys()) {
+ let capital = map[country];
+ console.log(country, capital);
+}
+
+for (let capital of map.values())
+ console.log(capital);
+
+for (const [country, capital] of map.entries())
+ console.log(country, capital);
+</pre>
+
+<h3 id="Итерация_по_генератору">Итерация по генератору</h3>
+
+<p>Генераторы - это функции, вызываемые для создания итерационного объекта.</p>
+
+<pre class="brush: js example-bad">function* generate(a, b) {
+ yield a;
+ yield b;
+}
+
+for (let x of generate) // TypeError: генерация не является итерационной
+ console.log(x);
+</pre>
+
+<p>Если они не вызываются, то объект {{jsxref("Function")}}, соответствующий генератору, можно вызвать, но нельзя выполнить итерацию. Вызов генератора создает итерационный объект, который будет выполнять итерацию по значениям, полученным во время выполнения генератора.</p>
+
+<pre class="brush: js example-good">function* generate(a, b) {
+ yield a;
+ yield b;
+}
+
+for (let x of generate(1,2))
+ console.log(x);
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">iterable protocol</a> </li>
+ <li>{{jsxref("Object.keys")}}</li>
+ <li>{{jsxref("Object.entries")}}</li>
+ <li>{{jsxref("Map")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators">generators</a> </li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for…of</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/json_bad_parse/index.html b/files/ru/web/javascript/reference/errors/json_bad_parse/index.html
new file mode 100644
index 0000000000..269f560bb3
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/json_bad_parse/index.html
@@ -0,0 +1,111 @@
+---
+title: 'SyntaxError: JSON.parse: bad parsing'
+slug: Web/JavaScript/Reference/Errors/JSON_bad_parse
+tags:
+ - Errors
+ - JavaScript
+ - SyntaxError
+translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: JSON.parse: unterminated string literal
+SyntaxError: JSON.parse: bad control character in string literal
+SyntaxError: JSON.parse: bad character in string literal
+SyntaxError: JSON.parse: bad Unicode escape
+SyntaxError: JSON.parse: bad escape character
+SyntaxError: JSON.parse: unterminated string
+SyntaxError: JSON.parse: no number after minus sign
+SyntaxError: JSON.parse: unexpected non-digit
+SyntaxError: JSON.parse: missing digits after decimal point
+SyntaxError: JSON.parse: unterminated fractional number
+SyntaxError: JSON.parse: missing digits after exponent indicator
+SyntaxError: JSON.parse: missing digits after exponent sign
+SyntaxError: JSON.parse: exponent part is missing a number
+SyntaxError: JSON.parse: unexpected end of data
+SyntaxError: JSON.parse: unexpected keyword
+SyntaxError: JSON.parse: unexpected character
+SyntaxError: JSON.parse: end of data while reading object contents
+SyntaxError: JSON.parse: expected property name or '}'
+SyntaxError: JSON.parse: end of data when ',' or ']' was expected
+SyntaxError: JSON.parse: expected ',' or ']' after array element
+SyntaxError: JSON.parse: end of data when property name was expected
+SyntaxError: JSON.parse: expected double-quoted property name
+SyntaxError: JSON.parse: end of data after property name when ':' was expected
+SyntaxError: JSON.parse: expected ':' after property name in object
+SyntaxError: JSON.parse: end of data after property value in object
+SyntaxError: JSON.parse: expected ',' or '}' after property value in object
+SyntaxError: JSON.parse: expected ',' or '}' after property-value pair in object literal
+SyntaxError: JSON.parse: property names must be double-quoted strings
+SyntaxError: JSON.parse: expected property name or '}'
+SyntaxError: JSON.parse: unexpected character
+SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>{{jsxref("JSON.parse()")}} обрабатывает (парсит) строку в формате JSON. Это строка должна соответствовать формату, иначе будет выведена ошибка, что был нарушен синтаксис.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="JSON.parse()_не_допускает_запятые"><code>JSON.parse()</code> не допускает запятые</h3>
+
+<p>Метод JSON.parse() не разрешает использование, так называемых, trailling запятых.</p>
+
+<p>Обе строки выдадут ошибку типа SyntaxError:</p>
+
+<pre class="brush: js example-bad">JSON.parse('[1, 2, 3, 4,]');
+JSON.parse('{"foo": 1,}');
+// SyntaxError JSON.parse: unexpected character
+// at line 1 column 14 of the JSON data
+</pre>
+
+<p>Необходимо убрать последние запятые в строках и тогда ошибки не будет:</p>
+
+<pre class="brush: js example-good">JSON.parse('[1, 2, 3, 4]');
+JSON.parse('{"foo": 1}');</pre>
+
+<h3 id="Названия_свойств_должны_быть_в_двойных_кавычках">Названия свойств должны быть в двойных кавычках</h3>
+
+<p>Вы не можете использовать одинарные кавычки в именах свойств. Например, 'foo'.</p>
+
+<pre class="brush: js example-bad">JSON.parse("{'foo': 1}");
+// SyntaxError: JSON.parse: expected property name or '}'
+// at line 1 column 2 of the JSON data</pre>
+
+<p>Вместо этого необходимо написать "foo":</p>
+
+<pre class="brush: js example-good">JSON.parse('{"foo": 1}');</pre>
+
+<h3 id="Незначащие_нули_или_плавающая_точка_без_последующей_цифры">Незначащие нули или плавающая точка без последующей цифры</h3>
+
+<p>Вы не можете использовать незначащие нули, например, 01. Плавающая точка должна всегда сопровождаться хотя бы одной цифрой после неё.</p>
+
+<pre class="brush: js example-bad">JSON.parse('{"foo": 01}');
+// SyntaxError: JSON.parse: expected ',' or '}' after property value
+// in object at line 1 column 2 of the JSON data
+
+JSON.parse('{"foo": 1.}');
+// SyntaxError: JSON.parse: unterminated fractional number
+// at line 1 column 2 of the JSON data
+</pre>
+
+<p>Вместо этого напишите просто 1 без нуля и используйте хотя бы одну цифру после точки:</p>
+
+<pre class="brush: js example-good">JSON.parse('{"foo": 1}');
+JSON.parse('{"foo": 1.0}');
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("JSON")}}</li>
+ <li>{{jsxref("JSON.parse()")}}</li>
+ <li>{{jsxref("JSON.stringify()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..5e65f8c633
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/malformed_formal_parameter/index.html
@@ -0,0 +1,61 @@
+---
+title: 'SyntaxError: Malformed formal parameter'
+slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: malformed formal parameter (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Существует конструктор <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code>, который принимает в коде как минимум два аргумента. Последний аргумент – это исходный код создаваемой функции, а все остальные представляют собой список её аргументов.</p>
+
+<p>Ошибка возникает, когда список аргументов по какой-то причине не является корректным. Возможно, вы случайно взяли в качестве имени аргумента ключевое слово, такое как <code>if</code> или <code>var</code>. Или в списке аргументов затерялся лишний знак пунктуации. Или вы случайно передали некорректное значение, например, число или объект.</p>
+
+<h2 id="OK_это_решило_мою_проблему._Но_почему_нельзя_было_сразу_так_и_сказать">OK, это решило мою проблему. Но почему нельзя было сразу так и сказать?</h2>
+
+<p>Нельзя не признать, что формулировка сообщения об ошибке немного странная. "Formal parameter" (формальный параметр) – это всего лишь необычный способ сказать "function argument" (аргумент функции). А слово "malformed" (уродливый, некорректный) мы используем потому, что все инженеры Firefox без ума от готических романов 19-го века.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Код_с_ошибками">Код с ошибками</h3>
+
+<pre class="brush: js example-bad">var f = Function('x y', 'return x + y;');
+// SyntaxError (пропуск запятой)
+
+var f = Function('x,', 'return x;');
+// SyntaxError (лишняя запятая)
+
+var f = Function(37, "alert('OK')");
+// SyntaxError (числа не могут использоваться в качестве имен аргументов)
+</pre>
+
+<h3 id="Правильный_код">Правильный код</h3>
+
+<pre class="brush: js example-good">var f = Function('x, y', 'return x + y;'); // правильная пунктуация
+
+var f = Function('x', 'return x;');
+
+// если есть возможность, не используйте Function - так гораздо быстрее:
+var f = function(x) { return x; };
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">О функциях</a></li>
+ <li><a href="https://www.gutenberg.org/ebooks/84"><em>Франкенштейн</em> Мэри Уотлстонкрафт Шелли, полный текст (англ.)</a> ("[...] прокляты руки, создавшие тебя, пусть это были мои собственные! Ты причинил мне безмерное горе. Я уже не в силах решать, справедливо ли я с тобой поступаю. Поди прочь! Избавь меня от твоего ненавистного вида." (пер. З. Александровой))</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/malformed_uri/index.html b/files/ru/web/javascript/reference/errors/malformed_uri/index.html
new file mode 100644
index 0000000000..8f57f277f4
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/malformed_uri/index.html
@@ -0,0 +1,61 @@
+---
+title: 'URIError: malformed URI sequence'
+slug: Web/JavaScript/Reference/Errors/Malformed_URI
+translation_of: Web/JavaScript/Reference/Errors/Malformed_URI
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">URIError: malformed URI sequence (Firefox)
+URIError: URI malformed (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("URIError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Декодирование или кодирование URI не было успешным. Аргумент переданный функциям {{jsxref("decodeURI")}}, {{jsxref("encodeURI")}}, {{jsxref("encodeURIComponent")}},  или {{jsxref("decodeURIComponent")}} был недопустимым, из-за этого функция не смогла выполнить кодирование или декодирование.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Кодирование">Кодирование</h3>
+
+<p>Кодирование заменяет каждое вхождение конкретного символа одним, двумя, тремя или четырьмя управляющими последовательностями, представленными  стандартом UTF-8. {{jsxref("URIError")}} возникнет, при попытке кодирования суррогата, не являющегося частью high-low пары, например:</p>
+
+<pre class="brush: js example-bad">encodeURI('\uD800');
+// "URIError: malformed URI sequence"
+
+encodeURI('\uDFFF');
+// "URIError: malformed URI sequence"
+</pre>
+
+<p>Нормальная high-low пара. Например:</p>
+
+<pre class="brush: js example-good">encodeURI('\uD800\uDFFF');
+// "%F0%90%8F%BF"</pre>
+
+<h3 id="Декодирование">Декодирование</h3>
+
+<p>Декодирование заменяет каждую управляющую последовательность в закодированном URI компоненте символом, который она предстваляет. Если такого символа нет, возникнет ошибка:</p>
+
+<pre class="brush: js example-bad">decodeURIComponent('%E0%A4%A');
+// "URIError: malformed URI sequence"
+</pre>
+
+<p>Правильный вариант обычно выглядит так:</p>
+
+<pre class="brush: js example-good">decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("URIError")}}</li>
+ <li>{{jsxref("decodeURI")}}</li>
+ <li>{{jsxref("encodeURI")}}</li>
+ <li>{{jsxref("encodeURIComponent")}}</li>
+ <li>{{jsxref("decodeURIComponent")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..32035a2365
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_bracket_after_list/index.html
@@ -0,0 +1,56 @@
+---
+title: 'SyntaxError: missing ] after element list'
+slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing ] after element list
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Ошибка в синтаксисе инициализации массива. Скорее всего, пропущена закрывающая квадратная скобка ("<code>]</code>") или запятая ("<code>,</code>").</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Незавершенный_инициализатор_массива">Незавершенный инициализатор массива</h3>
+
+<pre class="brush: js example-bad">var list = [1, 2,
+
+var instruments = [
+ 'Укулеле',
+ 'Гитара',
+ 'Пианино'
+};
+
+var data = [{foo: 'bar'} {bar: 'foo'}];
+</pre>
+
+<p>Правильные варианты:</p>
+
+<pre class="brush: js example-good">var list = [1, 2];
+
+var instruments = [
+ 'Укулеле',
+ 'Гитара',
+ 'Пианино'
+];
+
+var data = [{foo: 'bar'}, {bar: 'foo'}];</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..856d2fe526
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_colon_after_property_id/index.html
@@ -0,0 +1,72 @@
+---
+title: 'SyntaxError: missing : after property id'
+slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id
+translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing : after property id
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>При создании объекта с помощью <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">инициализатора объекта</a>, двоеточие (<code>:</code>) разделяет ключи и значения свойств объекта.</p>
+
+<pre class="brush: js">var obj = { propertyKey: 'value' };
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Двоеточие_vs._знака_равенства">Двоеточие vs. знака равенства</h3>
+
+<p>Этот код не работает, потому что знак равенства не может быть использован при инициализации объекта.</p>
+
+<pre class="brush: js example-bad">var obj = { propertyKey = 'value' };
+// SyntaxError: missing : after property id
+</pre>
+
+<p>Корректно будет использовать двоеточие или квадратные скобки для назначения нового свойства после того, как объект уже был создан.</p>
+
+<pre class="brush: js example-good">var obj = { propertyKey: 'value' };
+
+// or alternatively
+
+var obj = { };
+obj['propertyKey'] = 'value';
+</pre>
+
+<h3 id="Пустые_свойства">Пустые свойства</h3>
+
+<p>Вы не можете создать пустые свойства, подобные этому:</p>
+
+<pre class="brush: js example-bad">var obj = { propertyKey; };
+// SyntaxError: missing : after property id
+</pre>
+
+<p>Если вам необходимо задать свойство без значения, то вы можете использовать {{jsxref("null")}}.</p>
+
+<pre class="brush: js example-good">var obj = { propertyKey: null };</pre>
+
+<h3 id="Вычисляемые_свойства">Вычисляемые свойства</h3>
+
+<p>Если вы создаете ключ свойства из выражения, то вам необходимо использовать квадратные скобки. В противном случае имя свойства не будет вычислено:</p>
+
+<pre class="brush: js example-bad">var obj = { 'b'+'ar': 'foo' };
+// SyntaxError: missing : after property id
+</pre>
+
+<p>Поместите выражение в скобки <code>[]</code>:</p>
+
+<pre class="brush: js example-good">var obj = { ['b'+'ar']: 'foo' };</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">Инициализатор объекта</a></li>
+</ul>
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
new file mode 100644
index 0000000000..0d971440c7
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_curly_after_function_body/index.html
@@ -0,0 +1,66 @@
+---
+title: 'SyntaxError: missing } after function body'
+slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing } after function body
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Допущена синтаксическая ошибка где-то в коде создания функции. Кроме того, проверьте, все ли закрывающие круглые и фигурные скобки расставлены в правильном порядке. Справиться с беспорядком поможет использование отступов, а также более аккуратное форматирование кода в целом.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Забытая_закрывающая_фигурная_скобка">Забытая закрывающая фигурная скобка</h3>
+
+<p>Часто в коде функции может быть забыта фигурная скобка:</p>
+
+<pre class="brush: js example-bad">var charge = function() {
+ if (sunny) {
+ useSolarCells();
+ } else {
+ promptBikeRide();
+};
+</pre>
+
+<p>Правильный код:</p>
+
+<pre class="brush: js example-good">var charge = function() {
+ if (sunny) {
+ useSolarCells();
+ } else {
+ promptBikeRide();
+ }
+};</pre>
+
+<p>Еще больше путаницы может внести использование {{Glossary("IIFE")}}, <a href="/ru/docs/Web/JavaScript/Closures">замыканий</a> и прочих конструкций, где используется большое количество различных скобок:</p>
+
+<pre class="brush: js example-bad">(function() { if (true) { return false; } );
+</pre>
+
+<p>Зачастую облегчить поиск ошибок можно, проверив отступы еще раз или расставив их по-другому.</p>
+
+<pre class="brush: js example-good">(function() {
+ if (true) {
+ return false;
+ }
+});</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html
new file mode 100644
index 0000000000..6c86b1ef73
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_curly_after_property_list/index.html
@@ -0,0 +1,51 @@
+---
+title: 'SyntaxError: missing } after property list'
+slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing } after property list
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><span class="notranslate">Произошла ошибка в синтаксисе <a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">инициализатора объекта</a>.</span> <span class="notranslate">Причиной может быть отсутствующая фигурная скобка или, к примеру, недостающая запятая.</span> <span class="notranslate"> Также проверьте, в правильном ли порядке расположены закрывающие круглые и фигурные скобки.</span> Добаление отсупов или <span class="notranslate">форматирование кода в более благоприятный вид также могут помочь разобраться в беспорядке.</span></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 class="highlight-spanned" id="Забытая_запятая"><span class="highlight-span"><span class="notranslate">Забытая запятая</span></span></h3>
+
+<p><span class="notranslate">Зачастую в коде инициализатора объекта есть недостающая запятая:</span></p>
+
+<pre class="brush: js example-bad">var obj = {
+ a: 1,
+ b: { myProp: 2 }
+ c: 3
+};
+</pre>
+
+<p>Правильный вариант:</p>
+
+<pre class="brush: js example-good">var obj = {
+ a: 1,
+ b: { myProp: 2 },
+ c: 3
+};
+</pre>
+
+<h2 id="Смотрите_также"><span class="notranslate">Смотрите также</span></h2>
+
+<ul>
+ <li><span class="notranslate"><a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">Инициализация объектов</a></span></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html b/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html
new file mode 100644
index 0000000000..a47a45477a
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_formal_parameter/index.html
@@ -0,0 +1,75 @@
+---
+title: 'SyntaxError: missing formal parameter( отсутствует формальный параметр)'
+slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter
+translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщениe">Сообщениe</h2>
+
+<pre class="syntaxbox">SyntaxError: идентификатор начинается сразу после числового литерала
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>"Формальный параметр" - это причудливый способ сказать "параметр функции". В объявлении функции отсутствуют допустимые параметры. В объявлении функции параметры должны быть {{Glossary("Identifier", "identifiers")}}, не любое значение, как числа, строки или объекты. Объявление функций и вызов функций - это два отдельных шага. Объявления требуют идентификатор в качестве параметров, и только при вызове (призыва) функции, вы предоставляете значения, которые функция должна использовать.</p>
+
+<p>В {{glossary("JavaScript")}}, идентификаторы могут содержать только буквенно-цифровые символы (или "$" или "_") и не могут начинаться с цифры. Идентификатор отличается от строки тем, что строка является данными, а идентификатор - частью кода.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Параметры функции должны быть идентификаторами при настройке функции. Все эти объявления функций, которые обеспечивают значения их параметров:</p>
+
+<pre class="brush: js example-bad highlight:[1,6,11]">function square(3) {
+ return number * number;
+};
+// SyntaxError: отсутствует формальный параметр
+
+function greet("Howdy") {
+ return greeting;
+};
+// SyntaxError: отсутствует формальный параметр
+
+function log({ obj: "value"}) {
+ console.log(arg)
+};
+// SyntaxError: отсутствует формальный параметр
+</pre>
+
+<p>В объявлениях функций необходимо использовать идентификаторы:</p>
+
+<pre class="brush: js example-good highlight:[1,5,9]">function square(number) {
+ return number * number;
+};
+
+function greet(greeting) {
+ return greeting;
+};
+
+function log(arg) {
+ console.log(arg)
+};</pre>
+
+<p>Затем можно вызвать эти функции с аргументами, которые вам нравятся:</p>
+
+<pre class="brush: js">square(2); // 4
+
+greet("Howdy"); // "Howdy"
+
+log({obj: "value"}); // Object { obj: "value" }
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Другие ошибки, касающиеся формальных параметров:
+ <ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Malformed_formal_parameter">SyntaxError: Malformed formal parameter</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Redeclared_parameter">SyntaxError: redeclaration of formal parameter "x"</a></li>
+ </ul>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html b/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html
new file mode 100644
index 0000000000..875084b4f5
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_initializer_in_const/index.html
@@ -0,0 +1,54 @@
+---
+title: 'SyntaxError: missing = in const declaration'
+slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const
+translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing = in const declaration (Firefox)
+SyntaxError: Missing initializer in const declaration (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Константа это значение, которое не может быть изменено программой в процессе своего выполнения. Оно не может меняться посредством повторного назначения, и не может быть переопределено. В JavaScript константы объявляются с использованием ключевого слова <code>const</code>. Инициализация для константы является обязательной; то есть вы должны указать значение сразу же при её объявлении (что имеет смысл, учитывая, что оно не может быть изменено позже).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Отсутствие_инициализатора_константы">Отсутствие инициализатора константы</h3>
+
+<p>В отличие от <code>var</code> или <code>let</code>, вы должны указать значение при объявлении <code>const</code>. В противном случае возникнет ошибка:</p>
+
+<pre class="brush: js example-bad">const COLUMNS;
+// SyntaxError: missing = in const declaration</pre>
+
+<h3 id="Исправление_ошибки">Исправление ошибки</h3>
+
+<p>Существует несколько вариантов исправления этой ошибки. Проверьте, что должно быть достигнуто с помощью данной константы.</p>
+
+<h4 id="Добавление_значения_константы">Добавление значения константы</h4>
+
+<p>Укажите значение константы при её объявлении.</p>
+
+<pre class="brush: js example-good">const COLUMNS = 80;</pre>
+
+<h4 id="const_let_или_var"><code>const</code>, <code>let</code> или <code>var</code>?</h4>
+
+<p>Не используйте <code>const</code>, если вы не хотели объявить константу. Возможно, вы подразумевали объявление переменную с блочной областью видимости с помощью <code>let</code> или глобальную переменную с помощью <code>var</code>. Оба варианта не требуют начального значения.</p>
+
+<pre class="brush: js example-good">let columns;
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html b/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html
new file mode 100644
index 0000000000..ef5179656c
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_name_after_dot_operator/index.html
@@ -0,0 +1,63 @@
+---
+title: 'SyntaxError: missing name after . operator(отсутствует имя после. оператора)'
+slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator
+translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing name after . operator
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Оператор точки (.) используется для доступа к свойству. Необходимо указать имя свойства, к которому требуется получить доступ. Для доступа к вычисляемому свойству может потребоваться изменить доступ к свойству с точки на квадратные скобки. Это позволит вычислить выражение. Может быть, вы собирались сделать конкатенацию вместо этого? В этом случае необходим оператор plus ( + ). См. примеры ниже.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Доступ_к_свойствам">Доступ к свойствам</h3>
+
+<p>Методы доступа к свойствам в JavaScript используют точку (.) или квадратные скобки ([]), но не оба. Квадратные скобки обеспечивают доступ к вычисляемым свойствам.</p>
+
+<pre class="brush: js example-bad">var obj = { foo: { bar: "baz", bar2: "baz2" } };
+var i = 2;
+
+obj.[foo].[bar]
+// SyntaxError: отсутсвует имя после. оператора
+
+obj.foo."bar"+i;
+// SyntaxError: отсутсвует имя после. оператора
+</pre>
+
+<p>Чтобы исправить этот код, необходимо получить доступ к объекту следующим образом:</p>
+
+<pre class="brush: js example-good">obj.foo.bar; // "baz"
+//или же
+obj["foo"]["bar"]; // "baz"
+
+//вычисляемые свойства требуют квадратных скобок
+obj.foo["bar" + i]; // "baz2"
+</pre>
+
+<h3 id="Доступ_к_свойствам_против_конкатенации">Доступ к свойствам против конкатенации</h3>
+
+<p>Если вы пришли из другого языка программирования (например, {{Glossary("PHP")}}), также легко перепутать оператор точки (.) и оператор конкатенации (+).</p>
+
+<pre class="brush: js example-bad">console.log("Hello" . "world");
+
+// SyntaxError: missing name after . operator</pre>
+
+<p>Вместо этого необходимо использовать знак плюс для объединения:</p>
+
+<pre class="brush: js example-good">console.log("Hello" + "World");</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a>(доступ к свойствам)</li>
+</ul>
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
new file mode 100644
index 0000000000..1b84367f61
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html
@@ -0,0 +1,38 @@
+---
+title: 'Синтаксическая ошибка: пропущенный символ ")" после списка аргументов'
+slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list
+translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Синтаксическая ошибка: пропущенный символ ")" после списка аргументов
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Причина_возникновения_ошибки">Причина возникновения ошибки</h2>
+
+<p>Ошибка в вызове функции. Например, опечатка, пропущенный оператор, или некорректно обрамлённая кавычками строка.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Из-за отсутствия оператора конкатенации "+", JavaScript ожидает аргумент функции <code>log</code> просто <code>"PI: "</code>. В этом случае, он должен быть заключен в закрывающие скобки.</p>
+
+<pre class="brush: js example-bad">console.log('PI: ' Math.PI);
+// SyntaxError: missing ) after argument list
+</pre>
+
+<p>Можно скорректировать вызов функции <code>log</code> добавлением оператора "<code>+</code>":</p>
+
+<pre class="brush: js example-good">console.log('PI: ' + Math.PI);
+// "PI: 3.141592653589793"</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Functions">Функции</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html
new file mode 100644
index 0000000000..2bd9f1cd27
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html
@@ -0,0 +1,70 @@
+---
+title: 'SyntaxError: missing ) after condition'
+slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition
+tags:
+ - Error
+ - Errors
+ - JavaScript
+ - SyntaxError
+translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing ) after condition
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Произошла ошибка в написании условия if. В любом языке программирования код принимает решение выполнять действия в зависимости от входных параметров. Оператор if выполняет действия, если условие истинно. В JavaScript это условие должно заключаться в скобки после ключевого слова if, например:</p>
+
+<pre class="brush: js">if (condition) {
+ // сделать что-то если условие истинно
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Это может быть просто недосмотр, внимательно проверьте все скобки в коде.</p>
+
+<pre class="brush: js example-bad">if (3 &gt; Math.PI {
+ console.log("Что?");
+}
+
+// SyntaxError: missing ) after condition
+</pre>
+
+<p>Чтобы исправить ошибку вы должны поставить закрывающую скобку после условия.</p>
+
+<pre class="brush: js example-good">if (3 &gt; Math.PI) {
+ console.log("Что?");
+}</pre>
+
+<p>Если вы пришли из других языков программирования, то можете случайно использовать ключевые слова, которые в JavaScript обозначают что-то другое или вообще не имеют смысла.</p>
+
+<pre class="brush: js example-bad">if (done is true) {
+ console.log("мы сделали!");
+}
+
+// SyntaxError: missing ) after condition
+</pre>
+
+<p>Вместо этого используйте нужный <a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения">оператор сравнения</a>. Для примера:</p>
+
+<pre class="brush: js example-good">if (done === true) {
+ console.log("мы сделали!");
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения">Операторы сравнения</a></li>
+ <li>
+ <p><a href="/ru/docs/Learn/JavaScript/Building_blocks/conditionals">Making decisions in your code — conditionals</a></p>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html
new file mode 100644
index 0000000000..ea2bf7e8ac
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/missing_semicolon_before_statement/index.html
@@ -0,0 +1,82 @@
+---
+title: 'SyntaxError: missing ; before statement'
+slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement
+tags:
+ - JavaScript
+ - SyntaxError
+ - ru
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: Expected ';' (Edge)
+SyntaxError: missing ; before statement (Firefox)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Отсутствует точка с запятой (<code>;</code>). <a href="/ru/docs/Web/JavaScript/Reference/Statements">Инструкции JavaScript</a> должны заканчиваться точкой с запятой. В некоторых случаях имеет место <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Автоматическая_вставка_точки_с_запятой">автоматическая вставка точки с запятой (ASI)</a>, но в данном случае необходимо её поставить, чтобы JavaScript мог правильно обработать исходный код.</p>
+
+<p><span id="result_box" lang="ru"><span>Часто эта ошибка является следствием другой ошибки, например, некорректного экранирования строк или неправильного использования <code>var</code>.</span> Кроме того, где-то может быть с<span>лишком много скобок.</span> <span>Тщательно проверьте синтаксис при возникновении этой ошибки.</span></span></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неэкранированные_строки">Неэкранированные строки</h3>
+
+<p>Эта ошибка может легко возникнуть, если не экранировать строку правильным образом, из-за чего JavaScript будет рассматривать это место как конец строки. Например:</p>
+
+<pre class="brush: js example-bad">var foo = 'Tom's bar';
+// SyntaxError: missing ; before statement</pre>
+
+<p>Можно использовать двойные кавычки или экранировать апостроф:</p>
+
+<pre class="brush: js example-good">var foo = "Tom's bar";
+var foo = 'Tom\'s bar';
+</pre>
+
+<h3 id="Объявление_свойств_через_var">Объявление свойств через var</h3>
+
+<p><strong>Нельзя</strong> объявить свойство объекта или массива с помощью <code>var</code>.</p>
+
+<pre class="brush: js example-bad">var obj = {};
+var obj.foo = 'привет'; // SyntaxError missing ; before statement
+
+var array = [];
+var array[0] = 'всем'; // SyntaxError missing ; before statement
+</pre>
+
+<p>Ключевое слово <code>var</code> необходимо опустить:</p>
+
+<pre class="brush: js example-good">var obj = {};
+obj.foo = 'привет';
+
+var array = [];
+array[0] = 'всем';
+</pre>
+
+<h3 id="Неправильные_ключевые_слова">Неправильные ключевые слова</h3>
+
+<p>При переходе с другого языка программирования частой проблемой является использование ключевых слов, которые в JavaScript имеют другое значение или ничего не означают.</p>
+
+<pre class="brush: js example-bad">def print(info){
+ console.log(info);
+}; // SyntaxError missing ; before statement</pre>
+
+<p>Вместо <code>def</code> используйте <code>function</code>:</p>
+
+<pre class="brush: js example-good">function print(info){
+ console.log(info);
+};</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Автоматическая_вставка_точки_с_запятой">Автоматическая вставка точки с запятой (ASI)</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements">Инструкции JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html b/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html
new file mode 100644
index 0000000000..2e7777939e
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/more_arguments_needed/index.html
@@ -0,0 +1,48 @@
+---
+title: 'TypeError: More arguments needed'
+slug: Web/JavaScript/Reference/Errors/More_arguments_needed
+tags:
+ - Errors
+ - JavaScript
+ - TypeError
+translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: Object.create requires more than 0 arguments
+TypeError: Object.setPrototypeOf requires more than 1 argument
+TypeError: Object.defineProperties requires more than 0 arguments
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Ошибка в вызове функции. Необходимо передать больше аргументов.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Метод {{jsxref("Object.create()")}} требует хотя бы один аргумент, а {{jsxref("Object.setPrototypeOf()")}} минимум двух:</p>
+
+<pre class="brush: js example-bad">var obj = Object.create();
+// TypeError: Object.create requires more than 0 arguments
+
+var obj = Object.setPrototypeOf({});
+// TypeError: Object.setPrototypeOf requires more than 1 argument
+</pre>
+
+<p>Вы можете исправить это, установив {{jsxref("null")}} в качестве прототипа, например:</p>
+
+<pre class="brush: js example-good">var obj = Object.create(null);
+
+var obj = Object.setPrototypeOf({}, null);</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Functions">Функции</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html b/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html
new file mode 100644
index 0000000000..ff60911f45
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/negative_repetition_count/index.html
@@ -0,0 +1,40 @@
+---
+title: 'RangeError: repeat count must be non-negative'
+slug: Web/JavaScript/Reference/Errors/Negative_repetition_count
+translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: repeat count must be non-negative (Firefox)
+RangeError: Invalid count value (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром <code>count</code>, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неверно">Неверно</h3>
+
+<pre class="brush: js example-bad">'abc'.repeat(-1); // RangeError </pre>
+
+<h3 id="Верно">Верно</h3>
+
+<pre class="brush: js example-good">'abc'.repeat(0); // ''
+'abc'.repeat(1); // 'abc'
+'abc'.repeat(2); // 'abcabc'
+'abc'.repeat(3.5); // 'abcabcabc' (count will be converted to integer)
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.repeat()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/no_non-null_object/index.html b/files/ru/web/javascript/reference/errors/no_non-null_object/index.html
new file mode 100644
index 0000000000..c00c5ff571
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/no_non-null_object/index.html
@@ -0,0 +1,65 @@
+---
+title: >-
+ TypeError: "x" is not a non-null object(Тип ошибки: "x" не является ненулевым
+ объектом)
+slug: Web/JavaScript/Reference/Errors/No_non-null_object
+translation_of: Web/JavaScript/Reference/Errors/No_non-null_object
+---
+<div>{{JSSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: недопустимый дескриптор свойства {x} (Edge)
+TypeError: "x" не является ненулевым объектом (Firefox)
+TypeError: описание свойства должно быть объектом: "x" (Chrome)
+TypeError: недопустимое значение, используемое в слабом наборе (Chrome)
+
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Объект где-то ожидался и не был предоставлен. {{jsxref("null")}} не является объектом и не будет работать. Вы должны обеспечить надлежащий объект в данной ситуации.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ожидается_дескриптор_свойства">Ожидается дескриптор свойства</h3>
+
+<p>Когда такие методы, как {{jsxref("Object.create()")}} или {{jsxref("object.defineProperty()")}} и {{jsxref("object.defineProperties()")}} используются, дополнительный параметр дескриптора ожидает объект дескриптора свойства. Если не указать объект (например, просто число), возникнет ошибка:</p>
+
+<pre class="brush: js example-bad">Object.defineProperty({}, 'key', 1);
+// TypeError: 1 is not a non-null object
+
+Object.defineProperty({}, 'key', null);
+// TypeError: null is not a non-null object
+</pre>
+
+<p>Допустимый объект дескриптора свойства может выглядеть следующим образом:</p>
+
+<pre class="brush: js example-good">Object.defineProperty({}, 'key', { value: 'foo', writable: false });
+</pre>
+
+<h3 id="СлабаяКарта_и_СлабыйСет_объектов_требуют_ключей_объектов"><code>СлабаяКарта</code> и <code>СлабыйСет</code> объектов требуют ключей объектов</h3>
+
+<p>{{jsxref("WeakMap")}} and {{jsxref("WeakSet")}} объекты хранят ключи объектов. Вы не можете использовать другие типы ключей.</p>
+
+<pre class="brush: js example-bad">var ws = new WeakSet();
+ws.add('foo');
+// TypeError: "foo" is not a non-null object</pre>
+
+<p>Создание обьекта вместо:</p>
+
+<pre class="brush: js example-good">ws.add({foo: 'bar'});
+ws.add(window);
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}, {{jsxref("Object.defineProperties()")}}</li>
+ <li>{{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/no_properties/index.html b/files/ru/web/javascript/reference/errors/no_properties/index.html
new file mode 100644
index 0000000000..7db5d305e9
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/no_properties/index.html
@@ -0,0 +1,41 @@
+---
+title: 'TypeError: "x" has no properties'
+slug: Web/JavaScript/Reference/Errors/No_properties
+tags:
+ - JavaScript
+ - TypeError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/No_properties
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: null has no properties (Firefox)
+TypeError: undefined has no properties (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>У {{jsxref("null")}} и {{jsxref("undefined")}} нет свойств, к которым можно было бы обратиться.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js example-bad">null.foo;
+// TypeError: null has no properties
+
+undefined.bar;
+// TypeError: undefined has no properties
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("null")}}</li>
+ <li>{{jsxref("undefined")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..9ac5f9cb6e
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/no_variable_name/index.html
@@ -0,0 +1,83 @@
+---
+title: 'SyntaxError: missing variable name'
+slug: Web/JavaScript/Reference/Errors/No_variable_name
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/No_variable_name
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: missing variable name (Firefox)
+SyntaxError: Unexpected token = (Chrome)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>У переменной отсутствует имя. Скорее всего, дело в синтаксической ошибке в вашем коде. Может, где-то неправильно стоит запятая, или у вас возникли трудности с именованием. Прекрасно вас понимаем! Придумывать названия – очень непросто.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Отсутствует_имя_переменной">Отсутствует имя переменной</h3>
+
+<pre class="brush: js example-bad">var = "foo";
+</pre>
+
+<p>Придумывать хорошие имена переменным очень тяжело, все мы с таким сталкивались.</p>
+
+<pre class="brush: js example-good">var ohGodWhy = "foo";</pre>
+
+<h3 id="Зарезервированные_ключевые_слова_не_могут_использоваться_как_имена_переменных">Зарезервированные ключевые слова не могут использоваться как имена переменных</h3>
+
+<p>Есть несколько имен, которые являются <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Ключевые_слова">зарезервированными ключевыми словами</a>. Их нельзя использовать. Увы :(</p>
+
+<pre class="brush: js example-bad">var debugger = "whoop";
+// SyntaxError: missing variable name
+</pre>
+
+<h3 id="Объявление_нескольких_переменных">Объявление нескольких переменных</h3>
+
+<p>При объявлении нескольких переменных обращайте особое внимание на запятые. Нет ли лишних запятых? Не поставили ли вы случайно запятые вместо точек с запятыми?</p>
+
+<pre class="brush: js example-bad">var x, y = "foo",
+var x, = "foo"
+
+var first = document.getElementById('раз'),
+var second = document.getElementById('два'),
+
+// SyntaxError: missing variable name
+</pre>
+
+<p>Исправленный вариант:</p>
+
+<pre class="brush: js example-good">var x, y = "foo";
+var x = "foo";
+
+var first = document.getElementById('раз');
+var second = document.getElementById('два');</pre>
+
+<h3 id="Массивы">Массивы</h3>
+
+<p>Литералам {{jsxref("Array")}} в JavaScript необходимы квадратные скобки вокруг значений. Такое не сработает:</p>
+
+<pre class="brush: js example-bad">var arr = 1,2,3,4,5;
+// SyntaxError: missing variable name
+</pre>
+
+<p>А вот так будет правильно:</p>
+
+<pre class="brush: js example-good">var arr = [1,2,3,4,5];</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://wiki.c2.com/?GoodVariableNames">Хорошие имена переменных (на англ.)</a></li>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявления переменных в Руководстве по JavaScript</a></li>
+</ul>
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
new file mode 100644
index 0000000000..b298844d17
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/non_configurable_array_element/index.html
@@ -0,0 +1,84 @@
+---
+title: >-
+ 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
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: не удается удалить не настраиваемый элемент массива (Firefox)
+TypeError: не удается удалить свойство '2' из [массива объектов] (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p> </p>
+
+<p>Была сделана попытка сократить длину массива, но один из элементов массива не изменяется. При укорочении массив, элементы за новую длину массива будут удалены, не в этой ситуации.</p>
+
+<p>Настраиваемый атрибут определяет, можно ли удалить свойство из объекта и можно ли изменить его атрибуты (отличные от доступных для записи).</p>
+
+<p>Обычно свойства объекта, созданного инициализатором массива, настраиваются. Однако, например, при использовании {{jsxref("Object.defineProperty()")}}, свойство не настраивается по умолчанию.</p>
+
+<p> </p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Не_настраиваемые_свойства_созданные_Object.defineProperty">Не настраиваемые свойства, созданные <code>Object.defineProperty</code></h3>
+
+<p>The {{jsxref("Object.defineProperty()")}} создает не настраиваемые свойства по умолчанию, если они не указаны как настраиваемые.</p>
+
+<pre class="brush: js example-bad">var arr = [];
+Object.defineProperty(arr, 0, {value: 0});
+Object.defineProperty(arr, 1, {value: "1"});
+
+arr.length = 1;
+// TypeError: не удается удалить не настраиваемый элемент массива
+</pre>
+
+<p>Вам нужно будет установить элементы как конфигурируемые, если вы собираетесь сократить массив.</p>
+
+<pre class="brush: js example-good">var arr = [];
+Object.defineProperty(arr, 0, {value: 0, configurable: true});
+Object.defineProperty(arr, 1, {value: "1", configurable: true});
+
+arr.length = 1;
+</pre>
+
+<h3 id="Seal-ed_Arrays_(Герметичные_Массивы)"><code>Seal</code>-ed Arrays (Герметичные Массивы)</h3>
+
+<p>The {{jsxref("Object.seal()")}} функция помечает все существующие элементы как не настраиваемые.</p>
+
+<pre class="brush: js example-bad">var arr = [1,2,3];
+Object.seal(arr);
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+</pre>
+
+<p>Вам или нужно извлечь {{jsxref("Object.seal()")}} позвоните или сделайте копию. В случае копирования сокращение копии массива не изменяет длину исходного массива.</p>
+
+<pre class="brush: js example-good">var arr = [1,2,3];
+Object.seal(arr);
+
+// Скопируйте исходный массив, чтобы сократить копию
+var copy = Array.from(arr);
+copy.length = 1;
+// arr.length == 3
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li>
+ <li>{{jsxref("Array.length")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.seal()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..0b72d6c50f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/not_a_codepoint/index.html
@@ -0,0 +1,50 @@
+---
+title: 'RangeError: argument is not a valid code point'
+slug: Web/JavaScript/Reference/Errors/Not_a_codepoint
+translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: Invalid code point {0} (Edge)
+RangeError: {0} is not a valid code point (Firefox)
+RangeError: Invalid code point {0} (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Метод {{jsxref("String.fromCodePoint()")}} выдает ошибку, если ему было передано значение {{jsxref("NaN")}}, отрицательное целое число (-1), нецелое число (5.4) или значение, которое превышает 0x10FFFF (1114111).</p>
+
+<p><a href="https://en.wikipedia.org/wiki/Code_point">Кодовая точка (code point)</a> – это значение в кодовом пространстве Unicode, то есть диапазон целых чисел от <code>0</code> до <code>0x10FFFF</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Нерабочие_случаи">Нерабочие случаи</h3>
+
+<pre class="brush: js example-bad">String.fromCodePoint('_'); // RangeError
+String.fromCodePoint(Infinity); // RangeError
+String.fromCodePoint(-1); // RangeError
+String.fromCodePoint(3.14); // RangeError
+String.fromCodePoint(3e-2); // RangeError
+String.fromCodePoint(NaN); // RangeError</pre>
+
+<h3 id="Рабочие_случаи">Рабочие случаи</h3>
+
+<pre class="brush: js example-good">String.fromCodePoint(42); // "*"
+String.fromCodePoint(65, 90); // "AZ"
+String.fromCodePoint(0x404); // "\u0404"
+String.fromCodePoint(0x2F804); // "\uD87E\uDC04"
+String.fromCodePoint(194564); // "\uD87E\uDC04"
+String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07"
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..e9c3aafb29
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/not_a_constructor/index.html
@@ -0,0 +1,96 @@
+---
+title: 'TypeError: "x" is not a constructor'
+slug: Web/JavaScript/Reference/Errors/Not_a_constructor
+tags:
+ - Errors
+ - JavaScript
+ - TypeError
+translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: Object doesn't support this action (Edge)
+TypeError: "x" is not a constructor
+
+TypeError: Math is not a constructor
+TypeError: JSON is not a constructor
+TypeError: Symbol is not a constructor
+TypeError: Reflect is not a constructor
+TypeError: Intl is not a constructor
+TypeError: SIMD is not a constructor
+TypeError: Atomics is not a constructor
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Была попытка использовать объект или переменную как конструктор, однако этот объект или переменная - не конструктор. Смотрите {{Glossary("constructor")}}  или <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a>, чтобы получить больше информации о том, что такое конструктор.</p>
+
+<p>Существует множество глобальных объектов, таких как {{jsxref("String")}} или {{jsxref("Array")}}, которые можно построить с использованием <code>new</code>. Однако, некоторые глобальные объекты - нельзя, т.к. их свойства и методы статичны. Следующие стандартные встроенные объекты JavaScript - не конструкторы: {{jsxref("Math")}}, {{jsxref("JSON")}}, {{jsxref("Symbol")}}, {{jsxref("Reflect")}}, {{jsxref("Intl")}}, {{jsxref("SIMD")}}, {{jsxref("Atomics")}}.</p>
+
+<p><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">Функции-генераторы</a> также не могут быть использованы как конструкторы.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильное_использование">Неправильное использование</h3>
+
+<pre class="brush: js example-bad">var Car = 1;
+new Car();
+// TypeError: Car is not a constructor
+
+new Math();
+// TypeError: Math is not a constructor
+
+new Symbol();
+// TypeError: Symbol is not a constructor
+
+function* f() {};
+var obj = new f;
+// TypeError: f is not a constructor
+</pre>
+
+<h3 id="Конструктор_car_(автомобиль)">Конструктор "car" (автомобиль)</h3>
+
+<p>Представьте, что Вы хотите создать тип объекта для автомобилей. Вы хотите, чтобы этот тип объектов назывался <code>car</code>, и Вы хотите, чтобы были свойства для производителя, модели и года выпуска. Чтобы сделать это, Вы должны написать следующую функцию:</p>
+
+<pre class="brush: js">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+</pre>
+
+<p>Теперь Вы можете создать объект, который называется <code>mycar</code> (мой автомобиль) следующим образом:</p>
+
+<pre class="brush: js">var mycar = new Car('Лада', 'Самара', 1993);</pre>
+
+<h3 id="В_Обещаниях_(Promises)">В Обещаниях (Promises)</h3>
+
+<p>В случае, когда возвращается незамедлительно разрешенное или незамедлительно отклоненное Обещание, Вам не нужно создавать новое Обещание <em>new Promise(...)</em> и работать с ним.</p>
+
+<p>Это неправильно (<a href="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise#Constructor">конструктор Обещания</a> вызывается неправильно) и будет вызывать исключение <code>TypeError: this is not a constructor</code>:</p>
+
+<pre class="brush: js example-bad">return new Promise.resolve(true);
+</pre>
+
+<p>Вместо этого используйте <a href="https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods">статические методы</a> - <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve">Promise.resolve()</a> или <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject">Promise.reject()</a> :</p>
+
+<pre class="brush: js">// Это допустимо, но слишком длинно, в этом нет необходимости:
+return new Promise((resolve, reject) =&gt; { resolve(true); })
+
+// Вместо этого, возвращайте статический метод:
+return Promise.resolve(true);
+return Promise.reject(false);
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{Glossary("constructor")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/not_a_function/index.html b/files/ru/web/javascript/reference/errors/not_a_function/index.html
new file mode 100644
index 0000000000..400db48a69
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/not_a_function/index.html
@@ -0,0 +1,84 @@
+---
+title: 'TypeError: "x" is not a function'
+slug: Web/JavaScript/Reference/Errors/Not_a_function
+tags:
+ - JavaScript
+ - TypeError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Not_a_function
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: "x" is not a function
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><span id="result_box" lang="ru"><span>Была сделана попытка</span> <span>вызвать</span> <span>значение</span> <span>как</span> <span>функцию</span><span>, но</span> <span>оно</span> <span>на самом деле не</span> <span>является функцией.</span> <span class="alt-edited">Некоторый код</span> <span>ожидает, что вы предоставите функцию</span><span>, но</span> <span>этого не происходит</span><span>.</span></span></p>
+
+<p>Возможно, есть ошибка в имени функции? Возможно, объект, метод которого вы вызываете, не содержит в себе этой функции? Для примера, JavaScript объекты не имеют <code>map</code> функции, а JavaScript Array - имеют.</p>
+
+<p>Есть множество функций нуждающихся в функциях обратного вызова. <span id="result_box" lang="ru"><span>Вы должны будете</span> <span class="alt-edited">предоставить функцию обратного вызова</span> <span>для того,</span> <span>чтобы эти</span> <span>методы работы</span> <span class="alt-edited">правильно</span></span>:</p>
+
+<ul>
+ <li>Когда работаете с  {{jsxref("Array")}} или {{jsxref("TypedArray")}} объектами:
+ <ul>
+ <li>{{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.forEach()")}}, {{jsxref("Array.prototype.map()")}}, {{jsxref("Array.prototype.filter()")}},  {{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}}, {{jsxref("Array.prototype.find()")}}</li>
+ </ul>
+ </li>
+ <li>Когда работаете с  {{jsxref("Map")}} и {{jsxref("Set")}} объектами:
+ <ul>
+ <li>{{jsxref("Map.prototype.forEach()")}} и {{jsxref("Set.prototype.forEach()")}}</li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ошибки_в_имени_функции">Ошибки в имени функции</h3>
+
+<p>В данном случае, случающемся очень часто, есть опечатка в имени метода:</p>
+
+<pre class="brush: js example-bad">var x = document.getElementByID("foo");
+// TypeError: document.getElementByID is not a function
+</pre>
+
+<p>Корректное имя функции - <code>getElementByI<strong>d</strong></code>:</p>
+
+<pre class="brush: js example-good">var x = document.getElementById("foo");
+</pre>
+
+<h3 id="Функция_вызвана_с_неверным_объектом">Функция вызвана с неверным объектом</h3>
+
+<p>Для некоторых методов, вы должны предоставить функцию обратного вызова и она будет работать только на корректных объектах.  В этом примере используется {{jsxref("Array.prototype.map()")}}, в котором {{jsxref("Array")}} будет работать только с массивами.</p>
+
+<pre class="brush: js example-bad">var obj = { a: 13, b: 37, c: 42 };
+
+obj.map(function(num) {
+ return num * 2;
+});
+
+// TypeError: obj.map is not a function</pre>
+
+<p>Использование с массивом:</p>
+
+<pre class="brush: js example-good">var numbers = [1, 4, 9];
+
+numbers.map(function(num) {
+ return num * 2;
+});
+
+// Array [ 2, 8, 18 ]
+</pre>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Functions</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/not_defined/index.html b/files/ru/web/javascript/reference/errors/not_defined/index.html
new file mode 100644
index 0000000000..039044b94c
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/not_defined/index.html
@@ -0,0 +1,66 @@
+---
+title: 'ReferenceError: "x" is not defined'
+slug: Web/JavaScript/Reference/Errors/Not_defined
+translation_of: Web/JavaScript/Reference/Errors/Not_defined
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">ReferenceError: "x" is not defined
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("ReferenceError")}}.</p>
+
+<h2 id="Что_пошло_не_так"><font><font>Что пошло не так?</font></font></h2>
+
+<p>Есть несуществующая переменная, которая ссылается куда-то. Эта переменная должна быть объявлена, или вам необходимо убедиться, что она доступна в вашем текущем скрипте или области исходного кода ( {{Glossary("scope")}}).</p>
+
+<div class="note">
+<p><strong>Заметка: </strong>При использовании стороних библиотек (такие как jQuery), убедитесь, что они загружаются до того, как вы используете переменные "$". Поместите тег {{HTMLElement("script")}} загружающий вашу библиотеку до того как вы будете использовать ее.</p>
+</div>
+
+<h2 id="Примеры"><font><font>Примеры</font></font></h2>
+
+<h3 id="Переменная_не_объявлена"><font><font>Переменная не объявлена</font></font></h3>
+
+<pre class="brush: js example-bad">foo.substring(1); // ReferenceError: foo is not defined
+</pre>
+
+<p>Переменная "Foo" не определена где-либо. Она должна быть в какой-то строке, так чтобы {{jsxref("String.prototype.substring()")}} метод начал работать.</p>
+
+<pre class="brush: js example-good">var foo = "bar";
+foo.substring(1); // "ar"</pre>
+
+<h3 id="Неправильная_зона_доступности"><font><font>Неправильная зона доступности</font></font></h3>
+
+<p>Переменная должна быть доступна в текущем контексте исполнения. Переменные, определенные внутри <a href="/ru/docs/Web/JavaScript/Reference/Functions">функции</a> не могут быть доступны из любой точки за пределами функции, так как переменная определена только в области видимости самой функции.</p>
+
+<pre class="brush: js example-bad">function numbers () {
+ var num1 = 2,
+ num2 = 3;
+ return num1 + num2;
+}
+
+console.log(num1); // ReferenceError num1 is not defined.</pre>
+
+<p>Тем не менее, функция может получить доступ ко всем переменным и функциям, определенным в области видимости, в которой она определена.  Другими словами, функция, определенная в глобальной области может получить доступ ко всем переменным, определенным в глобальном масштабе.</p>
+
+<pre class="brush: js example-good">var num1 = 2,
+ num2 = 3;
+
+function numbers () {
+ return num1 + num2;
+}
+
+console.log(num1); // 2</pre>
+
+<h2 id="Смотрите_также"><font><font>Смотрите также</font></font></h2>
+
+<ul>
+ <li>{{Glossary("Scope")}} - область видимости</li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявление переменных в руководстве по JavaScript</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Functions#Область_данных_и_замыкания">Область видимости функций в руководстве по JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/precision_range/index.html b/files/ru/web/javascript/reference/errors/precision_range/index.html
new file mode 100644
index 0000000000..74d433bc40
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/precision_range/index.html
@@ -0,0 +1,96 @@
+---
+title: 'RangeError: precision is out of range'
+slug: Web/JavaScript/Reference/Errors/Precision_range
+tags:
+ - JavaScript
+ - RangeError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Precision_range
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: precision {0} out of range (Firefox)
+RangeError: toExponential() argument must be between 0 and 20 (Chrome)
+RangeError: toFixed() digits argument must be between 0 and 20 (Chrome)
+RangeError: toPrecision() argument must be between 1 and 21 (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>В одном из следующих методов был использован аргумент, значение которого лежит вне допустимых интервалов:</p>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toExponential()")}}</li>
+ <li>{{jsxref("Number.prototype.toFixed()")}}</li>
+ <li>{{jsxref("Number.prototype.toPrecision()")}}</li>
+</ul>
+
+<p>Допустимые значения для аргументов данных методов обычно лежат в диапазоне от 0 до 20 (или 21), однако спецификация ECMAScript допускает его расширение.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Метод</th>
+ <th scope="col">Firefox (SpiderMonkey)</th>
+ <th scope="col">Chrome, Opera (V8)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{jsxref("Number.prototype.toExponential()")}}</td>
+ <td>от 0 до 100</td>
+ <td>от 0 до 20</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.prototype.toFixed()")}}</td>
+ <td>от -20 до 100</td>
+ <td>от 0 до 20</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Number.prototype.toPrecision()")}}</td>
+ <td>от 1 до 100</td>
+ <td>от 1 до 21</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Примеры_некорректного_кода">Примеры некорректного кода</h3>
+
+<pre class="brush: js example-bad">77.1234.toExponential(-1); // RangeError
+77.1234.toExponential(101); // RangeError
+
+2.34.toFixed(-100); // RangeError
+2.34.toFixed(1001); // RangeError
+
+1234.5.toPrecision(-1); // RangeError
+1234.5.toPrecision(101); // RangeError
+</pre>
+
+<h3 id="Примеры_правильного_кода">Примеры правильного кода</h3>
+
+<pre class="brush: js example-good">77.1234.toExponential(4); // 7.7123e+1
+77.1234.toExponential(2); // 7.71e+1
+
+2.34.toFixed(1); // 2.3
+2.35.toFixed(1); // 2.4 (обратите внимание: в данном случае производится округление в большую сторону)
+
+5.123456.toPrecision(5); // 5.1235
+5.123456.toPrecision(2); // 5.1
+5.123456.toPrecision(1); // 5
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toExponential()")}}</li>
+ <li>{{jsxref("Number.prototype.toFixed()")}}</li>
+ <li>{{jsxref("Number.prototype.toPrecision()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/property_access_denied/index.html b/files/ru/web/javascript/reference/errors/property_access_denied/index.html
new file mode 100644
index 0000000000..f59c2ceb92
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/property_access_denied/index.html
@@ -0,0 +1,47 @@
+---
+title: 'Error: Permission denied to access property "x"'
+slug: Web/JavaScript/Reference/Errors/Property_access_denied
+tags:
+ - Error
+ - Errors
+ - JavaScript
+ - Security
+translation_of: Web/JavaScript/Reference/Errors/Property_access_denied
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Error: Permission denied to access property "x"
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("Error")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><span class="seoSummary">Была попытка получить доступ к объекту, на который у вас нет разрешения. Вероятно, это элемент {{HTMLElement("iframe")}}, для которого вы нарушили <a href="/en-US/docs/Web/Security/Same-origin_policy">правило ограничения домена</a>.</span></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: html">&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"&gt;&lt;/iframe&gt;
+    &lt;script&gt;
+      onload = function() {
+ console.log(frames[0].document);
+ // Error: Permission denied to access property "document"
+ }
+    &lt;/script&gt;
+  &lt;/head&gt;
+  &lt;body&gt;&lt;/body&gt;
+&lt;/html&gt;</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{HTMLElement("iframe")}}</li>
+ <li><a href="/en-US/docs/Web/Security/Same-origin_policy">Same-origin policy</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/read-only/index.html b/files/ru/web/javascript/reference/errors/read-only/index.html
new file mode 100644
index 0000000000..4675e8008f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/read-only/index.html
@@ -0,0 +1,82 @@
+---
+title: 'TypeError: "x" is read-only(Ошибка Типа: "x" только для чтения)'
+slug: Web/JavaScript/Reference/Errors/Read-only
+translation_of: Web/JavaScript/Reference/Errors/Read-only
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщения">Сообщения</h2>
+
+<pre class="syntaxbox">TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge)
+TypeError: "x" доступен только для чтения (Firefox)
+TypeError: 0 доступен только для чтения (Firefox)
+TypeError: не удается назначить только для чтения свойство "x" из #&lt;объект&gt; (Chrome)
+TypeError: не удается назначить только для чтения свойство '0' [массив объектов] (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Назначенное свойство глобальной переменной или объекта является свойством только для чтения. (Технически это свойство данных, недоступное для записи.)</p>
+
+<p>Эта ошибка возникает только в коде строгого режима. В нестрогом коде назначение игнорируется.</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="недействительные_кейсы">недействительные кейсы</h3>
+
+<p>Свойства только для чтения не очень распространены, но их можно создать с помощью {{jsxref("Object.defineProperty()")}} или {{jsxref("Object.freeze()")}}.</p>
+
+<pre class="brush: js example-bad">'use strict';
+var obj = Object.freeze({name: 'Elsa', score: 157});
+obj.score = 0; // TypeError
+
+'use strict';
+Object.defineProperty(this, 'LUNG_COUNT', {value: 2, writable: false});
+LUNG_COUNT = 3; // TypeError
+
+'use strict';
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray[0]++; // TypeError
+</pre>
+
+<p>В JavaScript также встроено несколько свойств, доступных только для чтения. Возможно, вы пытались переопределить математическую константу.</p>
+
+<pre class="brush: js example-bad">'use strict';
+Math.PI = 4; // TypeError
+</pre>
+
+<p> </p>
+
+<p>Прости, ты не можешь этого сделать.</p>
+
+<p>Глобальная переменная undefined также доступна только для чтения, поэтому вы не можете заставить замолчать печально известную ошибку "undefined is not a function:</p>
+
+<p> </p>
+
+<pre class="brush: js example-bad">'use strict';
+undefined = function() {}; // TypeError: "undefined" доступен только для чтения
+</pre>
+
+<h3 id="Правильные_кейсы">Правильные кейсы</h3>
+
+<pre class="brush: js example-good">'use strict';
+var obj = Object.freeze({name: 'Score', points: 157});
+obj = {name: obj.name, points: 0}; // замена его на новый работающий объект
+
+'use strict';
+var LUNG_COUNT = 2; // "var` работает, потому что он не только для чтения
+LUNG_COUNT = 3; // ok (анатомически маловероятно, хотя)
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html
new file mode 100644
index 0000000000..781ea495ec
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/redeclared_parameter/index.html
@@ -0,0 +1,61 @@
+---
+title: 'SyntaxError: redeclaration of formal parameter "x"'
+slug: Web/JavaScript/Reference/Errors/Redeclared_parameter
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: redeclaration of formal parameter "x" (Firefox)
+SyntaxError: Identifier "x" has already been declared (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Одно и то же имя переменной сначала использовано в качестве параметра, а потом объявлено еще раз в теле функции с помощью оператора присваивания <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code>. В JavaScript не допустимо переопределение переменной в рамках области видимости функции или блока при помощи <code>let</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В данном случае переменная "arg" переопределяет аргумент:</p>
+
+<pre class="brush: js example-bad">function f(arg) {
+ let arg = 'foo';
+}
+
+// SyntaxError: redeclaration of formal parameter "arg"
+</pre>
+
+<p>Если вы хотите изменить значение переменной "arg" в теле функции, это можно сделать, но для этого не требуется объявлять эту же переменную еще раз. Иначе говоря, ключевое слово <code>let</code> можно опустить. Если же вы хотите создать новую переменную, необходимо ее переименовать, поскольку в противном случае она вступает в конфликт с уже существующим параметром функции.</p>
+
+<pre class="brush: js example-good">function f(arg) {
+ arg = 'foo';
+}
+
+function f(arg) {
+ let bar = 'foo';
+}
+</pre>
+
+<h2 id="Примечания_о_совместимости">Примечания о совместимости</h2>
+
+<ul>
+ <li>В версиях Firefox до Firefox 49 {{geckoRelease(49)}}, у данной ошибки был тип {{jsxref("TypeError")}} ({{bug(1275240)}}).</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Объявления">Объявления переменных</a> в <a href="/ru/docs/Web/JavaScript/Guide">Руководстве по JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html b/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html
new file mode 100644
index 0000000000..ef0179a7ca
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html
@@ -0,0 +1,89 @@
+---
+title: >-
+ TypeError: Reduce of empty array with no initial value(Тип ошибки: уменьшение
+ пустого массива без начального значения)
+slug: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value
+translation_of: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: уменьшение пустого массива без начального значения
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>В JavaScript существует несколько уменьщающих функций :</p>
+
+<ul>
+ <li>{{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}} и</li>
+ <li>{{jsxref("TypedArray.prototype.reduce()")}},  {{jsxref("TypedArray.prototype.reduceRight()")}}).</li>
+</ul>
+
+<p>Эти функции дополнительно принимают значение initialValue (которое будет использоваться в качестве первого аргумента для первого вызова обратного вызова). Однако если начальное значение не указано, будет использоваться первый элемент {{jsxref("Array")}} или {{jsxref("TypedArray")}} в качестве начального значения. Эта ошибка возникает, когда предоставляется пустой массив, так как в этом случае не может быть возвращено начальное значение.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильные_примеры">Неправильные примеры</h3>
+
+<p>Эта проблема часто возникает в сочетании с фильтром ({{jsxref("Array.prototype.filter()")}}, {{jsxref("TypedArray.prototype.filter()")}}) который удалит все элементы списка. Таким образом, не оставляя ни одного для использования в качестве начального значения.</p>
+
+<pre class="brush: js example-bad">var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x =&gt; x &gt; 0) // удаление всех элементов
+ .reduce((x, y) =&gt; x + y) // no more elements to use for the initial value.</pre>
+
+<p>Аналогично, та же проблема может возникнуть, если в селекторе есть опечатка или непредвиденное количество элементов в списке:</p>
+
+<pre class="brush: js example-bad">var names = document.getElementsByClassName("names");
+var name_list = Array.prototype.reduce.call(names, (acc, name) =&gt; acc + ", " + name);
+</pre>
+
+<h3 id="Правильные_примеры">Правильные примеры</h3>
+
+<p> </p>
+
+<p>Эти проблемы могут быть решены двумя различными способами.</p>
+
+<p>Один из способов - фактически предоставить initialValue в качестве нейтрального элемента оператора, например 0 для сложения, 1 для умножения или пустую строку для объединения</p>
+
+<p> </p>
+
+<pre class="brush: js example-good">var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x =&gt; x &lt; 0) // removes all elements
+ .reduce((x, y) =&gt; x + y, 0) // the initial value is the neutral element of the addition
+</pre>
+
+<p>Другим способом было бы два для обработки пустого случая, или перед вызовом reduce, или в обратном вызове после добавления неожиданного фиктивного начального значения.</p>
+
+<pre class="brush: js example-good">var names = document.getElementsByClassName("names");
+
+var name_list1 = "";
+if (names1.length &gt;= 1)
+ name_list1 = Array.prototype.reduce.call(names, (acc, name) =&gt; acc + ", " + name);
+// name_list1 == "" when names is empty.
+
+var name_list2 = Array.prototype.reduce.call(names, (acc, name) =&gt; {
+ if (acc == "") // initial value
+ return name;
+ return acc + ", " + name;
+}, "");
+// name_list2 == "" when names is empty.
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.reduce()")}}</li>
+ <li>{{jsxref("Array.prototype.reduceRight()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.reduce()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.reduceRight()")}}</li>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("TypedArray")}}</li>
+ <li>{{jsxref("Array.prototype.filter()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.filter()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/reserved_identifier/index.html b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html
new file mode 100644
index 0000000000..28c0df1add
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/reserved_identifier/index.html
@@ -0,0 +1,76 @@
+---
+title: 'SyntaxError: "x" is a reserved identifier'
+slug: Web/JavaScript/Reference/Errors/Reserved_identifier
+translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: The use of a future reserved word for an identifier is invalid (Edge)
+SyntaxError: "x" is a reserved identifier (Firefox)
+SyntaxError: Unexpected reserved word (Chrome)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Ключевые_слова">Ключевые слова</a> используются в качестве идентификаторов. Ключевые слова зарезервированные и в строгом и обычном режиме:</p>
+
+<ul>
+ <li><code>enum</code></li>
+</ul>
+
+<p>Следующие ключевые слова резервируются для кода, который выполняется только в строгом режиме (strict mode):</p>
+
+<ul class="threecolumns">
+ <li><code>implements</code></li>
+ <li><code>interface</code></li>
+ <li> <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li>
+ <li><code>package</code></li>
+ <li><code>private</code></li>
+ <li><code>protected</code></li>
+ <li><code>public</code></li>
+ <li><code>static</code></li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Строгий_и_нестрогий_режимы_резервирования_ключевых_строк">Строгий и нестрогий режимы резервирования ключевых строк</h3>
+
+<p>Идентификатор <code>enum</code> зарезервирован.</p>
+
+<pre class="brush: js example-bad">var enum = { RED: 0, GREEN: 1, BLUE: 2 };
+// SyntaxError: enum is a reserved identifier
+</pre>
+
+<p>Резервирование большего количества идентификаторов с использованием строгого режима.</p>
+
+<pre class="brush: js example-bad">"use strict";
+var package = ["potatoes", "rice", "fries"];
+// SyntaxError: package is a reserved identifier
+</pre>
+
+<p>Вам необходимо переименовать следующие переменные.</p>
+
+<pre class="brush: js example-good">var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
+var list = ["potatoes", "rice", "fries"];</pre>
+
+<h3 id="Обновление_старых_браузеров">Обновление старых браузеров</h3>
+
+<p>Например, если вы используете старый браузер, в котором еще не реализована функция <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code> или <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/class">class</a></code>, вам следует перейти на более новую версию браузера, которая поддерживает данные языковые функции.</p>
+
+<pre class="brush: js">"use strict";
+class DocArchiver {}
+
+// SyntaxError: class is a reserved identifier
+// (появится только в старых браузерах, например, Firefox 44 и старше)
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://wiki.c2.com/?GoodVariableNames">Правильные имена переменных</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html b/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html
new file mode 100644
index 0000000000..c3127a2dbf
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/resulting_string_too_large/index.html
@@ -0,0 +1,45 @@
+---
+title: 'RangeError: repeat count must be less than infinity'
+slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large
+translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
+
+RangeError: Invalid count value (Chrome)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("RangeError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Был использован метод {{jsxref("String.prototype.repeat()")}}, с параметром <code>count</code>, указывающим количество повторений строки. Параметр может принимать значения между 0 и положительной {{jsxref("Infinity")}}, и не может быть отрицательным числом. Диапазон допустимых значений может быть описан следующим образом: [0, + ∞).</p>
+
+<p>Полученная строка также не может превышать максимальный размер строки, который может отличаться в различных движках JavaScript. В Firefox (SpiderMonkey) максимальный размер строки составляет 2<sup>28</sup> -1 (<code>0xFFFFFFF</code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неверно">Неверно</h3>
+
+<pre class="brush: js example-bad">'abc'.repeat(Infinity); // RangeError
+'a'.repeat(2**28); // RangeError
+</pre>
+
+<h3 id="Верно">Верно</h3>
+
+<pre class="brush: js example-good">'abc'.repeat(0); // ''
+'abc'.repeat(1); // 'abc'
+'abc'.repeat(2); // 'abcabc'
+'abc'.repeat(3.5); // 'abcabcabc' (count will be converted to integer)
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.repeat()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/stmt_after_return/index.html b/files/ru/web/javascript/reference/errors/stmt_after_return/index.html
new file mode 100644
index 0000000000..fa7d1fe660
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/stmt_after_return/index.html
@@ -0,0 +1,84 @@
+---
+title: 'Warning: unreachable code after return statement'
+slug: Web/JavaScript/Reference/Errors/Stmt_after_return
+tags:
+ - JavaScript
+ - Return
+ - Warning
+ - Предупреждения
+translation_of: Web/JavaScript/Reference/Errors/Stmt_after_return
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">Warning: unreachable code after return statement (Firefox)
+</pre>
+
+<pre class="syntaxbox">Предупреждение: недоступный код после оператора <code>return </code>(Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>Предупреждение</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Недоступный код после оператора <code>return</code> может возникнуть в следующих ситуациях:</p>
+
+<ul>
+ <li>когда в коде программы есть какие-либо выражения после оператора {{jsxref("Statements/return", "return")}}</li>
+ <li>когда используется оператор <code>return</code> без точки с запятой, но далее непосредственно за ним следует выражение.</li>
+</ul>
+
+<p>Когда присутствует выражение после оператора <code>return</code>, то выдаётся предупреждение о том, что код программы после <code>return</code> недоступен, то есть он никогда не запустится и не выполнится.</p>
+
+<p>Почему нужно ставить точку с запятой после оператора <code>return</code>? В случае оператора <code>return</code> без точки с запятой, совсем неясно, хотел ли разработчик вернуть результат, вычисляемый в следующей строке, или же он хочет остановиться сейчас и выйти из подпрограммы. Предупреждение указывает на неопределённость результата работы оператора <code>return</code>.</p>
+
+<p>Предупреждение не появится для оператора <code>return</code> без точки с запятой, если за данной строкой следуют:</p>
+
+<ul>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+ <li>{{jsxref("Statements/break", "break")}}</li>
+ <li>{{jsxref("Statements/var", "var")}}</li>
+ <li>{{jsxref("Statements/function", "function")}}</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неверные_варианты">Неверные варианты</h3>
+
+<pre class="brush: js example-bad">function f() {
+ var x = 3;
+ x += 4;
+ return x; //return завершает функцию немедленно,
+ x -= 3; //поэтому эта строка никогда не запустится; она недоступна
+}
+
+function f() {
+ return //эта строка трактуется как завершение функции оператором `return;`,
+ 3 + 4; //поэтому происходит выход из функции, и эта строка не выполнится
+}
+</pre>
+
+<h3 id="Верные_варианты">Верные варианты</h3>
+
+<pre class="brush: js example-good">function f() {
+ var x = 3;
+ x += 4;
+ x -= 3;
+ return x; //OK: return находится после всех остальных выражений
+}
+
+function f() {
+ return 3 + 4 //OK: return без точки с запятой и вычисляемое выражение находятся на одной строке
+}
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/return", "Automatic Semicolon Insertion", "#Automatic_Semicolon_Insertion", 1)}}</li>
+</ul>
+
+<div id="dc_vk_code" style="display: none;"> </div>
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
new file mode 100644
index 0000000000..48917edbc1
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/strict_non_simple_params/index.html
@@ -0,0 +1,126 @@
+---
+title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters'
+slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
+translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<p> </p>
+
+<pre>Edge:
+Cannot apply strict mode on functions with non-simple parameter list
+
+Firefox:
+SyntaxError: "use strict" not allowed in function with default parameter
+SyntaxError: "use strict" not allowed in function with rest parameter
+SyntaxError: "use strict" not allowed in function with destructuring parameter
+
+Chrome:
+SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list</pre>
+
+<p>Перевод:</p>
+
+<pre class="syntaxbox">Edge:
+Не удается применить строгий режим к функциям со списком, содержащим сложные параметры
+
+Firefox:
+Ошибка синтаксиса: "use strict" не допускается в функции с параметром по умолчанию
+Ошибка синтаксиса: "use strict" не допускается в функции с rest параметром
+Ошибка синтаксиса: "use strict" не допускается в функции с параметром, использующим деструктуризацию
+
+Chrome:
+Ошибка синтаксиса: недопустимая директива 'use strict' в функции со списком, содержащим сложные параметры
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Директива <code>"use strict"</code> была использована в верхней части функции, которая имеет один из следующих параметров:<br>
+  </p>
+
+<ul>
+ <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li>
+ <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li>
+ <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметров", "", 1)}}</li>
+</ul>
+
+<p>Директива "use strict" не допускается в верхней части таких функций согласно спецификации ECMAScript.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Функция_заявления">Функция заявления</h3>
+
+<p>В этом случае функция sum имеет параметры по умолчанию a=1 и b=2:</p>
+
+<pre class="brush: js example-bad">function sum(a = 1, b = 2) {
+ //SyntaxError: использовать "use strict" не разрешено в функции с параметром по умолчанию
+ 'use strict';
+ return a + b;
+}
+</pre>
+
+<p>Если функция должна находиться в строгом режиме, и весь скрипт или заключающая функция также в порядке, чтобы быть в строгом режиме, вы можете переместить директиву "use strict" за пределы функции:</p>
+
+<pre class="brush: js example-good">'use strict';
+function sum(a = 1, b = 2) {
+ return a + b;
+}
+</pre>
+
+<h3 id="Функция_выражения">Функция выражения</h3>
+
+<p>Выражение функции может использовать еще один обходной путь:</p>
+
+<pre class="brush: js example-bad">var sum = function sum([a, b]) {
+ // SyntaxError: "use strict" не допускается в функции с параметром деструктурирования
+ 'use strict';
+ return a + b;
+};
+</pre>
+
+<p>Это может быть преобразовано в следующее выражение:</p>
+
+<pre class="brush: js example-good">var sum = (function() {
+ 'use strict';
+ return function sum([a, b]) {
+ return a + b;
+ };
+})();
+</pre>
+
+<h3 id="Указательная_функция">Указательная функция</h3>
+
+<p>Если функция со стрелкой должна получить доступ к переменной this, можно использовать функцию со стрелкой в качестве функции включения:</p>
+
+<pre class="brush: js example-bad">var callback = (...args) =&gt; {
+ // SyntaxError: "use strict" не допускается в функции с параметром rest
+ 'use strict';
+ return this.run(args);
+};
+</pre>
+
+<p>Это может быть преобразовано в следующее выражение:</p>
+
+<pre class="brush: js example-good">var callback = (() =&gt; {
+ 'use strict';
+ return (...args) =&gt; {
+ return this.run(args);
+ };
+})();
+</pre>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Strict_mode", "строгий режим", "", 1)}}</li>
+ <li>{{jsxref("Ведомости/функция", "оператор function", "", 1)}}</li>
+ <li>{{jsxref("операторы/функции", "свободное выражение функции", "", 1)}}</li>
+ <li>{{jsxref("функции/Default_parameters", "параметры по умолчанию", "", 1)}}</li>
+ <li>{{jsxref("функции/rest_parameters", "остальные параметры", "", 1)}}</li>
+ <li>{{jsxref("операторы/Destructuring_assignment", "деконструкция параметры", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/too_much_recursion/index.html b/files/ru/web/javascript/reference/errors/too_much_recursion/index.html
new file mode 100644
index 0000000000..45f59393a4
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/too_much_recursion/index.html
@@ -0,0 +1,54 @@
+---
+title: 'InternalError: too much recursion'
+slug: Web/JavaScript/Reference/Errors/Too_much_recursion
+tags:
+ - Errors
+ - InternalError
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">InternalError: too much recursion
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("InternalError")}}.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Функция, вызывающая сама себя, называется <em>рекурсивной функцией</em>. В некотором смысле рекурсия аналогична циклу. Оба выполняют один и тот же код несколько раз, и оба требуют условия (чтобы избежать бесконечного цикла или, вернее, бесконечной рекурсии в этом случае). Когда функция вызывается рекурсивно слишком много раз или бесконечно, JavaScript выдаёт эту ошибку<span class="seoSummary">.</span></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Функция выполняется рекурсивно 10 раз, в соответствии с условием выхода:</p>
+
+<pre class="brush: js">function loop(x) {
+ if (x &gt;= 10) // "x &gt;= 10" это условие выхода
+ return;
+ // do stuff
+ loop(x + 1); // рекурсивный вызов
+}
+loop(0);</pre>
+
+<p>В условии установлено слишком большое значение, не будет работать:</p>
+
+<pre class="brush: js example-bad">function loop(x) {
+ if (x &gt;= 1000000000000)
+ return;
+ // do stuff
+ loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{Glossary("Recursion")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Functions#Рекурсия">Рекурсия</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html b/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html
new file mode 100644
index 0000000000..076743b50c
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/typed_array_invalid_arguments/index.html
@@ -0,0 +1,78 @@
+---
+title: 'TypeError: invalid arguments'
+slug: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments
+tags:
+ - Error
+ - Errors
+ - JavaScript
+ - TypeError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: invalid arguments (Firefox)</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}</p>
+
+<h2 id="Что_не_так">Что не так?</h2>
+
+<p>Конструкторы <a href="/ru/docs/Web/JavaScript/Typed_arrays">типизированных массивов</a> требуют либо</p>
+
+<ul>
+ <li>длину,</li>
+ <li>другой типизированный массив,</li>
+ <li>массивоподобные объекты,</li>
+ <li>итерируемые объекты либо</li>
+ <li>объект {{jsxref("ArrayBuffer")}}</li>
+</ul>
+
+<p>чтобы создать новый типизированный массив. Другие аргументы конструктора не создают допустимый типизированный массив.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Типизированные массивы, например {{jsxref("Uint8Array")}}, не могут быть построены из строки. На самом деле строки вообще не могут быть в типизированных массивах.</p>
+
+<pre class="brush: js example-bad">var ta = new Uint8Array("nope");
+// TypeError: invalid arguments
+</pre>
+
+<p>Различные способы создания допустимого {{jsxref("Uint8Array")}}:</p>
+
+<pre class="brush: js example-good"> // From a length
+var uint8 = new Uint8Array(2);
+uint8[0] = 42;
+console.log(uint8[0]); // 42
+console.log(uint8.length); // 2
+console.log(uint8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Typed_arrays">Типизированные массивы</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("Uint8Array")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/undeclared_var/index.html b/files/ru/web/javascript/reference/errors/undeclared_var/index.html
new file mode 100644
index 0000000000..2c6705c496
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/undeclared_var/index.html
@@ -0,0 +1,66 @@
+---
+title: 'ReferenceError: assignment to undeclared variable "x"'
+slug: Web/JavaScript/Reference/Errors/Undeclared_var
+translation_of: Web/JavaScript/Reference/Errors/Undeclared_var
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">ReferenceError: assignment to undeclared variable "x" (Firefox)
+ReferenceError: "x" is not defined (Chrome)
+ReferenceError: Variable undefined in strict mode (Edge)
+</pre>
+
+<h2 id="Тип_ошбки">Тип ошбки</h2>
+
+<p>{{jsxref("ReferenceError")}} предупреждение только в <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">строгом режиме</a>.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<div id="gt-res-content">
+<div class="trans-verified-button-small" dir="ltr" id="gt-res-dir-ctr"><span id="result_box" lang="ru"><span>Значению присвоена необъявленная переменная.</span> <span>Другими словами, было задание без ключевого слова var.</span> <span>Существуют некоторые различия между объявленными и необъявленными переменными, что может привести к неожиданным результатам, поэтому JavaScript представляет ошибку в строгом режиме.</span></span></div>
+
+<div class="trans-verified-button-small" dir="ltr"> </div>
+</div>
+
+<p><span id="result_box" lang="ru"><span>Три примечания о объявленных и необъявленных переменных:</span></span></p>
+
+<ul>
+ <li><span id="result_box" lang="ru"><span>Объявленные переменные ограничены в контексте выполнения, в котором они объявлены.</span> <span>Необъявленные переменные всегда глобальны.</span></span></li>
+ <li><span id="result_box" lang="ru"><span>Объявленные переменные создаются до выполнения любого кода.</span> <span>Необъявленные переменные не существуют до тех пор, пока не будет выполняться присвоение им кода.</span></span></li>
+ <li><span id="result_box" lang="ru"><span>Объявленные переменные - это неконфигурируемое свойство контекста их выполнения (функция или глобальная).</span> <span>Необъявленные переменные настраиваются (например, могут быть удалены).</span></span></li>
+</ul>
+
+<p><span id="result_box" lang="ru"><span>Более подробную информацию и примеры см. На странице справки <code><a class="color:#3F93BC;" href="/ru/docs/Web/JavaScript/Reference/Statements/var">Переменных</a> </code></span></span></p>
+
+<p>Errors about undeclared variable assignments occur in <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode code</a> only. In non-strict code, they are silently ignored.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильно">Неправильно</h3>
+
+<p>В этом случае переменная "bar" является необъявленной переменной.</p>
+
+<pre class="brush: js example-bad">function foo() {
+ 'use strict';
+ bar = true;
+}
+foo(); // ReferenceError: assignment to undeclared variable bar
+</pre>
+
+<h3 id="Правильно">Правильно</h3>
+
+<p>Чтобы сделать "bar" объявленной переменной, вы можете добавить перед ней ключевое слово <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/var">var</a></code> .</p>
+
+<pre class="brush: js example-good">function foo() {
+ 'use strict';
+ var bar = true;
+}
+foo();</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">режим Strict</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/undefined_prop/index.html b/files/ru/web/javascript/reference/errors/undefined_prop/index.html
new file mode 100644
index 0000000000..fe6487cfa6
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/undefined_prop/index.html
@@ -0,0 +1,57 @@
+---
+title: 'ReferenceError: reference to undefined property "x"'
+slug: Web/JavaScript/Reference/Errors/Undefined_prop
+tags:
+ - JavaScript
+ - ReferenceError
+ - Ошибки
+ - Строгий режим
+translation_of: Web/JavaScript/Reference/Errors/Undefined_prop
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">ReferenceError: reference to undefined property "x" (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>(только в Firefox) Предупреждение {{jsxref("ReferenceError")}}, возникает, только если значение настройки <code>javascript.options.strict</code> равно <code>true</code>.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Совершена попытка обращения к свойству объекта, которое не определено. Существует два способа обращения к свойствам: обратитесь к странице справочника {{jsxref("Operators/Property_Accessors", "property accessors", 0, 1)}} для более подробной информации.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Случаи_возникновения_ошибки">Случаи возникновения ошибки</h3>
+
+<p>В данном примере свойство <code>bar</code> не определено, поэтому возникнет ошибка <code>ReferenceError</code>.</p>
+
+<pre class="brush: js example-bad">var foo = {};
+foo.bar; // ReferenceError: reference to undefined property "bar"
+</pre>
+
+<h3 id="Правильный_код">Правильный код</h3>
+
+<p>Чтобы избежать ошибки, потребуется либо задать для объекта свойство <code>bar</code>, либо проверить существование данного свойства, прежде чем обращаться к нему. Одним из способов это сделать является использование метода {{jsxref("Object.prototype.hasOwnProperty()")}}:</p>
+
+<pre class="brush: js example-good">var foo = {};
+
+// Задать свойство bar
+
+foo.bar = 'moon';
+console.log(foo.bar); // "moon"
+
+// Убедиться, что свойство bar существует, прежде чем обращаться к нему
+
+if (foo.hasOwnProperty('bar')) {
+ console.log(foo.bar);
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Operators/Property_Accessors", "property accessors", 0, 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/unexpected_token/index.html b/files/ru/web/javascript/reference/errors/unexpected_token/index.html
new file mode 100644
index 0000000000..52b6bca2de
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/unexpected_token/index.html
@@ -0,0 +1,74 @@
+---
+title: 'SyntaxError: Unexpected token'
+slug: Web/JavaScript/Reference/Errors/Unexpected_token
+tags:
+ - JavaScript
+ - SyntaxError
+ - Ошибки
+translation_of: Web/JavaScript/Reference/Errors/Unexpected_token
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: expected expression, got "x"
+SyntaxError: expected property name, got "x"
+SyntaxError: expected target, got "x"
+SyntaxError: expected rest argument name, got "x"
+SyntaxError: expected closing parenthesis, got "x"
+SyntaxError: expected '=&gt;' after argument list, got "x"
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Вместо определенной конструкции языка было использовано что-то другое. Возможно, просто опечатка.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ожидаемое_выражение">Ожидаемое выражение</h3>
+
+<p>Недопустимыми являются, к примеру, запятые после элементов цепочки выражений.</p>
+
+<pre class="brush: js example-bad">for (let i = 0; i &lt; 5,; ++i) {
+ console.log(i);
+}
+// SyntaxError: expected expression, got ';'
+</pre>
+
+<p>Правильным вариантом будет убрать запятую или добавить еще одно выражение:</p>
+
+<pre class="brush: js example-good">for (let i = 0; i &lt; 5; ++i) {
+ console.log(i);
+}
+</pre>
+
+<h3 id="Недостаточно_скобок">Недостаточно скобок</h3>
+
+<p>Иногда можно потерять скобки при использовании <code>if</code>:</p>
+
+<pre class="brush: js example-bad line-numbers language-js">function round(n, upperBound, lowerBound){
+ if(n &gt; upperBound) || (n &lt; lowerBound){
+ throw 'Число ' + String(n) + ' больше, чем ' + String(upperBound) + ', или меньше, чем ' + String(lowerBound);
+ }else if(n &lt; ((upperBound + lowerBound)/2)){
+ return lowerBound;
+ }else{
+ return upperBound;
+ }
+} // SyntaxError: expected expression, got '||'</pre>
+
+<p>На первый взгляд кажется, что скобки расставлены правильно, но обратите внимание, что <code>||</code> находится не в скобках. Необходимо заключить <code>||</code> в скобки:</p>
+
+<pre class="brush: js example-good">function round(n, upperBound, lowerBound){
+ if((n &gt; upperBound) || (n &lt; lowerBound)){
+ throw 'Число ' + String(n) + ' больше, чем ' + String(upperBound) + ', или меньше, чем ' + String(lowerBound);
+ }else if(n &lt; ((upperBound + lowerBound)/2)){
+ return lowerBound;
+ }else{
+ return upperBound;
+ }
+}
+</pre>
diff --git a/files/ru/web/javascript/reference/errors/unexpected_type/index.html b/files/ru/web/javascript/reference/errors/unexpected_type/index.html
new file mode 100644
index 0000000000..c8ccbe028f
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/unexpected_type/index.html
@@ -0,0 +1,63 @@
+---
+title: 'TypeError: "x" is (not) "y"'
+slug: Web/JavaScript/Reference/Errors/Unexpected_type
+translation_of: Web/JavaScript/Reference/Errors/Unexpected_type
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: "x" is (not) "y"
+
+Examples:
+TypeError: "x" is undefined
+TypeError: "x" is null
+TypeError: "undefined" is not an object
+TypeError: "x" is not an object or null
+TypeError: "x" is not a symbol
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="Что_случилось">Что случилось?</h2>
+
+<p>Встречен неожиданный тип. Это часто случается со значениями {{jsxref("null")}} или {{jsxref("undefined")}}.</p>
+
+<p>Так же, некоторые методы, такие как {{jsxref("Object.create()")}} или {{jsxref("Symbol.keyFor()")}}, требуют определенный тип, который должен быть предоставлен.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Недопустимые_случаи">Недопустимые случаи</h3>
+
+<pre class="brush: js example-bad">// Случаи undefined и null, при которых метод substring не будет работать
+var foo = undefined;
+foo.substring(1); // TypeError: foo is undefined
+
+var foo = null;
+foo.substring(1); // TypeError: foo is null
+
+
+// Некоторые методы могут требовать определенный тип
+var foo = {}
+Symbol.keyFor(foo); // TypeError: foo is not a symbol
+
+var foo = 'bar'
+Object.create(foo); // TypeError: "foo" is not an object or null
+</pre>
+
+<h3 id="Решение_проблемы">Решение проблемы</h3>
+
+<p>Что бы исправить ошибку пустого указателя вы можете использовать оператор <a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof.</a></p>
+
+<pre class="brush: js">if (typeof foo !== 'undefined') {
+ // Теперь мы знаем, что foo определено.
+}</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("undefined")}}</li>
+ <li>{{jsxref("null")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..791a215d11
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/unnamed_function_statement/index.html
@@ -0,0 +1,111 @@
+---
+title: 'SyntaxError: function statement requires a name(функция оператор требует имя)'
+slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement
+translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: ожидаемый идентификатор (Edge)
+SyntaxError: оператор функции требует имя [Firefox]
+SyntaxError: непредвиденный токен ( [Chrome]
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>В коде есть оператор function, для которого требуется имя. Вам нужно будет проверить, как определены функции и нужно ли предоставить для них имя, или если рассматриваемая функция должна быть выражением функции, {{Glossary("IIFE")}}, или если код функции вообще правильно размещен в этом контексте.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Операторы_vs_выражения">Операторы vs выражения</h3>
+
+<p>Оператор функции (или объявление функции) требует имя, это не будет работать:</p>
+
+<pre class="brush: js example-bad">function () {
+ return 'Hello world';
+}
+// SyntaxError: function statement requires a name
+</pre>
+
+<p>Вы можете использовать выражение функции (назначять) вместо:</p>
+
+<pre class="brush: js example-good">var greet = function() {
+ return 'Hello world';
+};</pre>
+
+<p>Или, ваша функция возможно, предназначена для IIFE (немедленно вызываемое выражение функции), которое является функцией, которая запускается, как только она определена. В этом случае вам понадобится еще несколько брекетов:</p>
+
+<pre class="brush: js example-good">(function () {
+
+})();</pre>
+
+<h3 id="Помеченные_функции">Помеченные функции</h3>
+
+<p>При использовании меток функций после ключевого слова function все равно потребуется указать имя функции. Это не работает:</p>
+
+<pre class="brush: js example-bad">function Greeter() {
+ german: function () {
+ return "Moin";
+ }
+}
+// SyntaxError: оператор функции требует имя
+</pre>
+
+<p>Это будет работать, например так:</p>
+
+<pre class="brush: js example-good">function Greeter() {
+ german: function g() {
+ return "Moin";
+ }
+}</pre>
+
+<h3 id="Методы_обьекта">Методы обьекта</h3>
+
+<p>Если вы намеревались создать метод объекта, вам нужно будет создать объект. Тогда допустим следующий синтаксис без имени после ключевого слова function.</p>
+
+<pre class="brush: js example-good">var greeter = {
+ german: function () {
+ return "Moin";
+ }
+};</pre>
+
+<h3 id="Синтаксис_вызова">Синтаксис вызова</h3>
+
+<p>Кроме того, проверьте синтаксис при использовании обратных вызовов. Скобки и запятые может получить трудно легко.</p>
+
+<pre class="brush: js example-bad">promise.then(
+ function() {
+ console.log("success");
+ });
+ function() {
+ console.log("error");
+}
+// SyntaxError: function statement requires a name
+</pre>
+
+<p>как бы было правильно:</p>
+
+<pre class="brush: json example-good">promise.then(
+ function() {
+ console.log("success");
+ },
+ function() {
+ console.log("error");
+ }
+);
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Functions">Functions in the JavaScript Guide</a> (функции в javascript"e гайд)</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">Оператор функции</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">Выражение функции</a></li>
+ <li><a href="https://en.wikipedia.org/wiki/Immediately-invoked_function_expression">IIFE</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/label">label</a> </li>
+</ul>
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
new file mode 100644
index 0000000000..4cd1fbdc1e
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/unterminated_string_literal/index.html
@@ -0,0 +1,64 @@
+---
+title: 'SyntaxError: unterminated string literal(незавершенный строковый литерал)'
+slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal
+translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">SyntaxError: незадействованная строковая константа (Edge)
+SyntaxError: незадействованный строковый литерал (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("SyntaxError")}}</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p>Где-то есть unterminated {{jsxref("String")}}. Строковые литералы должны быть заключены в одинарные <code>(')</code> или двойные <code>(")</code> кавычки. JavaScript не делает различий между строками в одинарных и двойных кавычках. Escape-последовательности работают в строках, созданных с одинарными или двойными кавычками. Чтобы исправить эту ошибку, проверьте:</p>
+
+<ul>
+ <li>у вас есть открывающие и закрывающие кавычки (одинарные или двойные) для строкового литерала,</li>
+ <li>вы правильно экранировали строковый литерал,</li>
+ <li>строковый литерал не разбивается на несколько строк.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Несколько_строк">Несколько строк</h3>
+
+<p>Вы не можете разделить строку на несколько строк, как в JavaScript:</p>
+
+<pre class="brush: js example-bad">var longString = 'Это очень длинная строка, которая нуждается
+                  перенос через несколько строк, потому что
+                  в противном случае мой код нечитаем.";
+// SyntaxError: незавершонный строковый литерал</pre>
+
+<p>Вместо этого используйте оператор+, обратную косую черту или литералы шаблона. Вариант оператора + выглядит следующим образом:</p>
+
+<pre class="brush: js example-good">var longString = ' Это очень длинная строка, которая нуждается в ' +
+                 'чтобы обернуть через несколько строк, потому что' +
+                 -иначе мой код будет нечитабелен.";
+</pre>
+
+<p>Или можно использовать символ обратной косой черты ("\") в конце каждой строки, чтобы указать, что строка будет продолжаться в следующей строке. Убедитесь, что после обратной косой черты нет пробелов или других символов (кроме разрыва строки) или отступа; в противном случае это не сработает. Эта форма выглядит следующим образом:</p>
+
+<pre class="brush: js example-good">var longString = 'Это очень длинная строка, которая нуждается \
+ переносе через несколько строк, потому что \
+ в противном случае мой код нечитаем.";
+</pre>
+
+<p>Еще одна возможность-использовать шаблонные литералы, поддерживаемые в средах ECMAScript 2015:</p>
+
+<pre class="brush: js example-good">var longString = `Это очень длинная строка, которая нуждается
+                  в переносе через несколько строк, потому что
+                  в противном случае мой код нечитаем.`;</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Template_literals">Template literals</a>(шаблонные литералы)</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html b/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html
new file mode 100644
index 0000000000..85ad505cbd
--- /dev/null
+++ b/files/ru/web/javascript/reference/errors/переменные_скрывают_аргумент/index.html
@@ -0,0 +1,60 @@
+---
+title: 'TypeError: переменная "x" переопределяет аргумент'
+slug: Web/JavaScript/Reference/Errors/Переменные_скрывают_аргумент
+tags:
+ - Errors
+ - JavaScript
+ - Strict Mode
+ - TypeError
+translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="Сообщение">Сообщение</h2>
+
+<pre class="syntaxbox">TypeError: переменная "x" повторно объявляет аргумент (Firefox)
+</pre>
+
+<h2 id="Тип_ошибки">Тип ошибки</h2>
+
+<p>{{jsxref("TypeError")}} предупреждение только в строгом режиме.</p>
+
+<h2 id="Что_пошло_не_так">Что пошло не так?</h2>
+
+<p> </p>
+
+<p>То же имя переменной происходит в качестве параметра функции, и затем повторно объявляется с помощью назначения var в теле функции. Это может быть конфликт имен, поэтому JavaScript предупреждает об этом.</p>
+
+<p>Эта ошибка возникает как предупреждение только в коде строгого режима. В нестрогом коде повторное объявление игнорируется.</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Неправильные_примеры">Неправильные примеры</h3>
+
+<p>В этом случае переменная "arg" объявляет аргумент повторно.</p>
+
+<pre class="brush: js example-bad">'use strict';
+
+function f(arg) {
+ var arg = 'foo';
+}
+</pre>
+
+<h3 id="Правильные_примеры">Правильные примеры</h3>
+
+<p>Чтобы исправить это предупреждение, оператор var можно просто опустить, так как переменная уже существует. В других случаях можно переименовать параметр функции или имя переменной. </p>
+
+<pre class="brush: js example-good">'use strict';
+
+function f(arg) {
+ arg = 'foo';
+}
+</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">Strict mode</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/arguments/callee/index.html b/files/ru/web/javascript/reference/functions/arguments/callee/index.html
new file mode 100644
index 0000000000..eaf41af79d
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/arguments/callee/index.html
@@ -0,0 +1,141 @@
+---
+title: arguments.callee
+slug: Web/JavaScript/Reference/Functions/arguments/callee
+translation_of: Web/JavaScript/Reference/Functions/arguments/callee
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>Свойство <code><strong>callee</strong> псевдомассива <strong>arguments</strong></code> хранит ссылку на функцию-родитель.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<div class="warning"><strong>Внимание:</strong> В ES5 <a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode" title="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/Strict_mode">strict mode</a> использование <code>arguments.callee</code> запрещено.</div>
+
+<h3 id="Зачем_вообще_использовать_arguments.callee">Зачем вообще использовать <code>arguments.callee</code>?</h3>
+
+<p>В ранних версиях javaScript отсутствовала такая фишка, как <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/function#%D0%98%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5">Named Function Expression </a>и единственным спасением было свойство <strong>callee</strong>. К примеру:</p>
+
+<pre class="brush: js">var f = function test() {
+ alert(typeof test); //undefined
+ alert(typeof arguments.callee); //function
+}
+</pre>
+
+<p>В нынешние времена, когда мы уже можем работать с <em>NFE</em>, надобность в использовании свойства <strong>callee </strong>сама собой отпадает<strong>.</strong></p>
+
+<pre class="brush: js">var f = function test(){
+ alert(typeof test); //function
+}</pre>
+
+<p> </p>
+
+<p>Действительно незаменимым оно остается всего в одной ситуации. Когда мы создаем анонимную функцию напрямую через конструктор <em>Function.</em></p>
+
+<pre class="line-numbers language-javascript"><code class="language-javascript"><span class="keyword token">var b = new Function("", "alert(typeof arguments.callee)");</span></code></pre>
+
+<p> </p>
+
+<h2 id="Пример_использования">Пример использования</h2>
+
+<p> </p>
+
+<h3 id="Использование_arguments.callee_для_создания_рекурсии">Использование <code>arguments.callee</code> для создания рекурсии</h3>
+
+<pre class="line-numbers language-javascript"><code class="language-javascript"><span class="keyword token">var factorial = function</span><span class="punctuation token">(</span>n<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> n<span class="operator token"> == </span><span class="number token">1</span> <span class="operator token">?</span> <span class="number token">1</span> <span class="punctuation token">:</span> n<span class="operator token"> * </span>arguments<span class="punctuation token">.</span><span class="function token">callee</span><span class="punctuation token">(</span>n<span class="number token">-1</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">};
+
+</span><span class="keyword token">factorial</span></code>(7);
+</pre>
+
+<p> </p>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.2</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/arguments/caller/index.html b/files/ru/web/javascript/reference/functions/arguments/caller/index.html
new file mode 100644
index 0000000000..0b6fe5cc4b
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/arguments/caller/index.html
@@ -0,0 +1,100 @@
+---
+title: arguments.caller
+slug: Web/JavaScript/Reference/Functions/arguments/caller
+tags:
+ - Functions
+ - JavaScript
+ - Obsolete
+ - Property
+ - arguments
+translation_of: Archive/Web/JavaScript/arguments.caller
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>Устаревшее свойство <strong><code>arguments.caller</code></strong> использовалось для того, чтобы определить источник вызова функции, выполняющейся в текущий момент времени. Данное свойство было удалено и больше не работает.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Данное свойство больше не доступно, но вы все так же можете использовать {{jsxref("Function.caller")}}.</p>
+
+<pre class="brush: js">function whoCalled() {
+ if (whoCalled.caller == null)
+ console.log('Меня вызвали из глобальной области видимости.');
+ else
+ console.log(whoCalled.caller + ' вызвал меня!');
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Код, приведенный ниже, больше не работает, но раньше он использовался для проверки значения <code>arguments.caller</code> функции.</p>
+
+<pre class="brush: js example-bad">function whoCalled() {
+ if (arguments.caller == null)
+ console.log('Меня вызвали из глобальной области видимости.');
+ else
+ console.log(arguments.caller + ' вызвал меня!');
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p>Не является частью какого-либо стандарта. Реализовано в JavaScript 1.1 и удалено в {{bug(7224)}}, поскольку влекло за собой потенциальную уязвимость.</p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}<br>
+ <a href="https://msdn.microsoft.com/en-US/library/gg622933(v=vs.85).aspx">удалено в IE 9</a></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/arguments/index.html b/files/ru/web/javascript/reference/functions/arguments/index.html
new file mode 100644
index 0000000000..13ef8edd8d
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/arguments/index.html
@@ -0,0 +1,241 @@
+---
+title: Объект arguments
+slug: Web/JavaScript/Reference/Functions/arguments
+tags:
+ - Functions
+ - JavaScript
+ - Reference
+ - arguments
+translation_of: Web/JavaScript/Reference/Functions/arguments
+---
+<div>
+<div>{{jsSidebar("Functions")}}</div>
+</div>
+
+<p>Объект <code><strong>arguments</strong></code> — это подобный массиву объект, который содержит аргументы, переданные в функцию.</p>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> Если вы пишите ES6-совместимый код, то лучше использовать <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">rest параметры</a>.</p>
+</div>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> "Подобный массиву" означает, что <code>arguments</code> имеет свойство {{jsxref("Functions/arguments/length", "length")}}, а элементы индексируются начиная с нуля. Но при это он не может обращаться к встроенным методам {{JSxRef("Array")}}, таким как {{jsxref("Array.forEach", "forEach()")}} или {{jsxref("Array.map", "map()")}}. Подробнее об этом в <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments#Описание">§Описании</a>.</p>
+</div>
+
+<p>{{EmbedInteractiveExample("pages/js/functions-arguments.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">arguments</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объект <code>arguments</code> — это локальная переменная, доступная внутри любой (нестрелочной) функции. Объект <code>arguments</code> позволяет ссылаться на аргументы функции внутри неё. Он состоит из переданных в функцию аргументов, индексация начинается с 0. Например, если в функцию было передано 3 аргумента, обратиться к ним можно следующим образом:</p>
+
+<pre class="brush: js">arguments[0]
+arguments[1]
+arguments[2]
+</pre>
+
+<p>Аргументам может быть присвоено значение:</p>
+
+<pre class="brush: js">arguments[1] = 'new value';</pre>
+
+<p>Объект <code>arguments</code> не является {{jsxref("Array")}}. Он похож на массив, но не обладает ни одним из его свойств, кроме <code><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments/length" title="JavaScript/Reference/Functions_and_function_scope/arguments/length">length</a></code>. Например, у него нет метода <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/pop" title="JavaScript/Reference/Global_Objects/Array/pop">pop</a></code>. Однако он может быть преобразован в обычный массив:</p>
+
+<pre class="brush: js">var args = Array.prototype.slice.call(arguments);
+<code>var args = [].slice.call(arguments);
+</code>
+<code>// ES2015
+const args = Array.from(arguments);</code>
+<code>const args = [...arguments];</code>
+</pre>
+
+<div class="warning">
+<p>Использование <code>slice</code> на объекте <code>arguments</code> не позволяет сделать оптимизации в некоторых JavaScript движках (например, V8 — <a href="https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#3-managing-arguments">подробнее</a>). Если они важны, можно попробовать вместо этого создать новый массив с аналогичной длиной и заполнить его элементами объекта <code>arguments.</code> Альтернативный вариант — использовать конструктор <code>Array</code> как функцию:</p>
+
+<pre class="brush: js"><code class="language-js"><span class="keyword token">var</span> args <span class="operator token">=</span> <span class="punctuation token">(</span>arguments<span class="punctuation token">.</span>length <span class="operator token">===</span> <span class="number token">1</span> <span class="operator token">?</span> <span class="punctuation token">[</span>arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span><span class="punctuation token">]</span> <span class="punctuation token">:</span> Array<span class="punctuation token">.</span><span class="function token">apply</span><span class="punctuation token">(</span><span class="keyword token">null</span><span class="punctuation token">,</span> arguments<span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+</div>
+
+<p>Объект <code>arguments</code> можно использовать при вызове функции с большим количеством аргументов, чем было предусмотрено в её объявлении. Такой способ удобен для функций, в которые допустимо передавать переменное количество аргументов. Можно воспользоваться <code><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments/length" title="JavaScript/Reference/Functions_and_function_scope/arguments/length">arguments.length</a></code>, чтобы определить количество переданных в функцию аргументов, а затем обработать каждый из них с помощью объекта <code>arguments</code>. Чтобы определить количество параметров функции, описанных в её <a href="/en-US/docs/Glossary/Signature/Function">сигнатуре</a>, можно использовать свойство <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/length" title="JavaScript/Reference/Global_Objects/Function/length">Function.length</a></code>.</p>
+
+<h3 id="Использование_typeof_с_объектом_arguments">Использование <code>typeof</code> с объектом <code>arguments</code></h3>
+
+<p>Применение оператора <code>typeof</code> к <code>arguments</code> вернёт 'object'.</p>
+
+<pre><code>console.log(typeof arguments); // 'object'</code></pre>
+
+<p>Определение типов аргументов может быть выполнено применением оператора <code>typeof</code> и индексацией.</p>
+
+<pre><code>// выведет тип первого аргумента
+console.log(typeof arguments[0]);</code></pre>
+
+<h3 id="Использование_оператора_расширения_для_объекта_arguments">Использование оператора расширения для объекта <code>arguments</code></h3>
+
+<p>Как и с обычными массиво-подобными объектами, для преобразования объекта <code>arguments</code> в обычный массив можно использовать метод {{jsxref("Array.from()")}} или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Spread_operator">оператор расширения:</a></p>
+
+<pre class="brush: js"><code class="language-js"><span class="keyword token">var</span> args <span class="operator token">=</span> Array<span class="punctuation token">.</span><span class="keyword token">from</span><span class="punctuation token">(</span>arguments<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> args <span class="operator token">=</span> <span class="punctuation token">[</span><span class="punctuation token">.</span><span class="punctuation token">.</span><span class="punctuation token">.</span>arguments<span class="punctuation token">]</span><span class="punctuation token">;</span></code></pre>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments/callee" title="JavaScript/Reference/Functions_and_function_scope/arguments/callee">arguments.callee</a></code></dt>
+ <dd>Ссылка на функцию, которая выполняется в текущий момент.</dd>
+ <dt><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/caller" title="JavaScript/Reference/Functions_and_function_scope/arguments/caller">arguments.caller</a></code> {{ Obsolete_inline() }}</dt>
+ <dd>Ссылка на функцию, которая вызвала функцию, выполняющуюся в текущий момент.</dd>
+ <dt><code><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments/length" title="JavaScript/Reference/Functions_and_function_scope/arguments/length">arguments.length</a></code></dt>
+ <dd>Количество переданных в функцию аргументов.</dd>
+ <dt><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/@@iterator">arguments[@@iterator]</a></code></dt>
+ <dd>Возвращает новый объект <code>Array Iterator</code>, содержащий значения для каждого индекса в массиве.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Создание_функции_соединяющей_несколько_строк">Создание функции, соединяющей несколько строк</h3>
+
+<p>Данный пример описывает функцию, которая соединяет несколько строк. Для этой функции объявлен только один аргумент, определяющий символ-разделитель соединяемых элементов. Функция определена следующим образом:</p>
+
+<pre class="brush:js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">myConcat</span><span class="punctuation token">(</span>separator<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> args <span class="operator token">=</span> Array<span class="punctuation token">.</span>prototype<span class="punctuation token">.</span>slice<span class="punctuation token">.</span><span class="function token">call</span><span class="punctuation token">(</span>arguments<span class="punctuation token">,</span> <span class="number token">1</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="keyword token">return</span> args<span class="punctuation token">.</span><span class="function token">join</span><span class="punctuation token">(</span>separator<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p>Вы можете передать любое количество аргументов в эту функцию. Она создает строку, используя каждый аргумент:</p>
+
+<pre class="brush:js">// возвращает "red, orange, blue"
+myConcat(", ", "red", "orange", "blue");
+
+// получает "elephant; giraffe; lion; cheetah"
+myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
+
+// выводит "sage. basil. oregano. pepper. parsley"
+myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");</pre>
+
+<h3 id="Функция_создающая_HTML_списки"> Функция, создающая HTML списки</h3>
+
+<p>В данном примере приведена функция, которая создает строку с HTML-разметкой для списка. Единственный ее аргумент - строка, определяющая вид списка: если его значение равно "u", формируется неупорядоченный (маркированный) список, а если "o", то упорядоченный (нумерованный):</p>
+
+<pre class="brush:js">function list(type) {
+ var result = "&lt;" + type + "l&gt;&lt;li&gt;";
+ var args = Array.prototype.slice.call(arguments, 1);
+ result += args.join("&lt;/li&gt;&lt;li&gt;");
+ result += "&lt;/li&gt;&lt;/" + type + "l&gt;"; // конец списка
+
+ return result;
+}</pre>
+
+<p>Вы можете использовать любое количество аргументов, а функция добавит каждый элемент в список заданного первым аргументом типа. Например:</p>
+
+<pre class="brush:js">var listHTML = list("u", "One", "Two", "Three");
+
+/* listHTML:
+
+"&lt;ul&gt;&lt;li&gt;One&lt;/li&gt;&lt;li&gt;Two&lt;/li&gt;&lt;li&gt;Three&lt;/li&gt;&lt;/ul&gt;"
+
+*/</pre>
+
+<h3 id="Оставшиеся_деструктурированные_и_параметры_по_умолчанию">Оставшиеся, деструктурированные и параметры по умолчанию</h3>
+
+<p>Объект <code>arguments</code> может использоваться совместно с <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшимися параметрами</a>, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметрами по умолчанию </a>или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурированными параметрами</a>.</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">foo</span><span class="punctuation token">(</span><span class="punctuation token">.</span><span class="punctuation token">.</span><span class="punctuation token">.</span>args<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> arguments<span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+<span class="function token">foo</span><span class="punctuation token">(</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="number token">2</span><span class="punctuation token">,</span> <span class="number token">3</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// { "0": 1, "1": 2, "2": 3 }</span></code></pre>
+
+<p>Тем не менее, в нестрогих функциях <strong>соответствие между их аргументами и объектом <code>arguments</code></strong> существует только в том случае, если функция <strong>не</strong> содержит никаких <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшихся параметров</a>, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметров по умолчанию</a> или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурированных параметров</a>. Например, в функции, приведенной ниже, используется параметр по умолчанию, и в данном случае возвращаемый результат будет равен 10, а не 100:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">bar</span><span class="punctuation token">(</span>a<span class="operator token">=</span><span class="number token">1</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">100</span><span class="punctuation token">;</span>
+ <span class="keyword token">return</span> a<span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+<span class="function token">bar</span><span class="punctuation token">(</span><span class="number token">10</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// 10</span></code></pre>
+
+<p>В следующем примере возвращается 100, поскольку здесь нет <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшихся параметров</a>, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметров по умолчанию</a> или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурированных параметров</a>:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">zoo</span><span class="punctuation token">(</span>a<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">100</span><span class="punctuation token">;</span>
+ <span class="keyword token">return</span> a<span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+<span class="function token">zoo</span><span class="punctuation token">(</span><span class="number token">10</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// 100</span></code></pre>
+
+<p>На самом деле, если <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшиеся параметры</a>, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметры по умолчанию</a> или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурированные параметры</a> не используются, формальные аргументы будут ссылаться на последние значения объекта <strong><code>arguments</code></strong>, при считывании значений формальных аргументов будут считаны последние данные из <strong><code>arguments</code></strong>, а при изменении значений формальных аргументов будет обновлен и объект <strong><code>arguments</code></strong>. Пример приведен в коде ниже:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">func</span><span class="punctuation token">(</span>a<span class="punctuation token">,</span> b<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">90</span><span class="punctuation token">;</span>
+ arguments<span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">99</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>a <span class="operator token">+</span> <span class="string token">" "</span> <span class="operator token">+</span> b<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="function token">func</span><span class="punctuation token">(</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="number token">2</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">//90, 99</span></code></pre>
+
+<p>или</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">func</span><span class="punctuation token">(</span>a<span class="punctuation token">,</span> b<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ a <span class="operator token">=</span> <span class="number token">9</span><span class="punctuation token">;</span>
+ b <span class="operator token">=</span> <span class="number token">99</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">+</span> <span class="string token">" "</span> <span class="operator token">+</span> arguments<span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">]</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="function token">func</span><span class="punctuation token">(</span><span class="number token">3</span><span class="punctuation token">,</span> <span class="number token">4</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">//9, 99</span></code></pre>
+
+<p>Но в случае, когда применяются <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшиеся параметры</a>, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметры по умолчанию</a> или <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурированные параметры</a>, будет обработано нормальное поведение, как в случае <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметров по умолчанию</a>:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">func</span><span class="punctuation token">(</span>a<span class="punctuation token">,</span> b<span class="punctuation token">,</span> c<span class="operator token">=</span><span class="number token">9</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ arguments<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">99</span><span class="punctuation token">;</span>
+ arguments<span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">]</span> <span class="operator token">=</span> <span class="number token">98</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>a <span class="operator token">+</span> <span class="string token">" "</span> <span class="operator token">+</span> b<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="function token">func</span><span class="punctuation token">(</span><span class="number token">3</span><span class="punctuation token">,</span> <span class="number token">4</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">//3, 4</span></code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.1</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.functions.arguments")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/arguments/length/index.html b/files/ru/web/javascript/reference/functions/arguments/length/index.html
new file mode 100644
index 0000000000..4411d266e5
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/arguments/length/index.html
@@ -0,0 +1,117 @@
+---
+title: arguments.length
+slug: Web/JavaScript/Reference/Functions/arguments/length
+translation_of: Web/JavaScript/Reference/Functions/arguments/length
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p><strong><code>arguments.length</code></strong>  свойство, содержащее число аргументов переданных в функцию.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">arguments.length</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>arguments.length свойство содержашее число аргументов переданных в функцию. Оно может быть больше или меньше опреденного параметра count (см. {{jsxref("Function.length")}}).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_arguments.length"><code>Использование arguments.length</code></h3>
+
+<p>В этом примере мы определяем функцию, которая может сложить 2 или более чисел вместе.</p>
+
+<pre class="brush: js">function adder(base /*, n2, ... */) {
+ base = Number(base);
+ for (var i = 1; i &lt; arguments.length; i++) {
+ base += Number(arguments[i]);
+ }
+ return base;
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Standard</td>
+ <td>Initial definition. Implemented in JavaScript 1.1</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'Arguments Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-exotic-objects', 'Arguments Exotic Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Function.length")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/arrow_functions/index.html b/files/ru/web/javascript/reference/functions/arrow_functions/index.html
new file mode 100644
index 0000000000..b903c96852
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/arrow_functions/index.html
@@ -0,0 +1,378 @@
+---
+title: Стрелочные функции
+slug: Web/JavaScript/Reference/Functions/Arrow_functions
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Функции
+translation_of: Web/JavaScript/Reference/Functions/Arrow_functions
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p><strong>Выражения стрелочных функций</strong> имеют более короткий синтаксис по сравнению с <a href="/ru/docs/Web/JavaScript/Reference/Operators/function">функциональными выражениями</a> и лексически привязаны к значению <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a> (но не привязаны к собственному <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a>, <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>, <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/super">super</a>, или <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a>). Выражение стрелочных функций не позволяют задавать имя, поэтому стрелочные функции <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/name">анонимны</a>, если их ни к чему не присвоить.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<h3 id="Базовый_синтаксис">Базовый синтаксис</h3>
+
+<pre class="brush: js">(param1, param2, …, paramN) =&gt; { statements }
+(param1, param2, …, paramN) =&gt; expression
+// эквивалентно: (param1, param2, …, paramN) =&gt; { return expression; }
+
+// Круглые скобки не обязательны для единственного параметра:
+(singleParam) =&gt; { statements }
+singleParam =&gt; { statements }
+
+// Функция без параметров нуждается в круглых скобках:
+() =&gt; { statements }
+() =&gt; expression
+// Эквивалентно: () =&gt; { return expression; }
+</pre>
+
+<h3 id="Расширенный_синтаксис">Расширенный синтаксис</h3>
+
+<pre class="brush: js">// Когда возвращаете литеральное выражение объекта, заключите тело в скобки
+params =&gt; ({foo: bar})
+
+// <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">Rest параметры</a> и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">параметры по умолчанию</a> поддерживаются
+(param1, param2, ...rest) =&gt; { statements }
+(param1 = defaultValue1, param2, …, paramN = defaultValueN) =&gt; { statements }
+
+// <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">Деструктуризация</a> тоже поддерживается
+var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) =&gt; a + b + c;
+f(); // 6
+</pre>
+
+<p>Подробные примеры синтаксиса можно посмотреть <a href="http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax" title="http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax">здесь</a>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Смотрите также <a href="https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/">"ES6 In Depth: Arrow functions" on hacks.mozilla.org</a>.</p>
+
+<p>Два фактора повлияли на появление стрелочных функции: более короткий синтаксис и лексика <code>this</code>.</p>
+
+<h3 id="Короткие_функции">Короткие функции</h3>
+
+<p>В некоторых функциональных шаблонах приветствуются более короткие функции. Сравните:</p>
+
+<pre class="brush: js">var elements = [
+ 'Hydrogen',
+ 'Helium',
+ 'Lithium',
+ 'Beryllium'
+];
+
+elements.map(function(element) {
+ return element.length;
+}); // Это выражение вернет массив [8, 6, 7, 9]
+
+// Функцию выше можно записать как стрелочную функцию:
+elements.map((element) =&gt; {
+ return element.length;
+}); // [8, 6, 7, 9]
+
+// Если единственным оператором в выражении стрелочной функции является return,
+// можно удалить return и окружающие фигурные скобки
+
+elements.map(element =&gt; element.length); // [8, 6, 7, 9]
+
+// В данном случае, поскольку нам нужно только свойство length, мы можем использовать деструктуризированный параметр:
+// Обратите внимание, что строка `"length"` соответствует свойству, которое мы хотим получить,
+// в то время как `lengthFooBArX` это просто имя переменной, которую можно назвать как вы хотите
+elements.map(({ "length": lengthFooBArX }) =&gt; lengthFooBArX); // [8, 6, 7, 9]
+
+// Это задание деструктуризированного параметра может быть записано, как показано ниже. Тем не менее, обратите внимание,
+// что нет строки `"length"`, чтобы выбрать, какое свойство мы хотим получить. Вместо этого в качестве свойства,
+// которое мы хотим извлечь из объекта, используется само литеральное имя переменной `length`
+elements.map(({ length }) =&gt; length); // [8, 6, 7, 9]
+</pre>
+
+<h3 id="Отсутствие_связывания_с_this">Отсутствие связывания с <code>this</code></h3>
+
+<p>До появления стрелочных функций, каждая новая функция имела своё значение <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code> (новый объект в случае конструктора, undefined в <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">strict</a> режиме вызова функции, контекст объекта при вызове функции как "метода объекта" и т.д.). Это очень раздражало при использовании объектно-ориентированного стиля программирования.</p>
+
+<pre class="brush: js">function Person() {
+ // В конструкторе Person() `this` указывает на себя.
+  this.age = 0;
+
+ setInterval(function growUp() {
+ // В нестрогом режиме, в функции growUp() `this` указывает
+ // на глобальный объект, который отличается от `this`,
+ // определяемом в конструкторе Person().
+   this.age++;
+ }, 1000);
+}
+
+var p = new Person();
+</pre>
+
+<p>В ECMAScript 3/5, данная проблема решалась присваиванием значения <code>this</code> переменной:</p>
+
+<pre class="brush: js">function Person() {
+ var that = this;
+ that.age = 0;
+
+ setInterval(function growUp() {
+ // Функция с обратным вызовом(<a href="/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks">callback</a>) содержит переменную that, которая
+ // ссылается на требуемый объект this.
+ that.age++;
+ }, 1000);
+}</pre>
+
+<p>Кроме этого, может быть создана <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/bind">привязанная функция</a>, в которую передаётся требуемое значение <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code> для функции (функция <code>growUp()</code> в примере выше).</p>
+
+<p>Стрелочные функции не содержат собственный контекст <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code>, а используют значение <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/this">this</a></code> окружающего контекста. Поэтому нижеприведенный код работает как предполагалось:</p>
+
+<pre class="brush: js">function Person(){
+ this.age = 0;
+
+ setInterval(() =&gt; {
+ this.age++; // `this` указывает на объект Person
+ }, 1000);
+}
+
+var p = new Person();</pre>
+
+<h4 id="Строгий_режим_исполнения">Строгий режим исполнения</h4>
+
+<p>Поскольку значение <code>this</code> определяется лексикой, правила строгого режима (<a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>) относительно <code>this</code> игнорируются:</p>
+
+<pre class="brush: js">var f = () =&gt; { 'use strict'; return this; };
+f() === window; // или глобальный объект</pre>
+
+<p>Все остальные правила строгого режима применяются как обычно.</p>
+
+<h4 id="Вызов_с_помощью_call_или_apply">Вызов с помощью call или apply</h4>
+
+<p>Так как значение <code>this</code> определяется лексикой, вызов стрелочных функций с помощью методов <code>call()</code> или <code>apply()</code>, даже если передать аргументы в эти методы, не влияет на значение <code>this</code>:</p>
+
+<pre class="brush: js">var adder = {
+ base : 1,
+
+ add : function(a) {
+ var f = v =&gt; v + this.base;
+ return f(a);
+ },
+
+ addThruCall: function(a) {
+ var f = v =&gt; v + this.base;
+ var b = {
+ base : 2
+ };
+
+ return f.call(b, a);
+ }
+};
+
+console.log(adder.add(1)); // Выводит 2
+console.log(adder.addThruCall(1)); // Всё равно выводит 2
+</pre>
+
+<h3 id="Не_имеет_собственного_объекта_arguments">Не имеет собственного объекта arguments</h3>
+
+<p>Стрелочные функции не имеют собственного объекта arguments, поэтому в теле стрелочных функций arguments будет ссылаться на переменную в окружающей области.</p>
+
+<pre class="brush: js">var arguments = 42;
+var arr = () =&gt; arguments;
+
+arr(); // 42
+
+function foo() {
+ var f = (i) =&gt; arguments[0] + i; // Неявное связывание ссылки arguments
+  // стрелочной функции f
+ // c объектом arguments функции foo
+ return f(2);
+}
+
+foo(1); // 3</pre>
+
+<p>В большинстве случаев лучшей заменой объекта arguments в стрелочных функциях являются <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">rest параметры</a>:</p>
+
+<pre class="brush: js">function foo() {
+ var f = (...args) =&gt; args[0];
+ return f(2);
+}
+
+foo(1); // 2
+</pre>
+
+<h3 id="Использование_стрелочных_функций_как_методов">Использование стрелочных функций как методов</h3>
+
+<p>Как показано ранее, стрелочные функции лучше всего подходят для функций без методов. Посмотрим, что будет, когда мы попробуем их использовать как методы:</p>
+
+<pre class="brush: js">'use strict';
+var obj = {
+ i: 10,
+ b: () =&gt; console.log(this.i, this),
+ c: function() {
+ console.log(this.i, this);
+ }
+}
+obj.b(); // prints undefined, Window {...} (или глобальный объект)
+obj.c(); // prints 10, Object {...}
+</pre>
+
+<p>Стрелочные функции не объявляют привязку ("bind") их контекста <code>this</code>. Другой пример включает {{jsxref("Object.defineProperty()")}}:</p>
+
+<pre class="brush: js">'use strict';
+var obj = {
+ a: 10
+};
+
+Object.defineProperty(obj, 'b', {
+ get: () =&gt; {
+ console.log(this.a, typeof this.a, this);
+ return this.a + 10;
+ // представляет глобальный объект 'Window', но 'this.a' возвращает 'undefined'
+ }
+});</pre>
+
+<h3 id="Использование_оператора_new">Использование оператора <code>new</code></h3>
+
+<p>Стрелочные функции не могут быть использованы как конструктор и вызовут ошибку при использовании с <code>new</code>:</p>
+
+<pre class="brush: js">var a = new (function() {})
+// переменной "a" будет присвоено значение экземпляра анонимной функции
+
+var b = new (() =&gt; {})
+// будет выброшено исключениe
+// Uncaught TypeError: (intermediate value) is not a constructor</pre>
+
+<h3 id="Использование_ключевого_слова_yield">Использование ключевого слова <code>yield</code></h3>
+
+<p>Ключевое слово <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code> не может быть использовано в теле стрелочной функции (за исключением случаев, когда разрешается использовать в функциях, вложенных в тело стрелочной функции). Как следствие стрелочные функции не могут быть использованы как генераторы.</p>
+
+<h2 id="Тело_функции">Тело функции</h2>
+
+<p>Тело стрелочной функции может иметь краткую (concise body) или блочную (block body) форму.</p>
+
+<p>Блочная форма не возвращает значение, необходимо явно вернуть значение.</p>
+
+<pre class="brush: js">var func = x =&gt; x * x; // краткий синтаксис,
+  // неявно возвращает результат
+var func = (x, y) =&gt; { return x + y; }; // блочный синтаксис,
+  // явно возвращает результат</pre>
+
+<h2 id="Возвращаемые_объектные_строки_литералы">Возвращаемые объектные строки (литералы)</h2>
+
+<p>Помните о том, что возвращаемые <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Литерал_объекта/">объектные строки</a> используют сокращённый синтаксис: <code>params =&gt; {object:literal}</code> будет работать не так, как ожидается.</p>
+
+<pre class="brush: js">var func = () =&gt; { foo: 1 };
+// Вызов func() возвращает undefined!
+
+var func = () =&gt; { foo: function() {} };
+// SyntaxError: function statement requires a name</pre>
+
+<p>Это происходит потому что код в скобках ({}) распознаётся как цепочка выражений (т.е. <code>foo</code> трактуется как наименование, а не как ключ в объектной строке).</p>
+
+<p>Не забывайте оборачивать скобками объектные строки.</p>
+
+<pre class="brush: js">var func = () =&gt; ({ foo: 1 });</pre>
+
+<h2 id="Разрывы_строк">Разрывы строк</h2>
+
+<p>Стрелочная функция не может содержать разрывы строк между параметрами и стрелкой.</p>
+
+<pre class="brush: js line-numbers language-js">var func = ()
+ =&gt; 1;
+// SyntaxError: expected expression, got '=&gt;'
+</pre>
+
+<h2 id="Разбор_порядка_следования">Разбор порядка следования</h2>
+
+<p>Поскольку стрелка в стрелочной функции не является оператором, то стрелочные функции имеют специальные правила разбора (парсинга), которые взаимодействуют с <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence/">приоритетами операторов</a>  иначе, чем в обычных функциях.</p>
+
+<pre class="brush: js">let callback;
+
+callback = callback || function() {}; // ok
+
+callback = callback || () =&gt; {};
+// SyntaxError: invalid arrow-function arguments
+
+callback = callback || (() =&gt; {}); // ok
+</pre>
+
+<h2 id="Больше_примеров">Больше примеров</h2>
+
+<pre class="brush: js">// Пустая стрелочная функция возвращает undefined
+let empty = () =&gt; {};
+
+(() =&gt; 'foobar')();
+// Вернёт "foobar"
+// (Это Immediately Invoked Function Expression
+// смотри '<a href="https://developer.mozilla.org/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/IIFE">IIFE</a>' в справочнике)
+
+var simple = a =&gt; a &gt; 15 ? 15 : a;
+simple(16); // 15
+simple(10); // 10
+
+let max = (a, b) =&gt; a &gt; b ? a : b;
+
+// Удобные операции над массивами: filter, map, ...
+
+var arr = [5, 6, 13, 0, 1, 18, 23];
+
+var sum = arr.reduce((a, b) =&gt; a + b);
+// 66
+
+var even = arr.filter(v =&gt; v % 2 == 0);
+// [6, 0, 18]
+
+var double = arr.map(v =&gt; v * 2);
+// [10, 12, 26, 0, 2, 36, 46]
+
+// Более короткие цепочки promise-ов
+promise.then(a =&gt; {
+ // ...
+}).then(b =&gt; {
+ // ...
+});
+
+// Стрелочные функции без параметров, которые визуально легче разбирать
+setTimeout( () =&gt; {
+ console.log('Я буду раньше');
+ setTimeout( () =&gt; {
+ // deeper code
+ console.log('Я буду позже');
+ }, 1);
+}, 1);
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arrow-function-definitions', 'Arrow Function Definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.functions.arrow_functions")}}</p>
+
+<h3 id="Замечания_для_Firefox">Замечания для Firefox</h3>
+
+<ul>
+ <li>Первоначальная реализация стрелочных функций в Firefox автоматически переводила их в строгий режим. Это поведение было изменено в <a href="/en-US/docs/Mozilla/Firefox/Releases/24" title="/en-US/docs/Mozilla/Firefox/Releases/24">Firefox 24</a>. Использование <code>"use strict";</code> стало обязательным.</li>
+ <li>Стрелочные функции семантически отличаются от нестандартных <a href="/ru/docs/Web/JavaScript/Reference/Operators/Expression_closures">Expression Closures</a>, добавленных в <a href="/en-US/Firefox/Releases/3">Firefox 3</a> (подробности в <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.8">Javascript 1.8</a>); в Expression Closures значение <code>this</code> не привязано лексически.</li>
+ <li>До <a href="https://developer.mozilla.org/en-US/Firefox/Releases/39">Firefox 39</a>, перенос строки (<code>\n</code>) был ошибочно разрешён после аргументов стрелочной функции. Это было исправлено для соблюдения спецификации ES2015, и код вроде: <code>() \n =&gt; {}</code> теперь вызывает {{jsxref("SyntaxError")}} в этой и более поздних версиях.</li>
+</ul>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/">"ES6 In Depth: Arrow functions" on hacks.mozilla.org</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/default_parameters/index.html b/files/ru/web/javascript/reference/functions/default_parameters/index.html
new file mode 100644
index 0000000000..2e6568b816
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/default_parameters/index.html
@@ -0,0 +1,217 @@
+---
+title: Параметры по умолчанию
+slug: Web/JavaScript/Reference/Functions/Default_parameters
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Функции
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Functions/Default_parameters
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p><strong>Параметры по умолчанию</strong> позволяют задавать формальным параметрам функции значения по умолчанию в случае, если функция вызвана без аргументов, или если параметру явным образом передано значение <code>undefined</code>.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/functions-default.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">function [<em>name</em>]([<em>param1</em>[ = defaultValue1 ][, ..., <em>paramN</em>[ = defaultValueN ]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<h2 id="Example" name="Example">Описание</h2>
+
+<p>В JavaScript параметры функции, которым при ее вызове не передаются значения, принимают по умолчанию значение <code>{{jsxref("undefined")}}</code>. Однако в некоторых случаях может быть полезно задать иное значение по умолчанию. Именно для таких случаев предназначены параметры по умолчанию.</p>
+
+<p>В прошлом для проверки параметров и задания их значений по умолчанию использовался код в теле функции, в котором проверялось, не равны ли значения параметров <code>undefined</code>.</p>
+
+<p>В приведённом ниже примере, в случае если при вызове функции значение для параметра <code>b</code> не передавалось, его значением становилось <code>undefined</code>,  и результатом вычисления <code>a * b</code> в функции <code>multiply</code> получалось значение <code>NaN</code>.</p>
+
+<pre class="brush: js">function multiply(a, b) {
+ return a * b;
+}
+
+multiply(5, 2); // 10
+multiply(5); // NaN !</pre>
+
+<p>Чтобы такого не происходило, в теле функции использовался код подобный тому, что находится во второй строчке, где в случае, если функция <code>multiply</code> вызывалась только c одним аргументом, параметру <code>b</code> присваивалось значение <code>1</code>:</p>
+
+<pre class="brush: js">function multiply(a, b) {
+ b = typeof b !== 'undefined' ? b : 1;
+ return a*b;
+}
+
+multiply(5, 2); // 10
+multiply(5); // 5
+</pre>
+
+<p>С появлением в ES2015 параметров по умолчанию стало возможным обходиться без проверки параметров в теле функции. Так, в приведенном выше примере достаточно в заголовке функции указать <code>1</code> в качестве значения по умолчанию для параметра <code>b</code>:</p>
+
+<pre class="brush: js">function multiply(a, b = 1) {
+ return a*b;
+}
+
+multiply(5, 2); // 10
+multiply(5); // 5
+multiply(5, undefined); // 5</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Передача_значения_undefined_в_сравнении_с_передачей_других_ложных_значений">Передача значения <code>undefined</code> в сравнении с передачей других "ложных" значений</h3>
+
+<p>Значение по умолчанию присваивается формальному параметру только если при вызове функции значение для данного параметра не было передано или было явным образом передано <code>undefined</code>. Если формальному параметру при вызове передано любое значение, отличное от <code>undefined</code>, в том числе одно из <a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Falsy">"ложных"</a> значений, таких как <code>false</code>, <code>0</code>, <code>""</code>, <code>''</code>, <code>``</code>, <code>null</code>, <code>NaN</code>, то в этом случае значение по умолчанию присвоено параметру не будет.  Это иллюстрирует следующий пример:</p>
+
+<pre class="brush: js">function test(num = 1) {
+ console.log(typeof num);
+}
+
+// num не прередано, или передано undefined:
+test(); // 'number' (num получил значение 1)
+test(undefined); // 'number' (и здесь num получил значение 1)
+
+// num передано значение null или другое "ложное" значение:
+test(''); // 'string' (num получил значение '')
+test(null); // 'object' (num получил значение null)
+</pre>
+
+<h3 id="Параметры_по_умолчанию_вычисляются_в_момент_вызова_функции">Параметры по умолчанию вычисляются в момент вызова функции</h3>
+
+<p>В Javascript параметры по умолчанию вычисляются в момент вызова функции. В отличие от языка Python, при каждом вызове функции создается новое лексическое окружение функции.</p>
+
+<pre class="brush: js">function append(value, array = []) {
+ array.push(value);
+ return array;
+}
+
+append(1); // [1]
+append(2); // [2], а не [1, 2]
+
+</pre>
+
+<p>Это верно и для функций, и для переменных:</p>
+
+<pre class="brush: js">function callSomething(thing = something()) {
+ return thing;
+}
+
+let numberOfTimesCalled = 0;
+function something() {
+ numberOfTimesCalled += 1;
+ return numberOfTimesCalled;
+}
+
+callSomething(); // 1
+callSomething(); // 2
+</pre>
+
+<h3 id="Параметры_по_умолчанию_доступны_в_следующих_параметрах_по_умолчанию">Параметры по умолчанию доступны в следующих параметрах по умолчанию</h3>
+
+<p>В параметрах по умолчанию можно использовать значения предыдущих (расположеннных левее в списке) параметров:</p>
+
+<pre class="brush: js">function greet(name, greeting, message = greeting + ' ' + name) {
+ return [name, greeting, message];
+}
+
+greet('David', 'Hi'); // ["David", "Hi", "Hi David"]
+greet('David', 'Hi', 'Happy Birthday!'); // ["David", "Hi", "Happy Birthday!"]</pre>
+
+<p>Следующий пример пример еще раз иллюстирует эту возможность, а также позволяет еще раз сравнить два способа достижения одного и того же результата: с использованием инициализации параметров по умолчанию и без ее использования:</p>
+
+<pre class="brush: js">function go() {
+ return ":P"
+}
+
+function withDefaults(a, b = 5, c = b, d = go(), e = this,
+ f = arguments, g = this.value) {
+ return [a,b,c,d,e,f,g];
+}
+function withoutDefaults(a, b, c, d, e, f, g){
+ switch(arguments.length){
+ case 0:
+ a
+ case 1:
+ b = 5
+ case 2:
+ c = b
+ case 3:
+ d = go();
+ case 4:
+ e = this
+ case 5:
+ f = arguments
+ case 6:
+ g = this.value;
+ default:
+ }
+ return [a,b,c,d,e,f,g];
+}
+
+withDefaults.call({value:"=^_^="});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+
+
+withoutDefaults.call({value:"=^_^="});
+// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
+</pre>
+
+<h3 id="Инициализация_с_помощью_функций_определяемых_в_теле_функции">Инициализация с помощью функций, определяемых в теле функции</h3>
+
+<p>Начиная с версии Gecko 33 {{geckoRelease(33)}} функции, определяемые в теле самой функции, не могут быть использованы для инициализации параметров по умолчанию; попытка это сделать приведет к ошибке {{jsxref("ReferenceError")}}. Параметры по умолчанию всегда вычисляются до обработки описаний функций, определяемых в теле функции.</p>
+
+<pre class="brush: js">// Вызовет ошибку ReferenceError!
+function f(a = go()) {
+ function go(){return ":P"}
+}
+f(); // ReferenceError: go is not defined
+</pre>
+
+<h3 id="Параметры_без_инициализации_следующие_после_инициализируемых_параметров">Параметры без инициализации, следующие после инициализируемых параметров</h3>
+
+<p>До появления версии Gecko 26 {{geckoRelease(26)}}, следующий код приводил к {{jsxref("SyntaxError")}}. Это было исправлено в {{bug(777060)}} и с тех пор работает корректно. Аргументы, передаваемые при вызове функции, становятся значениями формальных параметров независимо от наличия у последних инициализации по умолчанию, а также независимо от присутствия у функции других параметров, находящихся правее в списке параметров и не имеющих инициализации.</p>
+
+<pre class="brush: js">function f(x=1, y) {
+ return [x, y];
+}
+
+f(); // [1, undefined];
+f(2); // [2, undefined];
+</pre>
+
+<h3 id="Инициализация_по_умолчанию_деструктурированных_параметров">Инициализация по умолчанию деструктурированных параметров</h3>
+
+<p>При инициализации параметров по умолчанию можно использовать синтаксическую конструкцию деструктурирующего присваивания:</p>
+
+<pre class="brush: js">function f([x, y] = [1, 2], {z: z} = {z: 3}) {
+ return x + y + z;
+}
+
+f(); // 6</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Определение функций')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.functions.default_parameters")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values" rel="external">Оригинальное предложение на ecmascript.org</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/get/index.html b/files/ru/web/javascript/reference/functions/get/index.html
new file mode 100644
index 0000000000..9e2c329c8e
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/get/index.html
@@ -0,0 +1,180 @@
+---
+title: getter
+slug: Web/JavaScript/Reference/Functions/get
+tags:
+ - геттер
+translation_of: Web/JavaScript/Reference/Functions/get
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>Синтаксис <strong><code>get</code></strong> связывает свойство объекта с функцией, которая будет вызываться при обращении к этому свойству.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/functions-getter.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в GitHub репозитории. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам PR запрос.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">{get <var>prop</var>() { ... } }
+{get [<var>expression</var>]() { ... } }</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code><var>prop</var></code></dt>
+ <dd>Имя свойства для привязывания к заданной функции.</dd>
+ <dt><code><var>expression</var></code></dt>
+ <dd>Начиная с ECMAScript 6, Вы также можете использовать выражения для вычисляемого имени свойства для привязки к заданной функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Иногда желательно разрешить доступ к свойству, которое возвращает динамически вычисляемое значение, или Вы можете захотеть отражать состояние внутренней переменной без необходимости использования явных вызовов методов. В JavaScript, это можно реализовать при помощи использования <em>геттера</em>.</p>
+
+<p>Невозможно сделать так, чтобы геттер был привязан к свойству и одновременно чтобы это свойство действительно содержало значение, хотя можно использовать геттер и сеттер в сочетании, чтобы создать тип псевдо-свойство.</p>
+
+<p>Учтите следующее при работе с синтаксисом <code>get</code>:</p>
+
+<div>
+<ul>
+ <li>Он может иметь идентификатор, который является либо числом, либо строкой;</li>
+ <li>Он должен иметь ровно 0 параметров (смотрите <a class="external" href="http://whereswalden.com/2010/08/22/incompatible-es5-change-literal-getter-and-setter-functions-must-now-have-exactly-zero-or-one-arguments/" rel="external nofollow">Incompatible <abbr title="ECMAScript 5th edition">ES5</abbr> change: literal getter and setter functions must now have exactly zero or one arguments</a> для доп. информации);</li>
+ <li>Он не должен появляться в объектном литерале вместе с другим get или через ввод данных для того же свойства (<code>{ get x() { }, get x() { } }</code> и <code>{ x: ..., get x() { } }</code> запрещены).</li>
+</ul>
+</div>
+
+<p>Геттер можно удалить при помощи оператора <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete" title="en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/delete_Operator">delete</a></code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Определение_геттера_на_новом_объекте_в_момент_инициализации_этого_объекта">Определение геттера на новом объекте в момент инициализации этого объекта</h3>
+
+<p>Ниже создается псевдо-свойство <code>latest</code> для объекта <code>obj</code>, который выведет последний элемент массива в консоль лог.</p>
+
+<pre class="brush: js">const obj = {
+ log: ['example','test'],
+ get latest() {
+ if (this.log.length === 0) return undefined;
+ return this.log[this.log.length - 1];
+ }
+}
+console.log(obj.latest); // "test"
+</pre>
+
+<p>Обратите внимание, что попытка присвоить значение <code>latest</code> не изменит его.</p>
+
+<h3 id="Удаление_геттера_оператором_delete">Удаление геттера оператором delete</h3>
+
+<p><code><font face="Open Sans, Arial, sans-serif">Если Вы хотите удалить геттер, используйте </font><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code>:</p>
+
+<pre class="brush: js">delete <var>obj</var>.latest;</pre>
+
+<h3 id="Определение_геттера_на_уже_существующих_объектах_с_помощью_defineProperty">Определение геттера на уже существующих объектах с помощью <code>defineProperty</code></h3>
+
+<p>Для добавления геттера к существующему объекту в любое время используйте <a class="external" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty" rel="external nofollow">Object.defineProperty()</a>.</p>
+
+<pre class="brush: js">const o = {a: 0};
+
+Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });
+
+console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
+</pre>
+
+<h3 id="Использование_вычисляемого_именованного_свойства">Использование вычисляемого именованного свойства</h3>
+
+<div class="note">
+<p><strong>Примечание:</strong> Вычисляемые свойства являются экспериментальной технологией, частью предложений спецификации ECMAScript 6, и массовой поддержки браузерами пока нет. Код ниже вызовет синтаксическую ошибку в неподдерживаемых средах.</p>
+</div>
+
+<pre class="brush: js">var expr = "foo";
+
+var obj = {
+ get [expr]() { return "bar"; }
+};
+
+console.log(obj.foo); // "bar"</pre>
+
+<h3 id="Умные_самостоятельно_перезаписывающиеся_ленивые_геттеры">Умные / самостоятельно перезаписывающиеся/ ленивые геттеры</h3>
+
+<p>Геттеры дают нам возможность определять свойство объекта , но они не вычисляют значение этого свойства до тех пор, пока оно не станет доступно. Геттер откладывает стоимость вычисления значения до тех пор, пока это значение не станет нужно, и если оно никогда не понадобится, то вы никогда не заплатите.</p>
+
+<p>Дополнительная техника оптимизации заключается в том, чтобы лениться или откладывать вычисление значения свойства и кэшировать его для дальнейшего доступа. Так поступают <strong>умные или <a href="https://en.wikipedia.org/wiki/Memoization">запоминающие</a> геттеры</strong>. Значение вычисляется в первый раз при вызове геттера и затем сохраняется в кэше так, что последующие обращения будут возвращать кэшированные значения без его пересчета. Это полезно в следующих ситуациях:</p>
+
+<ul>
+ <li>Если вычисление значения свойства дорого (занимает много оперативной памяти или процессорного времени, порождает рабочий поток, получает удаленный файл, и т. д.).</li>
+ <li>Если сейчас это значение не нужно. Оно будет использоваться позже, или в некоторых случаях оно не используется вообще.</li>
+ <li>Если оно используется, к нему будут обращаться несколько раз, и нет необходимости его пересчитывать, так как значение не будет изменено, или не должно пересчитываться.</li>
+</ul>
+
+<p>Значит, Вам не нужно использовать ленивый геттер для свойства, значение которого Вы собираетесь менять потому, что геттер не будет пересчитывать значение.</p>
+
+<p>В следующем примере у объекта есть геттер как собственное свойство. При получении свойства, свойство удаляется из объекта и вновь добавляется, но в этот раз неявно, как свойство с данными. В итоге значение возвращается.</p>
+
+<pre class="brush: js">get notifier() {
+ delete this.notifier;
+ return this.notifier = document.getElementById("bookmarked-notification-anchor");
+},</pre>
+
+<p>Для Firefox смотрите также модуль XPCOMUtils.jsm , который определяет функцию <code><a href="/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm#defineLazyGetter()">defineLazyGetter()</a></code>.</p>
+
+<h3 id="get_и_defineProperty"><code>get</code> и <code>defineProperty</code></h3>
+
+<p>Использование ключевого слова <code>get</code> и {{jsxref("Object.defineProperty()")}} дает похожие результаты, но при использовании в {{jsxref("classes")}} между ними есть тонкая разница.</p>
+
+<p>При использовании <code>get</code> свойство будет определено в прототипе объекта, в то время, как при использовании {{jsxref ("Object.defineProperty ()")}} свойство будет определено в экземпляре, к которому применяется.</p>
+
+<pre class="brush: js">class Example {
+ get hello() {
+ return 'world';
+ }
+}
+
+const obj = new Example();
+console.log(obj.hello);
+// "world"
+console.log(Object.getOwnPropertyDescriptor(obj, 'hello'));
+// undefined
+console.log(Object.getOwnPropertyDescriptor(Object.getPrototypeOf(obj), 'hello'));
+// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Первоначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Добавлено вычисляемое именное свойство.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.functions.get")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">сеттер</a></li>
+ <li>{{jsxref("Operators/delete", "delete")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.defineGetter", "__defineGetter__")}}</li>
+ <li>{{jsxref("Object.defineSetter", "__defineSetter__")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">Defining Getters and Setters</a> in JavaScript Guide</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/index.html b/files/ru/web/javascript/reference/functions/index.html
new file mode 100644
index 0000000000..0353eb3b84
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/index.html
@@ -0,0 +1,483 @@
+---
+title: Функции
+slug: Web/JavaScript/Reference/Functions
+tags:
+ - Функции
+ - Функция
+translation_of: Web/JavaScript/Reference/Functions
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>В общем случае, функция — это "подпрограмма", которую можно <em>вызывать</em> из внешнего (или внутренного, в случае рекурсии) по отношению к функции кода. Как и сама программа, функция состоит из последовательности инструкций, называемой <em>телом функции.</em> Значения могут быть <em>переданы</em> в функцию, а функция <em>вернёт</em> значение.</p>
+
+<p>В JavaScript функции являются объектами первого класса, то есть: они являются объектами и с ними можно взаимодействовать и передавать их точно так же как любой другой объект. Если быть точным, функции — это обьекты <code><a href="ru/docs/Web/JavaScript/Reference/Global_Objects/Function">Function</a></code>.</p>
+
+<p>Больше подробностей и примеров можно найти в <a href="/ru/docs/Web/JavaScript/Guide/Functions">руководстве по функциям в JavaScript</a>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Каждая функция в JavaScript — это объект Function.  О свойствах и методах объектов Function можно прочитать в статье {{jsxref("Function")}}.</p>
+
+<p>Функции — это не процедуры. Функция всегда возвращает значение, а процедура может возвращать, а может не возвращать.</p>
+
+<p>Чтобы вернуть значение, отличное от значения по умолчанию, в функции должна быть инструкция <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/return">return</a></code>, которая указывает, что именно нужно вернуть. Функция без него вернёт значение по умолчанию. В случае <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor">конструктора</a>, вызванного с ключевым словом <code><a href="/ru/docs/Web/JavaScript/Reference/Operators/new">new</a>, </code>значение по умолчанию — это значение его параметра <code>this</code>. Для остальных функций значением по умолчанию будет <code>undefined</code>.</p>
+
+<p>Параметры вызова функции называются <em>аргументами</em> функции. Аргументы передаются в функцию <em>по значению</em>. Если функция изменяет значение аргумента, это изменение не отражается на глобальном состоянии или вызывающей функции. Однако ссылки на объекты — это тоже значения, и они отличаются тем, что если функция изменяет свойства объекта по ссылке, это изменение видно снаружи функции, как показано в примере ниже.</p>
+
+<pre class="brush: js">/* Объявляем функцию 'myFunc' */
+function myFunc(theObject) {
+ theObject.brand = "Toyota";
+ }
+
+ /*
+ * Объявляем переменную 'mycar';
+ * создаём и инициализируем новый Object;
+ * приравниваем 'mycar' к ссылке на него
+ */
+ var mycar = {
+ brand: "Honda",
+ model: "Accord",
+ year: 1998
+ };
+
+ /* Выведет 'Honda' */
+ console.log(mycar.brand);
+
+ /* Передаём ссылку на объект в функцию */
+ myFunc(mycar);
+
+ /*
+ * Выведет 'Toyota', так как значение свойства 'brand'
+  * было изменено внутри функции.
+ */
+ console.log(mycar.brand);
+</pre>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/this"><code>Ключевое слово this</code></a> не ссылается на функцию, которая выполняется в данный момент, поэтому вы должны обращаться к объектами Function по имени, даже внутри тела самой функции.</p>
+
+<h2 id="Defining_functions" name="Defining_functions">Определение функций</h2>
+
+<p>Есть несколько способов определить функцию:</p>
+
+<h3 id="The_function_declaration_.28function_statement.29" name="The_function_declaration_.28function_statement.29">Объявление функции (инструкция <code>function</code>)</h3>
+
+<p>Специальный синтаксис для объявления функций (более подробно: <a href="/ru/docs/Web/JavaScript/Reference/Statements/function">function statement</a>):</p>
+
+<pre>function <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>Имя аргумента, передаваемого в функцию. У функции может быть не более 255 аргументов.</dd>
+</dl>
+
+<dl>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции, из которых состоит тело функции.</dd>
+</dl>
+
+<h3 id="The_function_expression_.28function_operator.29" name="The_function_expression_.28function_operator.29">Функция-выражение (оператор <code>function</code>)</h3>
+
+<p>Функция-выражение похожа на определение функции и имеет такой же синтаксис (более подробно: <a href="/ru/docs/Web/JavaScript/Reference/Operators/function">function operator</a>):</p>
+
+<pre>function [<em>name</em>]([<em>param</em>] [, <em>param</em>] [..., <em>param</em>]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции. Может быть не указано, в таком случае функция становится анонимной.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>Имя аргумента, передаваемого в функцию. У функции может быть не более 255 аргументов.</dd>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции, из которых состоит тело функции.</dd>
+</dl>
+
+<h3 id="Стрелочная_функция-выражение_(>)">Стрелочная функция-выражение (=&gt;)</h3>
+
+<div class="note">
+<p><strong>Заметка:</strong> стрелочные функции являются экспериментальной технологией<em>,</em> частью спецификации ECMAScript 6 и пока что не поддерживаются всеми браузерами.</p>
+</div>
+
+<p>Стрелочные функции отличаются более кратким синтаксисом и тем, что они лексически связывают значение своего <code>this (подробнее об этом в статье <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочные функции</a>):</code></p>
+
+<pre>([param] [, param]) =&gt; {
+ statements
+}
+
+param =&gt; expression
+</pre>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>Имя параметра. Если параметров нет, вместо них нужно поставить (). Если параметров больше одного, их также нужно заключить в ().</dd>
+ <dt><code>statements or expression</code></dt>
+ <dd>Если инструкций несколько, их нужно заключить в {}. Для одного выражения фигурных скобок не требуется, а результат этого выражения будет возвращён функцией (то есть<code> функция x =&gt; 3 + 8 вернёт 11).</code><code> </code></dd>
+</dl>
+
+<h3 id="The_Function_constructor" name="The_Function_constructor">Конструктор <code>Function</code></h3>
+
+<div class="note">
+<p><strong>Заметка:</strong> Использовать конструктор Function не рекомендуется, так как он принимает тело функции в виде строки, а это может помешать оптимизациям, которые выполняют движки JavaScript, а также привести к другим проблемам.</p>
+</div>
+
+<p>Объекты {{jsxref("Function")}} можно создавать с помощью оператора <code>new </code>(как и любые другие объекты):</p>
+
+<pre>new Function (<em>arg1</em>, <em>arg2</em>, ... <em>argN</em>, <em>functionBody</em>)
+</pre>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Ноль или больше имён параметров функции. Имя должно быть строкой, содержащей валидный идентификатор JavaScript. Если параметров несколько, они должны быть разделены запятыми. Например: "<code>x</code>", "<code>theValue</code>", или "<code>a,b</code>".</dd>
+</dl>
+
+<dl>
+ <dt><code>functionBody</code></dt>
+ <dd>Инструкции, из которых состоит тело функции.</dd>
+</dl>
+
+<p>Конструктор <code>Function</code> можно вызывать и без оператора <code>new,</code> эффект будет тем же.</p>
+
+<h2 id="Параметры_функции">Параметры функции</h2>
+
+<div class="note">
+<p><strong>Примечание:</strong> Оставшиеся параметры и параметры по умолчанию <em>— это экспериментальная </em>технология, часть спецификации ECMAScript 6, и они пока ещё не получили широкой поддержки среди браузеров.</p>
+</div>
+
+<h3 id="Параметры_по_умолчанию">Параметры по умолчанию</h3>
+
+<p>Параметры функции по умолчанию позволяют инициалазировать формальные параметры со значениями по умолчанию, если им не было передано значение, или было передано <code>undefined</code>. Подробнее о них можно узнать в статье <a href="/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">Параметры по умолчанию</a>.</p>
+
+<h3 id="Оставшиеся_параметры">Оставшиеся параметры</h3>
+
+<p>Синтаксис оставшихся параметров позволяет передать бесконечное число аргументов как массив. Подробности можно найти в статье <a href="/ru/docs/Web/JavaScript/Reference/Functions/rest_parameters">Оставшиеся параметры</a>.</p>
+
+<h2 id="The_arguments_object" name="The_arguments_object">Объект <code>arguments</code></h2>
+
+<p>Внутри функции получить доступ к её аргументам можно через объект <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>.</p>
+
+<ul>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments">arguments</a></code>: Объект, похожий на массив и содержащий все аргументы, переданные в текущую функцию.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/callee">arguments.callee</a></code> {{Deprecated_inline}}: Функция, исполняемая в текущий момент.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/caller">arguments.caller</a></code> {{Obsolete_inline}} : Функция, которая вызвала текущую функцию.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/length">arguments.length</a></code>: Число аргументов, переданных в функцию.</li>
+</ul>
+
+<h2 id="Определение_методов">Определение методов</h2>
+
+<h3 id="Геттеры_и_сеттеры">Геттеры и сеттеры</h3>
+
+<p>Можно определять геттеры (методы для чтения) и сеттеры (методы для изменения) для любого встроенного или пользовательского объекта, который поддерживает добавление новых свойств. Для этого используется синтаксис литерала объекта.</p>
+
+<dl>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></dt>
+ <dd>Связывает свойство объекта с функцией, которая будет вызвана при обращении к свойству.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></dt>
+ <dd>Связывает свойство объекта с функцией, которая будет вызвана при попытке изменения свойства.</dd>
+</dl>
+
+<h3 id="Синтаксис_определения_методов">Синтаксис определения методов</h3>
+
+<div class="note">
+<p><strong>Примечание:</strong> <em>Определение методов — это экспериментальная </em>технология, часть спецификации ECMAScript 6, и она пока ещё не получила широкой поддержки среди браузеров.</p>
+</div>
+
+<p>Начиная с ECMAScript 6, можно определять собственные методы, использу более краткий синтаксис, похожий на геттеры и сеттеры. Более подробно  — в статье <a href="/ru/docs/Web/JavaScript/Reference/Functions/Method_definitions">Определение методов.</a></p>
+
+<pre class="brush: js">var obj = {
+ foo() {},
+  bar() {}
+};</pre>
+
+<h2 id="Function_constructor_vs._function_declaration_vs._function_expression" name="Function_constructor_vs._function_declaration_vs._function_expression">Сравнение конструкторов <code>Function</code> с объявлением функций и функциями-выражениями</h2>
+
+<p>Посмотрите на следующие примеры:</p>
+
+<p>Функция, определённая через конструктор <code>Function</code> и приравненная к переменной <code>multiply:</code></p>
+
+<pre class="brush: js">var multiply = new Function("x", "y", "return x * y");</pre>
+
+<p>Объявление функции multiply:</p>
+
+<pre class="brush: js">function multiply(x, y) {
+ return x * y;
+}
+</pre>
+
+<p>Анонимная функция-выражение, приравненная к переменной<code> multiply:</code></p>
+
+<pre class="brush: js">var multiply = function(x, y) {
+ return x * y;
+};
+</pre>
+
+<p><em>Функция-выражение</em> с именем <code>func_name</code>, приравненное к переменной<code> multiply:</code></p>
+
+<pre class="brush: js">var multiply = function func_name(x, y) {
+ return x * y;
+};
+</pre>
+
+<h3 id="Отличия">Отличия</h3>
+
+<p>Во всех случаях результат примерно одинаков, но есть несколько нюансов:</p>
+
+<p>Имя функции и переменная, к которой функция приравнена — это не одно и то же. Имя функции нельзя менять, а вот переменной, к которой приравнена функция, можно дать другое значение. В случае функции-выражения с именем, это имя может быть использовано только внутри самой функции. При попытке использовать его снаружи возникнет ошибка (а если ранее была объявлена переменная с таким именем, будет возвращено <code>undefined</code>). Например:</p>
+
+<pre class="brush: js">var y = function x() {};
+alert(x); // выкинет ошибку
+</pre>
+
+<p>Также имя фукнции-выражения проявляется, если сериализовать функцию через метод <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/toString">Function.toString.</a></p>
+
+<p>А вот переменная, к которой функция приравнена, ограничена только собственной областью видимости, которая включает ту область, где функция была объявлена.</p>
+
+<p>Как показано в четвёртом примере, имя функции может отличаться от имени переменной, к которой функция приравнена, эти имена никак не связаны. Объявление функции (function declaration) также создаёт и переменную с именем, аналогичным имени функции. Таким образом:</p>
+
+<ol>
+ <li>Если функция определена с помощью функции-выражения (function expression), её имя доступно только внутри самой функции.</li>
+ <li>Если функция объявлена (function declaration), её имя доступно в той области видимости, где функция была определена.</li>
+</ol>
+
+<p>У функции, определённой с помощью '<code>new Function'</code>, нет имени.  Однако, в JavaScript движке <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a>, сериализованное представление функции отображается так, как будто оно имеет имя "anonymous". Например, , <code>alert(new Function())</code> выдаст:</p>
+
+<pre class="brush: js">function anonymous() {
+}
+</pre>
+
+<p>Так как на самом деле у функции нет имени, переменную <code>anonymous</code> нельзя использовать внутри функции. Например, следующий пример выкинет ошибку:</p>
+
+<pre class="brush: js">var foo = new Function("alert(anonymous);");
+foo();
+</pre>
+
+<p>В отличии от функций, определённых через функцию-выражение или конструктор <code>Function</code>, функция, определённая через объявление, может быть использована перед тем, как была определена. Например:</p>
+
+<pre class="brush: js">foo(); // выведет FOO!
+function foo() {
+ alert('FOO!');
+}
+</pre>
+
+<p>Функция, определённая через функцию-выражение, наследует текущую область видимости, то есть создаёт замыкание. А вот функция, созданная с помощью конструктора <code>Function</code>, не наследует ничего, кроме глобальной области видимости (её наследуют вообще все функции).</p>
+
+<p>Функции, определённые через функцию-выражение и объявление функции парсятся только один раз, в отличиии от функций, созданных с помощью конструктора. То есть строка, которая передаётся в конструктор <code>Function</code>, парсится при каждом вызове конструктора. И хотя функция-выражение каждый раз создаёт замыкание, тело функции при этом не парсится, и получается, что функции-выражение всё равно быстрее, чем "<code>new Function(...)</code>". Поэтому конструктора <code>Function</code> в большинстве случаев стоит избегать, если это возможно.</p>
+
+<p>Стоит отметить, что функции-выражения и объявления функций внутри функции, созданной при парсинге конструктора <code>Function</code>, парсятся только один раз. Например:</p>
+
+<pre class="brush: js">var foo = (new Function("var bar = \'FOO!\';\nreturn(function() {\n\talert(bar);\n});"))();
+foo(); // "function() {\n\talert(bar);\n}" Эта часть строки, составляющей тело функции, не парсится во второй раз.</pre>
+
+<p>Объявление функции можно очень легко (и часто случайно) превратить в функцию-выражение. Объявление функции перестаёт быть таковым, если оно:</p>
+
+<ul>
+ <li>становится частью выражения</li>
+ <li>не является "исходным элементом" функции или файла. Исходный элемент  - это не вложенный элемент внутри функции или скрипта:</li>
+</ul>
+
+<pre class="brush: js">var x = 0; // исходный элемент
+if (x == 0) { // исходный элемент
+ x = 10; // не исходный элемент
+ function boo() {} // не исходный элемент
+}
+function foo() { // исходный элемент
+ var y = 20; // исходный элемент
+ function bar() {} // исходный элемент
+ while (y == 10) { // исходный элемент
+ function blah() {} // не исходный элемент
+ y++; // не исходный элемент
+ }
+}
+</pre>
+
+<h3 id="Примеры">Примеры</h3>
+
+<pre class="brush: js">// объявление функции
+function foo() {}
+
+// функция-выражение
+(function bar() {})
+
+// функция-выражение
+x = function hello() {}
+
+
+if (x) {
+ // функция-выражение
+ function world() {}
+}
+
+
+// объявление функции
+function a() {
+ // обявление функции
+ function b() {}
+ if (0) {
+ // функция-выражение
+ function c() {}
+ }
+}
+</pre>
+
+<h2 id="Conditionally_defining_a_function" name="Conditionally_defining_a_function">Определение функции в зависимости от условия</h2>
+
+<p>Функции могут быть определены в зависимости от условий с помощью инструкции <code>function (разрешённое расширение стандарта</code> <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMA-262 Edition 3</a>) или конструктора <code>Function</code>. Обратите внимание, что подобные инструкции <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=609832">запрещены в ES5 strict</a>. Кроме того, эта возможность по-разному ведёт себя в разных браузерах, поэтому не стоит на неё рассчитывать.</p>
+
+<p>В коде ниже функция <code>zero</code> никогда не будет определена и не может быть вызвана, потому что '<code>if (0)</code>' всегда расценивается как <code>false</code>:</p>
+
+<pre class="brush: js">if (0) {
+ function zero() {
+ document.writeln("This is zero.");
+ }
+}
+</pre>
+
+<p>Если изменить условие на  '<code>if (1)</code>', функция <code>zero</code> будет определена.</p>
+
+<p>Заметьте, что хотя это выглядит как объявление функции, на самом деле, это функция-выражение (или инструкция), так как она вложена внутрь другой инструкции. Изучите разницу между объявлением функции и функцией-выражением.</p>
+
+<p>Некоторые JavaScript-движки (но не <a href="/en-US/docs/SpiderMonkey">SpiderMonkey</a>), неверно считают любую функцию-выражение с именем за объявление функции. Это приводит к тому, что функция <code>zero</code> будет определена, даже если условие всегда <code>false</code>. Более безопасный способ определить функцию по условию - это сделать её анонимной и приравнять к переменной:</p>
+
+<pre class="brush: js">if (0) {
+ var zero = function() {
+ document.writeln("This is zero.");
+ }
+}
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Returning_a_formatted_number" name="Example:_Returning_a_formatted_number">Пример: возврат отформатированного числа</h3>
+
+<p>Эта функция возвращает строку, содержащую число с заданным количеством нулей перед ним:</p>
+
+<pre class="brush: js">function padZeros(num, totalLen) {
+ var numStr = num.toString(); // Инициализировать возвращаемое значение в виде строки
+ var numZeros = totalLen - numStr.length; // Посчитать число нулей в начале
+ for (var i = 1; i &lt;= numZeros; i++) {
+ numStr = "0" + numStr;
+ }
+ return numStr;
+}
+</pre>
+
+<p>Вызовем <code>padZeros</code>:</p>
+
+<pre class="brush: js">var result;
+result = padZeros(42,4); // возвращает "0042"
+result = padZeros(42,2); // возвращает "42"
+result = padZeros(5,4); // возвращает "0005"
+</pre>
+
+<h3 id="Example:_Determining_whether_a_function_exists" name="Example:_Determining_whether_a_function_exists">Пример: существует ли функция</h3>
+
+<p>Можно определить, существует ли функция с помощью оператора <code>typeof</code>. В следующем примере проверяется, есть ли у объекта <code>window</code> функция <code>noFunc</code>. Если есть, то она вызывается; если нет, выполняется какое-то другое действие.</p>
+
+<pre class="brush: js"> if ('function' == typeof window.noFunc) {
+ // вызывать noFunc()
+ } else {
+ // сделать что-то другое
+ }
+</pre>
+
+<p>Заметьте, что в проверке условия используется ссылка на <code>noFunc</code> — после имени функции нет скобок, поэтому сама функция не вызывается.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Релизовано в JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-13', 'Function Definition')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Новое: стрелочные функции, генераторы, параметры по умолчанию, оставшиеся параметры</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Начальная поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Начальная поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">См. также</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Function"><code>Function</code></a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/function">Инструкция<code> function</code></a></li>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/function">Оператор<code> function</code></a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/rest_parameters/index.html b/files/ru/web/javascript/reference/functions/rest_parameters/index.html
new file mode 100644
index 0000000000..14d9c1e334
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/rest_parameters/index.html
@@ -0,0 +1,209 @@
+---
+title: Оставшиеся параметры (rest parameters)
+slug: Web/JavaScript/Reference/Functions/Rest_parameters
+tags:
+ - JavaScript
+ - Оставшиеся параметры
+ - Функции
+translation_of: Web/JavaScript/Reference/Functions/rest_parameters
+---
+<div>{{jsSidebar("Functions")}} </div>
+
+<p>Синтаксис <strong>оставшихся параметров</strong> функции позволяет представлять неограниченное множество аргументов в виде массива.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/functions-restparameters.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js notranslate">function(a, b, ...theArgs) {
+ // ...
+}
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Если последний именованный аргумент функции имеет префикс <code>...</code>, он автоматически становится массивом с элементами от <code>0</code> до <code>theArgs.length-1</code> в соответствии с актуальным количеством аргументов, переданных в функцию.</p>
+
+<pre class="brush: js notranslate">function myFun(a, b, ...manyMoreArgs) {
+ console.log("a", a);
+ console.log("b", b);
+ console.log("manyMoreArgs", manyMoreArgs);
+}
+
+myFun("один", "два", "три", "четыре", "пять", "шесть");
+
+// Console Output:
+// a, один
+// b, два
+// manyMoreArgs, [три, четыре, пять, шесть]
+</pre>
+
+<h3 id="Отличия_оставшихся_параметров_от_объекта_arguments">Отличия оставшихся параметров от объекта <code>arguments</code></h3>
+
+<p>Существует три основных отличия оставшихся параметров от объекта <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments" title="arguments"><code>arguments</code></a>:</p>
+
+<ul>
+ <li>оставшиеся параметры включают только те, которым не задано отдельное имя, в то время как объект <code>arguments</code> содержит все аргументы, передаваемые в функцию;</li>
+ <li>объект <code>arguments</code> не является массивом, в то время как оставшиеся параметры являются экземпляром <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array" title="Array"><code>Array</code></a> и методы <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/sort" title="Array sort method"><code>sort</code></a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/map" title="Array map method"><code>map</code></a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" title="Array forEach method"><code>forEach</code></a> или <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/pop" title="Array pop method"><code>pop</code></a> могут непосредственно у них использоваться;</li>
+ <li>объект <code>arguments</code> имеет дополнительную функциональность, специфичную только для него (например, свойство <code>callee</code>).</li>
+</ul>
+
+<h3 id="Из_аргументов_в_массив">Из аргументов в массив</h3>
+
+<p>Оставшиеся параметры были введены для уменьшения количества шаблонного кода:</p>
+
+<pre class="brush: js notranslate">// До появления оставшихся параметров "arguments" конвертировали в обычный массив используя:
+
+function f(a, b) {
+
+ var normalArray = Array.prototype.slice.call(arguments);
+ // -- или --
+ var normalArray = [].slice.call(arguments);
+ // -- или --
+ var normalArray = Array.from(arguments);
+
+ var first = normalArray.shift(); // OK, даёт первый аргумент
+ var first = arguments.shift(); // ERROR (arguments не является обычным массивом)
+
+}
+
+// Теперь мы можем легко получить оставшиеся параметры как обычный массив
+
+function f(...args) {
+ var normalArray = args;
+ var first = normalArray.shift(); // OK, даёт первый аргумент
+}</pre>
+
+<h3 id="Деструктуризация_оставшихся_параметров">Деструктуризация оставшихся параметров</h3>
+
+<p>Оставшиеся парамерты могут быть деструктуризованы (только массивы). Это означает, что их данные могут быть заданы как отдельные значения. Смотрите <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">Деструктурирующее присваивание</a>.</p>
+
+<pre class="notranslate"><code>function f(...[a, b, c]) {
+ return a + b + c;
+}
+
+f(1) // NaN (b и c равны undefined)
+f(1, 2, 3) // 6
+f(1, 2, 3, 4) // 6 (четвёртый параметр не деструктурирован)</code></pre>
+
+<h2 id="Example" name="Example">Примеры</h2>
+
+<p>В этом примере первый аргумент задан как <code>"a"</code>, второй как <code>"b"</code>, так что эти аргументы используются как обычно. Однако третий аргумент <code>"manyMoreArgs"</code> будет массивом, который содержит 3-й, 4-й, 5-й, 6-й ... n-й аргументы, которые передаст пользователь.</p>
+
+<pre class="brush: js notranslate">function myFun(a, b, ...manyMoreArgs) {
+ console.log("a", a);
+ console.log("b", b);
+ console.log("manyMoreArgs", manyMoreArgs);
+}
+
+myFun("один", "два", "три", "четыре", "пять", "шесть");
+
+// a, один
+// b, два
+// manyMoreArgs, [три, четыре, пять, шесть]</pre>
+
+<p>Ниже... даже если передано одно значение последним аргументом, оно всё равно помещается в массив.</p>
+
+<pre class="brush: js notranslate">// использование той же функции, что и в примере выше
+
+myFun("один", "два", "три");
+
+// a, один
+// b, два
+// manyMoreArgs, [три]</pre>
+
+<p>Ниже... третий аргумент не был передан, но "manyMoreArgs" всё ещё массив (хотя и пустой).</p>
+
+<pre class="brush: js notranslate">// использование той же функции, что и в примере выше
+
+myFun("один", "два");
+
+// a, один
+// b, два
+// manyMoreArgs, []</pre>
+
+<p>Поскольку <code>theArgs</code> является массивом, количество элементов в нём определяется свойством <code>length</code>:</p>
+
+<pre class="brush: js notranslate">function fun1(...theArgs) {
+ console.log(theArgs.length);
+}
+
+fun1(); // 0
+fun1(5); // 1
+fun1(5, 6, 7); // 3</pre>
+
+<p>В следующем примере, оставшиеся параметры используются для сбора всех аргументов после первого в массив. Каждый из них умножается на первый параметр и возвращается массив:</p>
+
+<pre class="brush: js notranslate"><code>function multiply(multiplier, ...theArgs) {
+ return theArgs.map(function(element) {
+ return multiplier * element;
+ });
+}
+
+var arr = multiply(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]</code></pre>
+
+<p>Методы <code>Array</code> могут быть использованы на оставшихся параметрах, но не на объекте <code>arguments</code>: </p>
+
+<pre class="brush: js notranslate">function sortRestArgs(...theArgs) {
+ var sortedArgs = theArgs.sort();
+ return sortedArgs;
+}
+
+console.log(sortRestArgs(5, 3, 7, 1)); // 1, 3, 5, 7
+
+function sortArguments() {
+ var sortedArgs = arguments.sort();
+ return sortedArgs; // это никогда не выполнится
+}
+
+
+console.log(sortArguments(5, 3, 7, 1)); // TypeError (arguments.sort is not a function)</pre>
+
+<p>Чтобы использовать методы <code>Array</code> на объекте <code>arguments</code>, нужно преобразовать его в настоящий массив.</p>
+
+<pre class="brush: js notranslate"><code>function sortArguments() {
+ var args = Array.from(arguments);
+ var sortedArgs = args.sort();
+ return sortedArgs;
+}
+console.log(sortArguments(5, 3, 7, 1)); // 1, 3, 5, 7</code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Определение функций')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-definitions', 'Function Definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.functions.rest_parameters")}}</div>
+
+<div id="compat-mobile"></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments" title="arguments">Объект arguments</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array" title="Array">Array</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions" title="Functions and function scope">Функции</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Spread_operator" title="spread operator">Оператор распространения</a></li>
+ <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:rest_parameters">Оригинальное предложение на ecmascript.org</a></li>
+ <li><a class="external" href="http://javascriptweblog.wordpress.com/2011/01/18/javascripts-arguments-object-and-beyond/">JavaScript arguments object and beyond</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/set/index.html b/files/ru/web/javascript/reference/functions/set/index.html
new file mode 100644
index 0000000000..8d51101997
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/set/index.html
@@ -0,0 +1,134 @@
+---
+title: setter
+slug: Web/JavaScript/Reference/Functions/set
+translation_of: Web/JavaScript/Reference/Functions/set
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>Оператор <strong><code>set</code></strong> связывает свойство объекта с функцией, которая будет вызвана при попытке установить это свойство.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">{set <em>prop</em>(<em>val</em>) { . . . }}
+{set [expression](<em>val</em>) { . . . }}</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Имя свойства для привязки к заданной функции.</dd>
+</dl>
+
+<dl>
+ <dt><code>val</code></dt>
+ <dd>Псевдоним переменной, которая хранит значение, неудавшегося определения <code>prop.</code></dd>
+ <dt>expression</dt>
+ <dd>Начиная с ECMAScript 6, вы также можете использовать выражения для вычисляемого имя свойства для привязки к данной функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В JavaScript, сеттер можно использовать для выполнения функции, когда будет попытка изменения указанного свойства. Сеттеры используются чаще всего в сочетании с геттерами для создания одного из видов псевдо-свойства. Невозможно одновременно иметь сеттер для свойства, которое содержит фактическое значение.</p>
+
+<p>Обратите внимание на следующие моменты при работе с синтаксисом <code>set</code>:</p>
+
+<div>
+<ul>
+ <li>Он может иметь идентификатор, который является либо числом, либо строкой;</li>
+ <li>Он должен иметь ровно один параметр (смотрите <a class="external" href="http://whereswalden.com/2010/08/22/incompatible-es5-change-literal-getter-and-setter-functions-must-now-have-exactly-zero-or-one-arguments/" rel="external nofollow">Incompatible <abbr title="ECMAScript 5th edition">ES5</abbr> change: literal getter and setter functions must now have exactly zero or one arguments</a> для более подробной информации);</li>
+ <li>Он не должен объявляться в литерале объекта, с другим набором или вводом данных для того же самого свойства.<br>
+ ( <code>{ set x(v) { }, set x(v) { } }</code> и <code>{ x: ..., set x(v) { } }</code> запрещены)</li>
+</ul>
+</div>
+
+<p>Сеттер может быть удален оператором <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete" title="en-US/docs/JavaScript/Reference/Operators/Special/delete"><code>delete</code></a>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Определение_сеттера_при_инициализации_новых_объектов">Определение сеттера при инициализации новых объектов</h3>
+
+<p>Это позволит определить псевдо-параметр <code>current</code> объекта <code>o</code>, который задает значение, обновляющее значение <code>log</code>:</p>
+
+<pre class="brush: js">var o = {
+ set current (str) {
+ this.log[this.log.length] = str;
+ },
+ log: []
+}
+</pre>
+
+<p><code>обратите внимание, что current</code> не определен и любые попытки доступа к нему вернут <code>undefined</code>.</p>
+
+<h3 id="Удаление_сеттера_оператором_delete">Удаление сеттера оператором <code>delete</code></h3>
+
+<p>Если вы хотите удалить сеттер, вы можете просто его <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete">удалить</a></code>:</p>
+
+<pre class="brush: js">delete o.current;
+</pre>
+
+<h3 id="Определение_сеттера_для_существующих_объектов_используя_defineProperty">Определение сеттера для существующих объектов используя <code>defineProperty</code></h3>
+
+<p>Чтобы добавить сеттер на существующий объект в любое время, используйте {{jsxref("Object.defineProperty()")}}.</p>
+
+<pre class="brush: js">var o = { a:0 };
+
+Object.defineProperty(o, "b", { set: function (x) { this.a = x / 2; } });
+
+o.b = 10; // Запускает сеттер, который присваивает 10 / 2 (5) свойству 'a'
+console.log(o.a) // 5</pre>
+
+<h3 id="Использование_вычисляемого_имени_свойства">Использование вычисляемого имени свойства </h3>
+
+<pre class="brush: js">var expr = "foo";
+
+var obj = {
+ baz: "bar",
+ set [expr](v) { this.baz = v; }
+};
+
+console.log(obj.baz); // "bar"
+obj.foo = "baz"; // запускает сеттер
+console.log(obj.baz); // "baz"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Добавлены вычесляемые имена свойств</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<p><font face="x-locale-heading-primary, zillaslab, Palatino, Palatino Linotype, x-locale-heading-secondary, serif"><span style="font-size: 40px;"><strong>Совместимость с браузерами</strong></span></font></p>
+
+<p>{{Compat("javascript.functions.set")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a></li>
+ <li>{{jsxref("Operators/delete", "delete")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.defineGetter", "__defineGetter__")}}</li>
+ <li>{{jsxref("Object.defineSetter", "__defineSetter__")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">Defining Getters and Setters</a> в реководстве по JavaScript</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/functions/определиние_методов/index.html b/files/ru/web/javascript/reference/functions/определиние_методов/index.html
new file mode 100644
index 0000000000..2f50dfe53f
--- /dev/null
+++ b/files/ru/web/javascript/reference/functions/определиние_методов/index.html
@@ -0,0 +1,191 @@
+---
+title: Определение методов
+slug: Web/JavaScript/Reference/Functions/Определиние_методов
+translation_of: Web/JavaScript/Reference/Functions/Method_definitions
+---
+<div>{{JsSidebar("Functions")}}</div>
+
+<p>Начиная с ECMAScript 6, существует короткий синтаксис для определения методов в инициализаторе объекта. По сути, это сокращение для функции, которая назначена имени метода.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">var obj = {
+ <var>property</var>([<var>parameters</var>]) {},
+ get <var>property</var>() {},
+ set <var>property</var>(<var>value</var>) {},
+ * <var>generator</var>() {}
+};
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Короткий синтаксис похожий на синтаксис <a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a>'ов и <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a>'ов представленых в ECMAScript 5.</p>
+
+<p>Следующий код:</p>
+
+<pre class="brush: js">var obj = {
+ foo: function() {},
+ bar: function() {}
+};</pre>
+
+<p>Вы теперь можете сократить до:</p>
+
+<pre class="brush: js">var obj = {
+ foo() {},
+  bar() {}
+};</pre>
+
+<h3 id="Сокращение_методов-генераторов">Сокращение методов-генераторов</h3>
+
+<p><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">Методы-генераторы</a> также могут быть определены используя короткий синтаксис. Обратите внимание, что звездочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, <code>* g(){}</code> будет работать, а <code>g *(){}</code> не будет.</p>
+
+<pre class="brush: js;highlight[12]">// Используя свойство с именем (pre-ES6)
+var obj2 = {
+ g: function*() {
+ var index = 0;
+ while(true)
+ yield index++;
+ }
+};
+
+// Тот же объект используя короткий синтаксис
+var obj2 = {
+ * g() {
+ var index = 0;
+ while(true)
+ yield index++;
+ }
+};
+
+var it = obj2.g();
+console.log(it.next().value); // 0
+console.log(it.next().value); // 1</pre>
+
+<h3 id="Определения_методов_(ES6)_не_могут_быть_конструкторами">Определения методов (ES6) не могут быть конструкторами</h3>
+
+<p>Все определения методов кроме методов-генераторов не могут быть конструкторами и будут выбрасывать {{jsxref("TypeError")}} если вы попытаетесь создать их экземпляр.</p>
+
+<pre class="brush: js">var obj = {
+ method() {},
+};
+new obj.method; // TypeError: obj.method is not a constructor
+
+var obj = {
+ * g() {}
+};
+new obj.g; // Генератор
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_тестовый_пример">Простой тестовый пример</h3>
+
+<pre class="brush: js;highlight[3]">var obj = {
+ a : "foo",
+ b(){ return this.a; }
+};
+console.log(obj.b()); // "foo"
+</pre>
+
+<h3 id="Вычисляемые_имена_свойств">Вычисляемые имена свойств</h3>
+
+<p>Короткий синтаксис также поддерживает вычисляемые имена свойств.</p>
+
+<pre class="brush: js;highlight[4]">var bar = {
+ foo0 : function (){return 0;},
+ foo1(){return 1;},
+ ["foo" + 2](){return 2;},
+};
+
+console.log(bar.foo0()); // 0
+console.log(bar.foo1()); // 1
+console.log(bar.foo2()); // 2</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Method definition shorthand</td>
+ <td>{{CompatChrome("39")}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("26")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Method definition shorthand</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="sect1"> </h2>
+
+<h2 id="SpiderMonkey-specific_notes">SpiderMonkey-specific notes</h2>
+
+<ul>
+ <li>Prior to SpiderMonkey 38 {{geckoRelease(38)}},  "<code>get</code>" and "<code>set</code>" were invalid names for generator methods. This has been fixed in {{bug(1073809)}}.</li>
+ <li>Prior to SpiderMonkey 41 {{geckoRelease(41)}}, curly braces were not required in method definitions. They are required from now on to conform to the ES6 specification and will throw a {{jsxref("SyntaxError")}} in this and later versions ({{bug(1150855)}}).
+ <pre class="brush: js example-bad">var o = {x() 12}; // SyntaxError</pre>
+ </li>
+ <li>The restriction that only generator methods are constructors has been implemented in SpiderMonkey 41 {{geckoRelease(41)}}. See also {{bug(1059908)}} and {{bug(1166950)}}.</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/@@iterator/index.html b/files/ru/web/javascript/reference/global_objects/array/@@iterator/index.html
new file mode 100644
index 0000000000..9de1e97f40
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/@@iterator/index.html
@@ -0,0 +1,138 @@
+---
+title: 'Array.prototype[@@iterator]()'
+slug: Web/JavaScript/Reference/Global_Objects/Array/@@iterator
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - Iterator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@iterator
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Начальное значение свойства <strong><code>@@iterator</code></strong> является тем же самым функциональным объектом, что и начальное значение, возвращаемое методом {{jsxref("Array.prototype.values()", "values()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>[Symbol.iterator]()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Iteration_using_for...of_loop" name="Example:_Iteration_using_for...of_loop">Пример: итерация посредством цикла <code>for...of</code></h3>
+
+<pre class="brush: js">var arr = ['w', 'y', 'k', 'o', 'p'];
+// ваш браузер должен поддерживать цикл for..of
+// и переменные с областью видимости let в циклах for
+for (let letter of arr) {
+ console.log(letter);
+}
+</pre>
+
+<h3 id="Example:_Alternative_iteration" name="Example:_Alternative_iteration">Пример: альтернативный способ итерации</h3>
+
+<pre class="brush: js">var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr[Symbol.iterator]();
+console.log(eArr.next().value); // w
+console.log(eArr.next().value); // y
+console.log(eArr.next().value); // k
+console.log(eArr.next().value); // o
+console.log(eArr.next().value); // p
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype-@@iterator', 'Array.prototype[@@iterator]()')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("17")}} (.iterator)<br>
+ {{CompatGeckoDesktop("27")}} (["@@iterator"])<br>
+ {{CompatGeckoDesktop("36")}} ([Symbol.iterator])</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("17")}} (.iterator)<br>
+ {{CompatGeckoMobile("27")}} (["@@iterator"])<br>
+ {{CompatGeckoMobile("36")}} ([Symbol.iterator])</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<ul>
+ <li>С Gecko 17 {{geckoRelease("17")}} по Gecko 26 {{geckoRelease("26")}} вместо {{jsxref("Global_Objects/Symbol", "символа", "", 1)}} <code>@@iterator</code> использовалось свойство <code>iterator</code> ({{bug(907077)}}), а с Gecko 27 по Gecko 35 — строка-заменитель <code>"@@iterator"</code> ({{bug("918828")}}).</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.keys()")}}</li>
+ <li>{{jsxref("Array.prototype.entries()")}}</li>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+ <li>{{jsxref("Array.prototype.values()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/@@species/index.html b/files/ru/web/javascript/reference/global_objects/array/@@species/index.html
new file mode 100644
index 0000000000..696d2b6312
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/@@species/index.html
@@ -0,0 +1,78 @@
+---
+title: 'get Array[@@species]'
+slug: Web/JavaScript/Reference/Global_Objects/Array/@@species
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@species
+---
+<div>{{JSRef}}</div>
+
+<p>Метод<strong> </strong><code><strong>Array[@@species]</strong></code>возвращает конструктор <code>Array</code> .</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Array[Symbol.species]
+</pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Конструктор {{jsxref("Array")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>species</code>  возвращает стандартный конструктор обьектов <code>Array</code> . Дочерние элементы могут переопределить метод для смены назначения конструктора.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Метод <code>species</code> возвращает стандартное значение функции конструктора, то есть<br>
+  <code>Array</code> конструктор для <code>Array</code> обьектов:</p>
+
+<pre class="brush: js">Array[Symbol.species]; // функция Array()</pre>
+
+<p>В полученном обьекте (на примере обычного массива <code>MyArray</code>),  <code>MyArray</code> является конструктором <code>MyArray</code>. В случае, если вы захотите вернуть родительские обьекты <code>Array</code> в полученных классовых методах, вы можете переопределить метод:</p>
+
+<pre class="brush: js">class MyArray extends Array {
+ // <span id="result_box" lang="ru"><span>Переписывает тип MyArray в родительский конструктор Array</span></span>
+ static get [Symbol.species]() { return Array; }
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-array-@@species', 'get Array [ @@species ]')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное<br>
+ определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-array-@@species', 'get Array [ @@species ]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.@@species")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также:</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Symbol.species")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/@@unscopables/index.html b/files/ru/web/javascript/reference/global_objects/array/@@unscopables/index.html
new file mode 100644
index 0000000000..7e4e7c9daa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/@@unscopables/index.html
@@ -0,0 +1,76 @@
+---
+title: 'Array.prototype[@@unscopables]'
+slug: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Property
+ - Prototype
+ - Массив
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/@@unscopables
+---
+<div>{{JSRef}}</div>
+
+<p>Свойства символа <code><strong>@@unscopable</strong></code> содержат свойства имён, которые не были включены в ECMAScript до версии ES2015. Эти свойства исключены из привязок оператора <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>arr</var>[Symbol.unscopables]</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Стандартные свойства массива, которые исключены из привязок  <code>with</code>: copyWithin, entries, fill, find, findIndex, includes, keys, и values.</p>
+
+<p>См. {{jsxref("Symbol.unscopables")}} о том, как установить <code>unscopables</code> для Ваших собственных объектов.</p>
+
+<p>{{js_property_attributes(0,0,1)}}</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён метод  {{jsxref("Array.prototype.keys()")}}. Это означает, что внутри окружения <code>with</code>, "ключи" будут методом, а не пременной. Вот где теперь встроенные свойства символа {{jsxref("Array.prototype[@@unscopables]")}} вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в оператор <code>with</code>.</p>
+
+<pre class="brush: js">var keys = [];
+
+with (Array.prototype) {
+ keys.push('что-то');
+}
+
+Object.keys(Array.prototype[Symbol.unscopables]);
+// ["copyWithin", "entries", "fill", "find", "findIndex",
+// "includes", "keys", "values"]</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создаётся из структурированных данных. Если Вы хотите дополнить эти данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.Array.@@unscopables")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.unscopables")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..b3c2fa6eea
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/concat/index.html
@@ -0,0 +1,135 @@
+---
+title: Array.prototype.concat()
+slug: Web/JavaScript/Reference/Global_Objects/Array/concat
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/concat
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>concat()</strong></code> возвращает новый массив, состоящий из массива, на котором он был вызван, соединённого с другими массивами и/или значениями, переданными в качестве аргументов.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-concat.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>var <var>new_array</var> = <var>old_array</var>.concat(<var>value1</var>[, <var>value2</var>[, ...[, <var>valueN</var>]]])</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>value<em>N</em></code></dt>
+ <dd>Массивы и/или значения, соединяемые в новый массив. Смотрите описание ниже.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый экземпляр {{jsxref("Array")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>concat</code> создаёт новый массив, состоящий из элементов в объекте, на котором он был вызван, за которыми по порядку следуют, для каждого аргумента, все его элементы (если аргумент является массивом), либо сам аргумент (если он массивом не является).</p>
+
+<p>Метод <code>concat</code> не изменяет данный массив или любой из массивов, переданных в аргументах, а вместо этого возвращает поверхностную копию, содержащую копии тех элементов, что были объединены с исходными массивами. Элементы оригинальных массивов копируются в новый массив по следующим правилам:</p>
+
+<ul>
+ <li>Ссылки на объекты (но не фактические объекты): метод <code>concat</code> копирует ссылки на объекты в новый массив. И оригинал, и новый массив ссылаются на один и тот же объект. То есть, если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.</li>
+ <li>Строки, числа и булевы значения (но не объекты {{jsxref("Global_Objects/String", "String")}}, {{jsxref("Global_Objects/Number", "Number")}} или {{jsxref("Global_Objects/Boolean", "Boolean")}}): метод <code>concat</code> копирует значения строк и чисел в новый массив.</li>
+</ul>
+
+<div class="note">
+<p><strong>Примечание:</strong> Соединение массивов и/или значений в новый массив оставит соединяемые массивы/значения неизменными. Кроме того, любая операция над новым массивом (если только элемент не является ссылкой) не будет затрагивать исходные массивы и наоборот.</p>
+</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Соединение_двух_массивов">Соединение двух массивов</h3>
+
+<p>Следующий код соединяет два массива:</p>
+
+<pre class="brush: js">var alpha = ['a', 'b', 'c'],
+ numeric = [1, 2, 3];
+
+var alphaNumeric = alpha.concat(numeric);
+
+console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]
+</pre>
+
+<h3 id="Соединение_трёх_массивов">Соединение трёх массивов</h3>
+
+<p>Следующий код соединяет три массива:</p>
+
+<pre class="brush: js">var num1 = [1, 2, 3],
+ num2 = [4, 5, 6],
+ num3 = [7, 8, 9];
+
+var nums = num1.concat(num2, num3);
+
+console.log(nums); // Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]
+</pre>
+
+<h3 id="Соединение_значений_в_массив">Соединение значений в массив</h3>
+
+<p>Следующий код соединяет три значения в массив:</p>
+
+<pre class="brush: js">var alpha = ['a', 'b', 'c'];
+
+var alphaNumeric = alpha.concat(1, [2, 3]);
+
+console.log(alphaNumeric); // Результат: ['a', 'b', 'c', 1, 2, 3]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.4', 'Array.prototype.concat')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.concat', 'Array.prototype.concat')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.concat', 'Array.prototype.concat')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.concat")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.push", "push")}} / {{jsxref("Array.pop", "pop")}} — добавление / удаление элементов с конца массива</li>
+ <li>{{jsxref("Array.unshift", "unshift")}} / {{jsxref("Array.shift", "shift")}} — добавление / удаление элементов с начала массива</li>
+ <li>{{jsxref("Array.splice", "splice")}} — добавление / удаление элементов в указанной позиции массива</li>
+ <li>{{jsxref("String.prototype.concat()")}}</li>
+ <li>{{jsxref("Symbol.isConcatSpreadable")}} — управление уменьшением размерности массива</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/copywithin/index.html b/files/ru/web/javascript/reference/global_objects/array/copywithin/index.html
new file mode 100644
index 0000000000..a914888989
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/copywithin/index.html
@@ -0,0 +1,216 @@
+---
+title: Array.prototype.copyWithin()
+slug: Web/JavaScript/Reference/Global_Objects/Array/copyWithin
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/copyWithin
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>copyWithin()</strong></code> копирует последовательность элементов массива внутри него в позицию, начинающуюся по индексу <code>target</code>. Копия берётся по индексам, задаваемым вторым и третьим аргументами <code>start</code> и <code>end</code>. Аргумент <code>end</code> является необязательным и по умолчанию равен длине массива.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.copyWithin(<var>target</var>, <var>start</var>[, <var>end</var> = this.length])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Начальный индекс позиции цели, куда копировать элементы.</dd>
+ <dt><code>start</code></dt>
+ <dd>Начальный индекс позиции источника, откуда начинать копировать элементы.</dd>
+ <dt><code>end</code></dt>
+ <dd>Необязательный параметр. Конечный индекс позиции источника, где заканчивать копировать элементы.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Аргументы <code>target</code>, <code>start</code> и <code>end</code> приводятся к {{jsxref("Global_Objects/Number", "Number")}} и обрезаются до целых значений.</p>
+
+<p>Если аргумент <code>start</code> является отрицательным, он трактуется как <code>length+start</code> где <code>length</code> — это длина массива. Если аргумент <code>end</code> является отрицательным, он трактуется как <code>length+end</code>.</p>
+
+<p>Функция <code>copyWithin</code> намеренно является <em>обобщённой</em>, она не требует, чтобы значение <code>this</code> внутри неё было объектом {{jsxref("Global_Objects/Array", "Array")}}, и кроме того, функция <code>copyWithin</code> является <em>изменяющим методом</em>, она изменит объект <code>this</code> и вернёт его, а не просто вернёт копию.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">[1, 2, 3, 4, 5].copyWithin(0, 3);
+// [4, 5, 3, 4, 5]
+
+[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
+// [4, 2, 3, 4, 5]
+
+[1, 2, 3, 4, 5].copyWithin(0, -2, -1);
+// [4, 2, 3, 4, 5]
+
+[].copyWithin.call({length: 5, 3: 1}, 0, 3);
+// {0: 1, 3: 1, length: 5}
+
+// Типизированные массивы ES6 являются подклассами Array
+var i32a = new Int32Array([1, 2, 3, 4, 5]);
+
+i32a.copyWithin(0, 2);
+// Int32Array [3, 4, 5, 4, 5]
+
+// На платформах, которые ещё не совместимы с ES6:
+[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);
+// Int32Array [4, 2, 3, 4, 5]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">if (!Array.prototype.copyWithin) {
+ Array.prototype.copyWithin = function(target, start/*, end*/) {
+ // Шаги 1-2.
+ if (this == null) {
+ throw new TypeError('this is null or not defined');
+ }
+
+ var O = Object(this);
+
+ // Шаги 3-5.
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // Шаги 6-8.
+ var relativeTarget = target &gt;&gt; 0;
+
+ var to = relativeTarget &lt; 0 ?
+ Math.max(len + relativeTarget, 0) :
+ Math.min(relativeTarget, len);
+
+ // Шаги 9-11.
+ var relativeStart = start &gt;&gt; 0;
+
+ var from = relativeStart &lt; 0 ?
+ Math.max(len + relativeStart, 0) :
+ Math.min(relativeStart, len);
+
+ // Шаги 12-14.
+ var end = arguments[2];
+ var relativeEnd = end === undefined ? len : end &gt;&gt; 0;
+
+ var final = relativeEnd &lt; 0 ?
+ Math.max(len + relativeEnd, 0) :
+ Math.min(relativeEnd, len);
+
+ // Шаг 15.
+ var count = Math.min(final - from, len - to);
+
+ // Шаги 16-17.
+ var direction = 1;
+
+ if (from &lt; to &amp;&amp; to &lt; (from + count)) {
+ direction = -1;
+ from += count - 1;
+ to += count - 1;
+ }
+
+ // Шаг 18
+ while (count &gt; 0) {
+ if (from in O) {
+ O[to] = O[from];
+ } else {
+ delete O[to];
+ }
+
+ from += direction;
+ to += direction;
+ count--;
+ }
+
+ // Шаг 19.
+ return O;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.copyWithin', 'Array.prototype.copyWithin')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.copyWithin', 'Array.prototype.copyWithin')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Edge</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("45")}}</td>
+ <td>{{CompatGeckoDesktop("32")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>12</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("32")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/entries/index.html b/files/ru/web/javascript/reference/global_objects/array/entries/index.html
new file mode 100644
index 0000000000..291b14e5c0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/entries/index.html
@@ -0,0 +1,116 @@
+---
+title: Array.prototype.entries()
+slug: Web/JavaScript/Reference/Global_Objects/Array/entries
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - Iterator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/entries
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>entries()</strong></code> возвращает новый объект итератора массива <code><strong>Array Iterator</strong></code>, содержащий пары ключ / значение для каждого индекса в массиве.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.entries()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+var eArr = arr.entries();
+
+console.log(eArr.next().value); // [0, 'a']
+console.log(eArr.next().value); // [1, 'b']
+console.log(eArr.next().value); // [2, 'c']
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.entries', 'Array.prototype.entries')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.entries', 'Array.prototype.entries')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("28")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("28")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.keys()")}}</li>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..db333915d9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/every/index.html
@@ -0,0 +1,195 @@
+---
+title: Array.prototype.every()
+slug: Web/JavaScript/Reference/Global_Objects/Array/every
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.6
+ - Method
+ - Prototype
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/every
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>every()</strong></code> проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции.</p>
+
+<div class="note">
+<p><strong>Обратите внимание</strong>: метод возвращает <code>true</code> при любом условии для пустого массива.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">arr.every(callback(currentValue[, index[, array]])[, thisArg])</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция проверки каждого элемента, принимает три аргумента:
+ <dl>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code>{{Optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента массива.</dd>
+ <dt><code>array</code>{{Optional_inline}}</dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code>{{Optional_inline}}</dt>
+ <dd>Необязательный параметр. Значение, используемое в качестве <code>this</code> при выполнении функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code><strong>true</strong></code> если функция проверки возвращает {{Glossary("truthy")}} значение для каждого элемента массива. Иначе, <code><strong>false</strong></code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>every()</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого <code>callback</code> вернет <em>ложное</em> значение (значение, становящееся равным <code>false</code> при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод <code>every()</code> немедленно вернёт <code>false</code>. В противном случае, если <code>callback</code> вернёт <code>true</code> для всех элементов массива, метод <code>every()</code> вернёт <code>true</code>. Функция <code>callback</code> вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.</p>
+
+<p>Если в метод <code>every()</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}. В конечном итоге, значение <code>this</code>, наблюдаемое из функции <code>callback</code>, определяется согласно <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">обычным правилам определения <code>this</code>, видимого из функции</a>.</p>
+
+<p>Метод <code>every()</code> не изменяет массив, для которого он был вызван.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>every()</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>every()</code>, не будут посещены функцией <code>callback</code>. Если существующие элементы массива изменятся, значения, переданные в функцию <code>callback</code>, будут значениями на тот момент времени, когда метод <code>every()</code> посетит их; удалённые элементы посещены не будут.</p>
+
+<p>Метод <code>every()</code> действует подобно квантору всеобщности в математике. В частности, он вернёт <code>true</code> для пустого массива. Это так называемая <a href="http://en.wikipedia.org/wiki/Vacuous_truth#Vacuous_truths_in_mathematics">бессодержательная истина (vacuously true)</a> — все элементы <a href="http://ru.wikipedia.org/wiki/Пустое_множество">пустого множества</a> (<a href="http://en.wikipedia.org/wiki/Empty_set#Common_problems">англ.</a>) удовлетворяют любому заданному условию.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Testing_size_of_all_array_elements" name="Example:_Testing_size_of_all_array_elements">Пример: проверка размера всех элементов массива</h3>
+
+<p>Следующий пример проверяет, являются ли все элементы массива числами, большими 10.</p>
+
+<pre class="brush: js">function isBigEnough(element, index, array) {
+ return element &gt;= 10;
+}
+[12, 5, 8, 130, 44].every(isBigEnough); // false
+[12, 54, 18, 130, 44].every(isBigEnough); // true
+</pre>
+
+<h3 id="Example:_Using_arrow_functions" name="Example:_Using_arrow_functions">Пример: использование стрелочных функций</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочные функции</a> предоставляют более краткий синтаксис для подобных проверок.</p>
+
+<pre class="brush: js">[12, 5, 8, 130, 44].every(elem =&gt; elem &gt;= 10); // false
+[12, 54, 18, 130, 44].every(elem =&gt; elem &gt;= 10); // true
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>every()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может не присутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>every()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; и предполагает что {{jsxref("Object")}} и {{jsxref("TypeError")}} имеют свои первоначальные значения и что <code>callback.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call()")}}.</p>
+
+<pre class="brush: js">if (!Array.prototype.every) {
+ Array.prototype.every = function(callbackfn, thisArg) {
+ 'use strict';
+ var T, k;
+
+ if (this == null) {
+ throw new TypeError('this is null or not defined');
+ }
+
+ // 1. Положим O равным результату вызова ToObject над значением
+ // this, переданным в качестве аргумента.
+ var O = Object(this);
+
+ // 2. Положим lenValue равным результату вызова внутреннего метода Get
+ // объекта O с аргументом "length".
+ // 3. Положим len равным ToUint32(lenValue).
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // 4. Если IsCallable(callbackfn) равен false, выкинем исключение TypeError.
+ if (typeof callbackfn !== 'function') {
+ throw new TypeError();
+ }
+
+ // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
+ if (arguments.length &gt; 1) {
+ T = thisArg;
+ }
+
+ // 6. Положим k равным 0.
+ k = 0;
+
+ // 7. Пока k &lt; len, будем повторять
+ while (k &lt; len) {
+
+ var kValue;
+
+ // a. Положим Pk равным ToString(k).
+ // Это неявное преобразование для левостороннего операнда в операторе in
+ // b. Положим kPresent равным результату вызова внутреннего метода
+ // HasProperty объекта O с аргументом Pk.
+ // Этот шаг может быть объединён с шагом c
+ // c. Если kPresent равен true, то
+ if (k in O) {
+
+ // i. Положим kValue равным результату вызова внутреннего метода Get
+ // объекта O с аргументом Pk.
+ kValue = O[k];
+
+ // ii. Положим testResult равным результату вызова внутреннего метода Call
+ // функции callbackfn со значением T в качестве this и списком аргументов,
+ // содержащим kValue, k и O.
+ var testResult = callbackfn.call(T, kValue, k, O);
+
+ // iii. Если ToBoolean(testResult) равен false, вернём false.
+ if (!testResult) {
+ return false;
+ }
+ }
+ k++;
+ }
+ return true;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.16', 'Array.prototype.every')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.every', 'Array.prototype.every')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.every', 'Array.prototype.every')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Array.every")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+ <li>{{jsxref("Array.prototype.find()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.every()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..1bef1fd1ea
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/fill/index.html
@@ -0,0 +1,159 @@
+---
+title: Array.prototype.fill()
+slug: Web/JavaScript/Reference/Global_Objects/Array/fill
+tags:
+ - Array
+ - ECMAScript2015
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/fill
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>fill()</strong></code> заполняет все элементы массива от начального до конечного индексов одним значением.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-fill.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.fill(<var>value</var>[, <var>start<var> = 0[, <var>end</var> = this.length]])</var></var></code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, заполняющее массив.</dd>
+ <dt><code>start</code></dt>
+ <dd>Необязательный параметр. Начальный индекс.</dd>
+ <dt><code>end</code></dt>
+ <dd>Необязательный параметр. Конечный индекс.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+ <p>Изменённый массив.</p>
+ </dt>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Элементы заполняются в полузакрытом интервале [<code>start</code>, <code>end</code>).</p>
+
+<p>Метод <strong><code>fill</code></strong> принимает до трёх аргументов — <code>value</code>, <code>start</code> и <code>end</code>. Аргументы <code>start</code> и <code>end</code> являются необязательными со значениями по умолчанию, равными <code>0</code> и <code>length</code> объекта <code>this</code> соответственно.</p>
+
+<p>Если аргумент <code>start</code> является отрицательным, он трактуется как <code>length+start</code>, где <code>length</code> — это длина массива. Если аргумент <code>end</code> является отрицательным, он трактуется как <code>length+end</code>.</p>
+
+<p>Метод <code><strong>fill</strong></code> намеренно является <em>обобщённым</em>, он не требует, чтобы значение <code>this</code> внутри него было объектом <code>Array</code>.</p>
+
+<p>Метод <code><strong>fill</strong></code> является <em>изменяющим методом</em>, он изменит объект <code>this</code> и вернёт его, а не просто вернёт копию.</p>
+
+<p>Если аргумент <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">value</span></font>​​​​​ является объектом, тo метод <code><strong>fill</strong></code> заполнит массив ссылками на этот объект.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre><code>[1, 2, 3].fill(4); // [4, 4, 4]
+[1, 2, 3].fill(4, 1); // [1, 4, 4]
+[1, 2, 3].fill(4, 1, 2); // [1, 4, 3]
+[1, 2, 3].fill(4, 1, 1); // [1, 2, 3]
+[1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
+[1, 2, 3].fill(4, 3, 3); // [1, 2, 3]
+[1, 2, 3].fill(4, -3, -2); // [4, 2, 3]
+[1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3]
+[1, 2, 3].fill(4, 3, 5); // [1, 2, 3]
+Array(3).fill(4); // [4, 4, 4]
+[].fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}
+
+// Объекты заполняются по ссылке.
+var arr = Array(3).fill({}) // [{}, {}, {}];
+arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]</code></pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre><code>if (!Array.prototype.fill) {
+  Object.defineProperty(Array.prototype, 'fill', {
+    value: function(value) {
+
+      // Шаги 1-2.
+      if (this == null) {
+        throw new TypeError('this is null or not defined');
+      }
+
+      var O = Object(this);
+
+      // Шаги 3-5.
+      var len = O.length &gt;&gt;&gt; 0;
+
+      // Шаги 6-7.
+      var start = arguments[1];
+      var relativeStart = start &gt;&gt; 0;
+
+      // Шаг 8.
+      var k = relativeStart &lt; 0 ?
+        Math.max(len + relativeStart, 0) :
+        Math.min(relativeStart, len);
+
+      // Шаги 9-10.
+      var end = arguments[2];
+      var relativeEnd = end === undefined ?
+        len : end &gt;&gt; 0;
+
+      // Шаг 11.
+      var final = relativeEnd &lt; 0 ?
+        Math.max(len + relativeEnd, 0) :
+        Math.min(relativeEnd, len);
+
+      // Шаг 12.
+      while (k &lt; final) {
+        O[k] = value;
+        k++;
+      }
+
+      // Шаг 13.
+      return O;
+    }
+  });
+}</code></pre>
+
+<p>Если вам нужно поддерживать действительно устаревшие движки JavaScript, которые не поддерживают <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a>, то лучше вообще не использовать полифилы для методов <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">Array.prototype</span></font>, так как вы не можете сделать их не перечисляемыми.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.fill', 'Array.prototype.fill')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.fill', 'Array.prototype.fill')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.fill")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("TypedArray.prototype.fill()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..16333b09c6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/filter/index.html
@@ -0,0 +1,302 @@
+---
+title: Array.prototype.filter()
+slug: Web/JavaScript/Reference/Global_Objects/Array/filter
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - filter
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/filter
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>filter()</strong></code> создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-filter.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js">let <var>newArray</var> = <var>arr</var>.filter(<var>callback</var>(<var>element</var>[, <var>index</var>, [<var>array</var>]])[, <var>thisArg</var>])
+</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, которая будет вызвана для каждого элемента массива. Если функция возвращает <code>true</code>, то элемент остаётся в массиве, если <code>false</code>, то удаляется.</dd>
+ <dd>В функцию будет передано три аргумента:</dd>
+ <dd>
+ <dl>
+ <dt><code>element</code></dt>
+ <dd>Текущий обрабатываемый элемент в массиве.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code> {{optional_inline}}</dt>
+ <dd>Значение, используемое в качестве <code>this</code> при вызове функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Вернётся новый массив с элементами, которые проходят тест, то есть <code>callback</code> вернёт <code>true</code>. Если ни один элемент не пройдёт тест, то будет возвращён пустой массив.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>filter()</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, и конструирует новый массив со всеми значениями, для которых функция <code>callback</code> вернула <code>true</code> или {{Glossary('Truthy', 'значение, становящееся true при приведении в boolean')}}. Функция <code>callback</code> вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались. Элементы массива, не прошедшие проверку функцией <code>callback</code>, просто пропускаются и не включаются в новый массив.</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами:</p>
+
+<ol>
+ <li>значение элемента;</li>
+ <li>индекс элемента;</li>
+ <li>массив, по которому осуществляется проход.</li>
+</ol>
+
+<p>Если в метод <code>filter()</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае, в качестве значения <code>this</code> будет использоваться значение <code>{{jsxref("Global_Objects/undefined", "undefined")}}</code>. В конечном итоге, значение <code>this</code>, наблюдаемое из функции <code>callback</code>, определяется согласно {{jsxref('Operators/this', 'обычным правилам определения <code>this</code>, видимого из функции')}}.</p>
+
+<p>Метод <code>filter()</code> не изменяет массив, для которого он был вызван.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>filter()</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>filter()</code>, не будут посещены функцией <code>callback</code>. Если существующие элементы массива изменятся, значения, переданные в функцию <code>callback</code>, будут значениями на тот момент времени, когда метод <code>filter()</code> посетит их; удалённые элементы посещены не будут.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Filtering_out_all_small_values" name="Filtering_out_all_small_values">Отфильтровывание всех маленьких значений</h3>
+
+<p>Следующий пример использует <code>filter()</code> для создания отфильтрованного массива, все элементы которого больше или равны 10, а все меньшие 10 удалены.</p>
+
+<pre class="brush: js">function isBigEnough(value) {
+ return value &gt;= 10;
+}
+
+let filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
+// массив filtered равен [12, 130, 44]
+</pre>
+
+<h3 id="Find_all_prime_numbers_in_an_array" name="Find_all_prime_numbers_in_an_array">Найти все простые числа в массиве</h3>
+
+<p>Следующий пример возвращает все простые числа в массиве:</p>
+
+<pre><code>let array = [4, 6, 8, 9, 12, 53, -17, 2, 5, 7, 31, 97, -1, 17];
+
+function isPrime(num) {
+ if (num &lt;= 1)
+ return false;
+ else if (num === 2)
+ return true;
+ else {
+ for (let i = 2; i &lt; num; i++)
+ if (num % i === 0)
+ return false;
+ return true;
+ }
+}
+
+console.log(array.filter(isPrime)); // [53, 2, 5, 7, 31, 97, 17]</code></pre>
+
+<h3 id="Filtering_invalid_entries_from_JSON" name="Filtering_invalid_entries_from_JSON">Фильтрация неверных записей в JSON</h3>
+
+<p>В следующем примере метод <code>filter()</code> используется для создания отфильтрованного объекта JSON, все элементы которого содержат ненулевое числовое поле <code>id</code>.</p>
+
+<pre class="brush: js">var arr = [
+ { id: 15 },
+ { id: -1 },
+ { id: 0 },
+ { id: 3 },
+ { id: 12.2 },
+ { },
+ { id: null },
+ { id: NaN },
+ { id: 'undefined' }
+];
+
+var invalidEntries = 0;
+
+function isNumber(obj) {
+ return obj!== undefined &amp;&amp; typeof(obj) === 'number' &amp;&amp; !isNaN(obj);
+}
+
+function filterByID(item) {
+ if (isNumber(item.id) &amp;&amp; item.id !== 0) {
+ return true;
+ }
+ invalidEntries++;
+ return false;
+}
+
+var arrByID = arr.filter(filterByID);
+
+console.log('Отфильтрованный массив\n', arrByID);
+// Filtered Array
+// [{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]
+
+console.log('Количество ошибочных записей = ', invalidEntries);
+// Number of Invalid Entries = 5
+
+</pre>
+
+<h3 id="Поиск_в_массиве">Поиск в массиве</h3>
+
+<p>В следующем примере <code>filter()</code> используется для фильтрации содержимого массива на основе входных данных.</p>
+
+<pre class="brush: js">var fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
+
+/**
+ * Элементы массива фильтруется на основе критериев поиска (query)
+*/
+function filterItems(query) {
+ return fruits.filter(function(el) {
+ return el.toLowerCase().indexOf(query.toLowerCase()) &gt; -1;
+ })
+}
+
+console.log(filterItems('ap')); // ['apple', 'grapes']
+console.log(filterItems('an')); // ['banana', 'mango', 'orange']</pre>
+
+<h3 id="ES2015_implementation" name="ES2015_implementation">ES2015 реализация</h3>
+
+<pre class="brush: js">const fruits = ['apple', 'banana', 'grapes', 'mango', 'orange'];
+
+/**
+ * Элементы массива фильтруется на основе критериев поиска (query)
+ */
+const filterItems = (query) =&gt; {
+ return fruits.filter((el) =&gt;
+ el.toLowerCase().indexOf(query.toLowerCase()) &gt; -1
+ );
+}
+
+console.log(filterItems('ap')); // ['apple', 'grapes']
+console.log(filterItems('an')); // ['banana', 'mango', 'orange']
+
+</pre>
+
+<h3 id="Affecting_Initial_Array_modifying_appending_and_deleting" name="Affecting_Initial_Array_modifying_appending_and_deleting">Влияние на начальный массив (изменение, добавление и удаление)</h3>
+
+<p>В следующих примерах проверяется поведение метода <code>filter</code> при изменении массива.</p>
+
+<pre class="brush: js">// Изменение всех элементов
+let words = ['spray', 'limit', 'exuberant', 'destruction','elite', 'present']
+
+const modifiedWords = words.filter( (word, index, arr) =&gt; {
+ arr[index+1] +=' extra'
+ return word.length &lt; 6
+})
+
+console.log(modifiedWords)
+// Обратите внимание, что есть три слова длиной менее 6, но так как они были изменены,
+// возвращается одно слово ['spray']
+
+// Добавление новых элементов
+words = ['spray', 'limit', 'exuberant', 'destruction','elite', 'present']
+const appendedWords = words.filter( (word, index, arr) =&gt; {
+ arr.push('new')
+ return word.length &lt; 6
+})
+
+console.log(appendedWords)
+// Только три слова удовлетворяют условию, хотя `words` теперь имеет куда больше слов,
+// длинной меньше 6 символов: ['spray', 'limit', 'elite']
+
+// Удаление элементов
+words = ['spray', 'limit', 'exuberant', 'destruction', 'elite', 'present']
+const deleteWords = words.filter( (word, index, arr) =&gt; {
+ arr.pop()
+ return word.length &lt; 6
+})
+
+console.log(deleteWords)
+// Заметьте, что 'elite' не получено, так как удалено из `words` до того,
+// как filter смог получить его: ['spray', 'limit']</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>filter()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>filter()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что <code>fn.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call()")}} и что {{jsxref("Array.prototype.push()")}} содержит своё оригинальное значение.</p>
+
+<pre class="brush: js">if (!Array.prototype.filter) {
+ Array.prototype.filter = function(fun/*, thisArg*/) {
+ 'use strict';
+
+ if (this === void 0 || this === null) {
+ throw new TypeError();
+ }
+
+ var t = Object(this);
+ var len = t.length &gt;&gt;&gt; 0;
+ if (typeof fun !== 'function') {
+ throw new TypeError();
+ }
+
+ var res = [];
+ var thisArg = arguments.length &gt;= 2 ? arguments[1] : void 0;
+ for (var i = 0; i &lt; len; i++) {
+ if (i in t) {
+ var val = t[i];
+
+ // ПРИМЕЧАНИЕ: Технически, здесь должен быть Object.defineProperty на
+ // следующий индекс, поскольку push может зависеть от
+ // свойств на Object.prototype и Array.prototype.
+ // Но этот метод новый и коллизии должны быть редкими,
+ // так что используем более совместимую альтернативу.
+ if (fun.call(thisArg, val, i, t)) {
+ res.push(val);
+ }
+ }
+ }
+
+ return res;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.20', 'Array.prototype.filter')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.filter', 'Array.prototype.filter')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.filter', 'Array.prototype.filter')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.filter")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+ <li>{{jsxref("Array.prototype.reduce()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..f4b8844a62
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/find/index.html
@@ -0,0 +1,167 @@
+---
+title: Array.prototype.find()
+slug: Web/JavaScript/Reference/Global_Objects/Array/find
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/find
+---
+<p>{{JSRef}}</p>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>find()</strong></code> возвращает <strong>значение</strong> первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции.  В противном случае возвращается {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Также смотрите метод {{jsxref("Array.findIndex", "findIndex()")}}, который возвращает <strong>индекс</strong> найденного в массиве элемента вместо его значения.</p>
+
+<p>Если вам нужно найти позицию элемента или наличие элемента в массиве, используйте {{jsxref("Array.prototype.indexOf()")}} или {{jsxref("Array.prototype.includes()")}} соответственно.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.find(<var>callback</var>[, <var>thisArg</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, вызывающаяся для каждого значения в массиве, принимает три аргумента:
+ <dl>
+ <dt><code>element</code></dt>
+ <dd>Текущий обрабатываемый элемент в массиве.</dd>
+ <dt><code>index</code></dt>
+ <dd>Индекс текущего обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code></dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Необязательный параметр. Значение, используемое в качестве <code>this</code> при выполнении функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Значение элемента из массива, если элемент прошёл проверку, иначе {{jsxref("undefined")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>find</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт <code>true</code>. Если такой элемент найден, метод <code>find</code> немедленно вернёт значение этого элемента. В противном случае, метод <code>find</code> вернёт {{jsxref("Global_Objects/undefined", "undefined")}}. До Firefox 34 функция <code>callback</code> не вызывалась для «дырок» в массивах (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1058394">bug 1058394</a>).</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.</p>
+
+<p>Если в метод <code>find</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Метод <code>find</code> не изменяет массив, для которого он был вызван.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>find</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>find</code>, не будут посещены функцией <code>callback</code>. Если существующие, непосещённые элементы массива изменяются функцией <code>callback</code>, их значения, переданные в функцию, будут значениями на тот момент времени когда метод <code>find</code> посетит их; удалённые элементы все еще будут посещены. </p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Testing_size_of_all_array_elements" name="Example:_Testing_size_of_all_array_elements">Пример: поиск простого числа в массиве</h3>
+
+<p>Следующий пример находит в массиве положительных чисел элемент, являющийся простым числом (либо возвращает {{jsxref("Global_Objects/undefined", "undefined")}}, если в массиве нет простых чисел).</p>
+
+<pre class="brush: js">function isPrime(element, index, array) {
+ var start = 2;
+ while (start &lt;= Math.sqrt(element)) {
+ if (element % start++ &lt; 1) {
+ return false;
+ }
+ }
+ return element &gt; 1;
+}
+
+console.log([4, 6, 8, 12].find(isPrime)); // undefined, не найдено
+console.log([4, 5, 8, 12].find(isPrime)); // 5
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий сниппет в качестве полифилла:</p>
+
+<pre><code>// https://tc39.github.io/ecma262/#sec-array.prototype.find
+if (!Array.prototype.find) {
+ Object.defineProperty(Array.prototype, 'find', {
+ value: function(predicate) {
+ // 1. Let O be ? ToObject(this value).
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ var o = Object(this);
+
+ // 2. Let len be ? ToLength(? Get(O, "length")).
+ var len = o.length &gt;&gt;&gt; 0;
+
+ // 3. If IsCallable(predicate) is false, throw a TypeError exception.
+ if (typeof predicate !== 'function') {
+ throw new TypeError('predicate must be a function');
+ }
+
+ // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
+ var thisArg = arguments[1];
+
+ // 5. Let k be 0.
+ var k = 0;
+
+ // 6. Repeat, while k &lt; len
+ while (k &lt; len) {
+ // a. Let Pk be ! ToString(k).
+ // b. Let kValue be ? Get(O, Pk).
+ // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+ // d. If testResult is true, return kValue.
+ var kValue = o[k];
+ if (predicate.call(thisArg, kValue, k, o)) {
+ return kValue;
+ }
+ // e. Increase k by 1.
+ k++;
+ }
+
+ // 7. Return undefined.
+ return undefined;
+ },
+ configurable: true,
+ writable: true
+ });
+}</code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Array.find")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.findIndex()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/findindex/index.html b/files/ru/web/javascript/reference/global_objects/array/findindex/index.html
new file mode 100644
index 0000000000..7cbc30e738
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/findindex/index.html
@@ -0,0 +1,138 @@
+---
+title: Array.prototype.findIndex()
+slug: Web/JavaScript/Reference/Global_Objects/Array/findIndex
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/findIndex
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>findIndex()</strong></code> возвращает <strong>индекс</strong> в массиве, если элемент удовлетворяет условию проверяющей функции. В противном случае возвращается -1.</p>
+
+<p>Также смотрите метод {{jsxref("Array.find", "find()")}}, который возвращает <strong>значение</strong> найденного в массиве элемента вместо его индекса.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.findIndex(<var>callback</var>[, <var>thisArg</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, вызывающаяся для каждого значения в масиве, принимает три аргумента:
+ <dl>
+ <dt><code>element</code></dt>
+ <dd>Текущий обрабатываемый элемент в массиве.</dd>
+ <dt><code>index</code></dt>
+ <dd>Индекс текущего обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code></dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Необязательный параметр. Значение, используемое в качестве <code>this</code> при выполнении функции <code>callback</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>findIndex</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт <code>true</code>. Если такой элемент найден, метод <code>findIndex</code> немедленно вернёт индекс этого элемента. В противном случае, метод <code>findIndex</code> вернёт -1. Функция <code>callback</code> вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.</p>
+
+<p>Если в метод <code>findIndex</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Метод <code>findIndex</code> не изменяет массив, для которого он был вызван.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>findIndex</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>findIndex</code>, не будут посещены функцией <code>callback</code>. Если существующие, непосещённые элементы массива изменяются функцией <code>callback</code>, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод <code>findIndex</code> посетит их; удалённые элементы посещены не будут.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Find_the_index_of_a_prime_number_in_an_array" name="Example:_Find_the_index_of_a_prime_number_in_an_array">Пример: поиск индекса простого числа в массиве</h3>
+
+<p>Следующий пример находит в массиве индекс элемента, являющийся простым числом (либо возвращает -1, если в массиве нет простых чисел).</p>
+
+<pre class="brush: js">function isPrime(element, index, array) {
+ var start = 2;
+ while (start &lt;= Math.sqrt(element)) {
+ if (element % start++ &lt; 1) {
+ return false;
+ }
+ }
+ return element &gt; 1;
+}
+
+console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, не найдено
+console.log([4, 6, 7, 12].findIndex(isPrime)); // 2
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий кусочек кода в качестве полифилла:</p>
+
+<pre class="brush: js">if (!Array.prototype.findIndex) {
+ Array.prototype.findIndex = function(predicate) {
+ if (this == null) {
+ throw new TypeError('Array.prototype.findIndex called on null or undefined');
+ }
+ if (typeof predicate !== 'function') {
+ throw new TypeError('predicate must be a function');
+ }
+ var list = Object(this);
+ var length = list.length &gt;&gt;&gt; 0;
+ var thisArg = arguments[1];
+ var value;
+
+ for (var i = 0; i &lt; length; i++) {
+ value = list[i];
+ if (predicate.call(thisArg, value, i, list)) {
+ return i;
+ }
+ }
+ return -1;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.findIndex', 'Array.prototype.findIndex')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.findIndex', 'Array.prototype.findIndex')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Array.findIndex")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.find()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Array.prototype.indexOf()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..7ce48303ea
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/flat/index.html
@@ -0,0 +1,160 @@
+---
+title: Array.prototype.flat()
+slug: Web/JavaScript/Reference/Global_Objects/Array/flat
+tags:
+ - Массив
+ - Ссылка
+ - Экспериментальная
+ - метод
+ - прототип
+ - яваскрипт
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/flat
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>flat()</strong></code> возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно "подняты" на указанный уровень depth.</p>
+
+<p class="hidden">\{{EmbedInteractiveExample("pages/js/array-flatten.html")}}</p>
+
+<p class="hidden">Исходный код этого интерактивного примера находится на гитхабе. Если вы желаете внести свой вклад в проект интерактивных примеров, пожалуйста, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и пришлите нам пул-реквест.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>var newArray = arr</var>.flat(<var>depth</var>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>depth</code> {{optional_inline}}</dt>
+ <dd>На сколько уровней вложенности уменьшается мерность исходного массива. По-умолчанию 1.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый массив с объединенными в него подмассивами.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Упрощение_вложенных_массивов">Упрощение вложенных массивов</h3>
+
+<pre class="brush: js notranslate">var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+// [1, 2, 3, 4]
+
+var arr2 = [1, 2, [3, 4, [5, 6]]];
+arr2.flat();
+// [1, 2, 3, 4, [5, 6]]
+
+var arr3 = [1, 2, [3, 4, [5, 6]]];
+arr3.flat(2);
+// [1, 2, 3, 4, 5, 6]
+
+var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
+arr4.flat(Infinity);
+// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</pre>
+
+<h3 id="Упрощение_и_дырки_в_массивах">Упрощение и "дырки" в массивах</h3>
+
+<p>Метод flat удаляет пустые слоты из массива:</p>
+
+<pre class="brush: js notranslate">var arr4 = [1, 2, , 4, 5];
+arr4.flat();
+// [1, 2, 4, 5]
+</pre>
+
+<h2 id="Альтернативы">Альтернативы</h2>
+
+<h3 id="reduce_и_concat"><code>reduce</code> и <code>concat</code></h3>
+
+<pre class="brush: js notranslate">var arr1 = [1, 2, [3, 4]];
+arr1.flat();
+
+// В одномерный массив
+arr1.reduce((acc, val) =&gt; acc.concat(val), []);// [1, 2, 3, 4]
+
+//или
+const flatSingle = arr =&gt; [].concat(...arr);
+</pre>
+
+<pre class="brush: js notranslate">// Для развёртвания многомерных массивов используем рекурсию, reduce и concat
+const arr = [1, 2, [3, 4, [5, 6]]];
+
+function flatDeep(arr, d = 1) {
+ return d &gt; 0 ? arr.reduce((acc, val) =&gt; acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [])
+ : arr.slice();
+};
+
+flatDeep(arr, Infinity);
+// [1, 2, 3, 4, 5, 6]</pre>
+
+<pre class="brush: js notranslate">//не рекурсивное упрощение с использованием стэка
+var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
+function flatten(input) {
+ const stack = [...input];
+ const res = [];
+ while (stack.length) {
+ // забираем последнее значение
+ const next = stack.pop();
+ if (Array.isArray(next)) {
+ // добавляем к массиву элементы не модифицируя исходное значение
+ stack.push(...next);
+ } else {
+ res.push(next);
+ }
+ }
+ //разворачиваем массив, чтобы восстановить порядок элементов
+ return res.reverse();
+}
+flatten(arr1);// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]
+</pre>
+
+<pre class="brush: js notranslate">//рекурсивно упрощаем массив
+function flatten(array) {
+ var flattend = [];
+ (function flat(array) {
+ array.forEach(function(el) {
+ if (Array.isArray(el)) flat(el);
+ else flattend.push(el);
+ });
+ })(array);
+ return flattend;
+}
+</pre>
+
+<div class="hidden">
+<p>Пожалуйста, не добавляйте полифиллы в эту статью: <a href="https://discourse.mozilla.org/t/mdn-rfc-001-mdn-wiki-pages-shouldnt-be-a-distributor-of-polyfills/24500">https://discourse.mozilla.org/t/mdn-rfc-001-mdn-wiki-pages-shouldnt-be-a-distributor-of-polyfills/24500</a></p>
+</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flat"><code>Array.prototype.flat</code> proposal</a></td>
+ <td>Кандидат (3)</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, пожалуйста просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на извлечение.</div>
+
+<p>{{Compat("javascript.builtins.Array.flat")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.flatMap()")}}</li>
+ <li>{{jsxref("Array.prototype.map()")}}</li>
+ <li>{{jsxref("Array.prototype.reduce()")}}</li>
+ <li>{{jsxref("Array.prototype.concat()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html b/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html
new file mode 100644
index 0000000000..4465a92711
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/flatmap/index.html
@@ -0,0 +1,126 @@
+---
+title: Array.prototype.flatMap()
+slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap
+---
+<div>{{JSRef}}</div>
+
+<p><code><font face="Verdana, arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Метод </span></font><strong>flatMap()</strong></code> сначала применяет функцию к каждому элементу, а затем преобразует полученый результат в плоскую структуру и помещает в новый массив. Это идентично <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map">map</a> функции, с последующим применением функции <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/flat">flat</a> с параметром depth ( глубина ) равным 1, но <code>flatMap</code> часто бывает полезным, так как работает немного более эффективно.</p>
+
+<p class="hidden">\{{EmbedInteractiveExample("pages/js/array-flatmap.html")}}</p>
+
+<p class="hidden">Исходный код данного примера расположен в GitHub репозитории. Если вы хотите улучшить этот пример, вам нужно склонировать <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> внести в него измения и отправить их нам через PR ( pull request ).</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>var new_array = arr</var>.flatMap(function <var>callback(currentValue[, index[, array]]) {
+ // возращает элемент для new_array
+}</var>[, <var>thisArg</var>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция которая производит элементы нового массива, принимает три аргумента:
+ <dl>
+ <dt></dt>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Индекс обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Массив по которому осуществляется обход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code>{{optional_inline}}</dt>
+ <dd>Значение используемое в качестве <code>this</code> при вызове функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый массив, каждый элемент которого является результатом выполнения функции callback и "поднят" на уровень 1.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Смотрите {{jsxref("Array.prototype.map()")}} для детального описания callback функции. Метод <code>flatMap</code> идентичен методу<span style="letter-spacing: -0.00333rem;"> </span><code style="letter-spacing: -0.00333rem;"><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map">map</a></code><span style="letter-spacing: -0.00333rem;"> с последующим вызовом</span><span style="letter-spacing: -0.00333rem;"> </span><code style="letter-spacing: -0.00333rem;"><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat">flat</a></code><span style="letter-spacing: -0.00333rem;"> с параметром depth 1.</span></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="map_и_flatMap"><code>map</code> и <code>flatMap</code></h3>
+
+<pre class="brush: js">let arr1 = <span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>[</span></span><span class="constant decimal js numeric"><span>1</span></span><span class="comma delimiter js meta object"><span>,</span></span><span> </span><span class="brace js meta square"><span>2, 3, 4];
+
+arr1.map(</span></span></span></span></span>x =&gt; [x * 2]<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>);</span></span></span></span></span>
+// [[2], [4], [6], [8]]
+
+arr1.flatMap(x =&gt; [x * 2]<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>);
+// [2, 4, 6, 8]</span></span></span></span></span>
+
+// выравнивается только один уровень
+arr1.flatMap(x =&gt; [[x * 2]]);
+// [[2], [4], [6], [8]]
+</pre>
+
+<p>Хотя результат полученый в примере выше можно было получить используя просто map, ниже мы рассмотрим пример где <code>flatMap</code> является более эффективным.</p>
+
+<p>Давайте сгенерируем список слов из списка предложений.</p>
+
+<pre class="brush: js">let arr1 = ["it's Sunny in", "", "California"];
+
+arr1.map(x =&gt; x.split(" "));
+// [["it's","Sunny","in"],[""],["California"]]
+
+arr1.flatMap(x =&gt; x.split(" ")<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>);
+// ["it's","Sunny","in", "", "California"]</span></span></span></span></span></pre>
+
+<p>Обратите внимание, длина списка вывода может отличаться от длины списка ввода.</p>
+
+<div class="line"><span class="js source"><span class="comment double-slash js line"><span class="comment definition js punctuation"><span>//</span></span><span>=&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]</span></span></span></div>
+
+<h2 id="Альтернативное_решение">Альтернативное решение</h2>
+
+<h3 id="reduce_and_concat"><code>reduce</code> and <code>concat</code></h3>
+
+<pre class="brush: js">var arr1 = <span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>[</span></span><span class="constant decimal js numeric"><span>1</span></span><span class="comma delimiter js meta object"><span>,</span></span><span> </span><span class="brace js meta square"><span>2, 3, 4];
+</span></span></span></span></span>
+arr1.flatMap(x =&gt; [x * 2]<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>);</span></span></span></span></span>
+// is equivalent to
+arr1.reduce((acc, x) =&gt; acc.concat([x * 2]<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>), []);</span></span></span></span></span>
+<span class="js source"><span class="function-call js meta"><span class="js meta"><span class="brace js meta square"><span>// [2, 4, 6, 8]</span></span></span></span></span>
+</pre>
+
+<div class="line"><span class="js source"><span class="comment double-slash js line"><span class="comment definition js punctuation"><span>//</span></span><span>=&gt; [1, 2, 3, 4, 5, 6, 7, 8, 9]</span></span></span></div>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.flatmap', 'Array.prototype.flatMap')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>
+<div class="hidden">Таблица поддержки браузерами сгенерированна из представленных данных. Если вы хотите улучшить эти данные, пожалуйста преверьте <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и пришлите на PR ( pull request ) с исправлениями.</div>
+
+<p>{{Compat("javascript.builtins.Array.flatMap")}}</p>
+</div>
+
+<h2 id="См_так_же">См так же:</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.flat()")}}</li>
+ <li>{{jsxref("Array.prototype.map()")}}</li>
+ <li>{{jsxref("Array.prototype.reduce()")}}</li>
+ <li>{{jsxref("Array.prototype.concat()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..3787dc7e84
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/foreach/index.html
@@ -0,0 +1,388 @@
+---
+title: Array.prototype.forEach()
+slug: Web/JavaScript/Reference/Global_Objects/Array/forEach
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - forEach
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/forEach
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<p>Метод <code><strong>forEach()</strong></code> выполняет указанную функцию один раз для каждого элемента в массиве.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-foreach.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в GitHub. Если вы хотите внести вклад в проект интерактивных примеров, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples"> https://github.com/mdn/interactive-examples</a> и отправьте нам pull request.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre><var>arr</var>.forEach(function <var>callback(currentValue, index, array) {
+ //your iterator
+}</var>[, <var>thisArg</var>]);</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, которая будет вызвана для каждого элемента массива. Она принимает от одного до трех аргументов:</dd>
+ <dd>
+ <dl>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент в массиве.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Необязательный параметр. Значение, используемое в качестве <code>this</code> при вызове функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>forEach()</code> выполняет функцию <code>callback</code> один раз для каждого элемента, находящегося в массиве в порядке возрастания. Она не будет вызвана для удалённых или пропущенных элементов массива. Однако, она будет вызвана для элементов, которые присутствуют в массиве и имеют значение {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Функция <code>callback</code> будет вызвана с <strong>тремя аргументами</strong>:</p>
+
+<ul>
+ <li>значение элемента (<strong>value</strong>)</li>
+ <li>индекс элемента (<strong>index</strong>)</li>
+ <li>массив, по которому осуществляется проход (<strong>array</strong>)</li>
+</ul>
+
+<p>Если в метод <code>forEach()</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае, в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}. В конечном итоге, значение <code>this</code>, наблюдаемое из функции <code>callback</code>, определяется согласно {{jsxref('Operators/this', 'обычным правилам определения <code>this</code>, видимого из функции')}}.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>forEach()</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>forEach()</code>, не будут посещены функцией <code>callback</code>. Если существующие элементы массива изменятся, значения, переданные в функцию <code>callback</code>, будут значениями на тот момент времени, когда метод <code>forEach()</code> посетит их; удалённые элементы посещены не будут. Если уже посещённые элементы удаляются во время итерации (например, с помощью {{jsxref("Array.prototype.shift()", "shift()")}}), последующие элементы будут пропущены. ({{jsxref('Global_Objects/Array/forEach', 'Смотри пример ниже', 'Модификация_массива_во_время_итерации')}})</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> Не существует способа остановить или прервать цикл <code>forEach()</code> кроме как выбрасыванием исключения. Если вам необходимо такое поведение, метод <code>forEach()</code> неправильный выбор.</p>
+
+<p>Досрочное прекращение может быть достигнуто с:</p>
+
+<ul>
+ <li>Простой цикл {{jsxref('Statements/for', 'for')}}</li>
+ <li>Циклы {{jsxref('Statements/for...of', 'for...of')}} / {{jsxref('Statements/for...in', 'for...in')}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+ <li>{{jsxref("Array.prototype.find()")}}</li>
+ <li>{{jsxref("Array.prototype.findIndex()")}}</li>
+</ul>
+
+<p>Если нужно протестировать элементы массива на условие и нужно вернуть булево значение, вы можете воспользоваться методами {{jsxref("Array.prototype.every()", "every()")}}, {{jsxref("Array.prototype.some()", "some()")}}, {{jsxref("Array.prototype.find()", "find()")}} или {{jsxref("Array.prototype.findIndex()", "findIndex()")}}.</p>
+
+<p>Метод <code>forEach()</code> выполняет функцию <code>callback</code> один раз для каждого элемента массива; в отличие от методов {{jsxref("Array.prototype.every()", "every()")}} и {{jsxref("Array.prototype.some()", "some()")}}, он всегда возвращает значение {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="sparseArray" name="sparseArray">Нет операции для неинициализированных значений (разреженные массивы)</h3>
+
+<pre class="brush: js">const arraySparse = [1,3,,7]
+let numCallbackRuns = 0
+
+arraySparse.forEach((element) =&gt; {
+ console.log(element)
+ numCallbackRuns++
+})
+
+console.log("numCallbackRuns: ", numCallbackRuns)
+
+// 1
+// 3
+// 7
+// numCallbackRuns: 3
+// комментарий: как вы видите пропущенное значение между 3 и 7 не вызывало функцию callback.</pre>
+
+<h3 id="Конвертируем_цикл_for_в_forEach">Конвертируем цикл for в forEach</h3>
+
+<pre class="brush:js">const items = ['item1', 'item2', 'item3']
+const copy = []
+
+// до
+for (let i = 0; i &lt; items.length; i++) {
+ copy.push(items[i])
+}
+
+// после
+items.forEach(function(item){
+ copy.push(item)
+})
+</pre>
+
+<h3 id="Printing_the_contents_of_an_array" name="Printing_the_contents_of_an_array">Печать содержимого массива</h3>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> Для отображения содержимого массива в консоли вы можете использовать <a href="/ru/docs/Web/API/Console/table" title="Отображает табличные данные в виде таблицы"><code>console.table()</code></a>, который выводит отформатированную версию массива.</p>
+
+<p>Следующий пример иллюстрирует альтернативный подход, использующий <code>forEach()</code>.</p>
+</div>
+
+<p>Следующий код выводит каждый элемент массива на новой строке журнала:</p>
+
+<pre class="brush: js">function logArrayElements(element, index, array) {
+ console.log('a[' + index + '] = ' + element);
+}
+
+// Обратите внимание на пропуск по индексу 2, там нет элемента, поэтому он не посещается
+[2, 5, , 9].forEach(logArrayElements);
+// логи:
+// a[0] = 2
+// a[1] = 5
+// a[3] = 9
+</pre>
+
+<h3 id="Использование_thisArg">Использование <code><var>thisArg</var></code></h3>
+
+<p>Следующий (надуманный) пример обновляет свойства объекта, когда перебирает записи массива:</p>
+
+<pre class="brush:js">function Counter() {
+ this.sum = 0
+ this.count = 0
+}
+Counter.prototype.add = function(array) {
+ array.forEach((entry) =&gt; {
+ this.sum += entry
+ ++this.count
+ }, this)
+ // ^---- Note
+}
+
+const obj = new Counter()
+obj.add([2, 5, 9])
+obj.count
+// 3
+obj.sum
+// 16
+</pre>
+
+<p>Поскольку в <code>forEach()</code>передан параметр <code><var>thisArg</var></code> (<code>this</code>), он затем передаётся в <code><var>callback</var></code> при каждом вызове. И callback использует его в качестве собственного значения <code>this</code>.</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> Если при передаче callback функции используется {{jsxref('Functions/Arrow_functions', 'выражение стрелочной функции')}}, параметр <code><var>thisArg</var></code> может быть опущен, так как все стрелочные функции лексически привязываются к значению{{jsxref("Operators/this", "this")}}.</p>
+</div>
+
+<h3 id="Breaking_a_loop" name="Breaking_a_loop">Прерывание цикла</h3>
+
+<p>Следующий код использует {{jsxref("Array.prototype.every()")}} для логирования содержимого массива и останавливается при превышении значением заданного порогового значения <code>THRESHOLD</code>.</p>
+
+<pre class="brush: js">var THRESHOLD = 12;
+var v = [5, 2, 16, 4, 3, 18, 20];
+var res;
+
+res = v.every(function(element, index, array) {
+ console.log('element:', element);
+ if (element &gt;= THRESHOLD) {
+ return false;
+ }
+
+ return true;
+});
+console.log('res:', res);
+// логи:
+// element: 5
+// element: 2
+// element: 16
+// res: false
+
+res = v.some(function(element, index, array) {
+ console.log('element:', element);
+ if (element &gt;= THRESHOLD) {
+ return true;
+ }
+
+ return false;
+});
+console.log('res:', res);
+// логи:
+// element: 5
+// element: 2
+// element: 16
+// res: true
+</pre>
+
+<h3 id="An_object_copy_function" name="An_object_copy_function">Функция копирования объекта</h3>
+
+<p>Следующий код создаёт копию переданного объекта. Существует несколько способов создания копии объекта, и это один из них. Он позволяет понять, каким образом работает <code>Array.prototype.forEach()</code>, используя функции мета-свойств <code>Object.*</code> из ECMAScript 5.</p>
+
+<pre class="brush: js">function copy(o) {
+ var copy = Object.create(Object.getPrototypeOf(o));
+ var propNames = Object.getOwnPropertyNames(o);
+
+ propNames.forEach(function(name) {
+ var desc = Object.getOwnPropertyDescriptor(o, name);
+ Object.defineProperty(copy, name, desc);
+ });
+
+ return copy;
+}
+
+var o1 = { a: 1, b: 2 };
+var o2 = copy(o1); // теперь o2 выглядит также, как и o1
+</pre>
+
+<h3 id="Модификация_массива_во_время_итерации">Модификация массива во время итерации</h3>
+
+<p>В следующем примере в лог выводится <code>"one"</code>, <code>"two"</code>, <code>"four"</code>.</p>
+
+<p>При достижении записи, содержащей значение <code>'two'</code>, первая запись всего массива удаляется, в результате чего все оставшиеся записи перемещаются на одну позицию вверх. Поскольку элемент <code>'four'</code> теперь находится на более ранней позиции в массиве, <code>'three'</code> будет пропущен.</p>
+
+<p><code>forEach()</code> не делает копию массива перед итерацией.</p>
+
+<pre class="brush:js">let words = ['one', 'two', 'three', 'four']
+words.forEach((word) =&gt; {
+ console.log(word)
+ if (word === 'two') {
+ words.shift()
+ }
+})
+// one
+// two
+// four
+</pre>
+
+<h3 id="Выравнивание_уплощение_массива">Выравнивание (уплощение) массива</h3>
+
+<p>Следующий пример приведен только для целей обучения. Если вы хотите выравнять массив с помощью встроенных методов, вы можете использовать {{jsxref("Array.prototype.flat()")}}</p>
+
+<pre class="brush: js">function flatten(arr) {
+ const result = []
+
+ arr.forEach((i) =&gt; {
+ if (Array.isArray(i)) {
+ result.push(...flatten(i))
+ } else {
+ result.push(i)
+ }
+ })
+
+ return result
+}
+
+// Usage
+const nested = [1, 2, 3, [4, 5, [6, 7], 8, 9]]
+
+flatten(nested) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>forEach()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>forEach()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что {{jsxref("Object")}} и {{jsxref("TypeError")}} имеют свои первоначальные значения и что <code>callback.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call()")}}.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.18
+// Ссылка (en): http://es5.github.io/#x15.4.4.18
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.18
+if (!Array.prototype.forEach) {
+
+ Array.prototype.forEach = function (callback, thisArg) {
+
+ var T, k;
+
+ if (this == null) {
+ throw new TypeError(' this is null or not defined');
+ }
+
+ // 1. Положим O равным результату вызова ToObject passing the |this| value as the argument.
+ var O = Object(this);
+
+ // 2. Положим lenValue равным результату вызова внутреннего метода Get объекта O с аргументом "length".
+ // 3. Положим len равным ToUint32(lenValue).
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // 4. Если IsCallable(callback) равен false, выкинем исключение TypeError.
+ // Смотрите: http://es5.github.com/#x9.11
+ if (typeof callback !== 'function') {
+ throw new TypeError(callback + ' is not a function');
+ }
+
+ // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
+ if (arguments.length &gt; 1) {
+ T = thisArg;
+ }
+
+ // 6. Положим k равным 0
+ k = 0;
+
+ // 7. Пока k &lt; len, будем повторять
+ while (k &lt; len) {
+
+ var kValue;
+
+ // a. Положим Pk равным ToString(k).
+ // Это неявное преобразование для левостороннего операнда в операторе in
+ // b. Положим kPresent равным результату вызова внутреннего метода HasProperty объекта O с аргументом Pk.
+ // Этот шаг может быть объединён с шагом c
+ // c. Если kPresent равен true, то
+ if (k in O) {
+
+ // i. Положим kValue равным результату вызова внутреннего метода Get объекта O с аргументом Pk.
+ kValue = O[k];
+
+ // ii. Вызовем внутренний метод Call функции callback с объектом T в качестве значения this и
+ // списком аргументов, содержащим kValue, k и O.
+ callback.call(T, kValue, k, O);
+ }
+ // d. Увеличим k на 1.
+ k++;
+ }
+ // 8. Вернём undefined.
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.18', 'Array.prototype.forEach')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.foreach', 'Array.prototype.forEach')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.forEach")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.find()")}}</li>
+ <li>{{jsxref("Array.prototype.findIndex()")}}</li>
+ <li>{{jsxref("Array.prototype.map()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+ <li>{{jsxref("Map.prototype.forEach()")}}</li>
+ <li>{{jsxref("Set.prototype.forEach()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/from/index.html b/files/ru/web/javascript/reference/global_objects/array/from/index.html
new file mode 100644
index 0000000000..f373749ec7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/from/index.html
@@ -0,0 +1,216 @@
+---
+title: Array.from()
+slug: Web/JavaScript/Reference/Global_Objects/Array/from
+tags:
+ - Array
+ - ECMAScript 2015
+ - JavaScript
+ - Method
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/from
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Array.from()</strong></code> создаёт новый экземпляр <code>Array</code> из массивоподобного или итерируемого объекта.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/array-from.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Array.from(<var>arrayLike</var>[, <var>mapFn</var>[, <var>thisArg</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>arrayLike</code></dt>
+ <dd>Массивоподобный или итерируемый объект, преобразуемый в массив.</dd>
+ <dt><code>mapFn</code> {{Optional_inline}}</dt>
+ <dd>Отображающая функция, вызываемая для каждого элемента массива.</dd>
+ <dt><code>thisArg</code> {{Optional_inline}}</dt>
+ <dd>Значение, используемое в качестве <code>this</code> при выполнении функции <code>mapFn</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый экземпляр {{jsxref("Array")}}</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>Array.from()</code> позволяет вам создавать массивы из:</p>
+
+<ul>
+ <li>массивоподобных объектов (объектов со свойством <code>length</code> и элементами по индексным ключам) или</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">итерируемых объектов</a> (объектов, из которых вы можете достать их элементы, например {{jsxref("Map")}} или {{jsxref("Set")}}).</li>
+</ul>
+
+<p><code>Array.from()</code> имеет необязательный параметр <code>mapFn</code>, который позволяет вам выполнять функцию {{jsxref("Array.prototype.map", "map")}} для каждого элемента создаваемого массива (или его подкласса). Проще говоря, вызов <code>Array.from(obj, mapFn, thisArg)</code> эквивалентен цепочке <code>Array.from(obj).map(mapFn, thisArg)</code>, за исключением того, что он не создаёт промежуточного массива. Это особенно важно для некоторых подклассов массива, вроде <a href="/ru/docs/Web/JavaScript/Typed_arrays">типизированных массивов</a>, поскольку промежуточный массив неизбежно приведёт к усечению значений, чтобы они подпали под подходящий тип.</p>
+
+<p>Свойство <code>length</code> метода <code>from()</code> равно 1.</p>
+
+<p>В ES2015 классовый синтаксис позволяет создавать подклассы как встроенных классов, так и классов, определённых пользователем; в результате статические методы класса, вроде <code>Array.from</code> «наследуются» подклассами {{jsxref("Global_Objects/Array", "Array")}} и создают новые экземпляры подкласса, а не класса {{jsxref("Global_Objects/Array", "Array")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Массив_из_строки_String">Массив из строки <code>String</code></h3>
+
+<pre class="brush: js">Array.from('foo');
+// ['f', 'o', 'o']
+</pre>
+
+<h3 id="Массив_из_Set">Массив из <code>Set</code></h3>
+
+<pre class="brush: js">var s = new Set(['foo', window]);
+Array.from(s);
+// ['foo', window]
+</pre>
+
+<h3 id="Массив_из_Map">Массив из <code>Map</code></h3>
+
+<pre class="brush: js">var m = new Map([[1, 2], [2, 4], [4, 8]]);
+Array.from(m);
+// [[1, 2], [2, 4], [4, 8]]
+</pre>
+
+<h3 id="Массив_из_массивоподобного_объекта_(arguments)">Массив из массивоподобного объекта (arguments)</h3>
+
+<pre class="brush: js">function f() {
+ return Array.from(arguments);
+}
+
+f(1, 2, 3);
+// [1, 2, 3]
+</pre>
+
+<h3 id="Использование_стрелочной_функции_и_Array.from()">Использование стрелочной функции и <code>Array.from()</code></h3>
+
+<pre class="brush: js">// Использование стрелочной функции в качестве функции отображения для
+
+// манипулирования элементами
+Array.from([1, 2, 3], x =&gt; x + x);
+// [2, 4, 6]
+
+// Генерирования последовательности чисел
+Array.from({ length: 5 }, (v, k) =&gt; k);
+// [0, 1, 2, 3, 4]</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>Array.from</code> был добавлен к стандарту ECMA-262 в 6-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>Array.from</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 6-го издания; он предполагает, что {{jsxref("Global_Objects/Object", "Object")}} и {{jsxref("Global_Objects/TypeError", "TypeError")}} имеют свои первоначальные значения и что <code>callback.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call")}}. Кроме того, поскольку истинные итерируемые объекты не могут быть заменены полифиллом, эта реализация не поддерживает общие итерируемые объекты, как они определены в 6-м издании ECMA-262.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 6-е издание, 22.1.2.1
+// Ссылка: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
+if (!Array.from) {
+ Array.from = (function() {
+ var toStr = Object.prototype.toString;
+ var isCallable = function(fn) {
+ return typeof fn === 'function' || toStr.call(fn) === '[object Function]';
+ };
+ var toInteger = function (value) {
+ var number = Number(value);
+ if (isNaN(number)) { return 0; }
+ if (number === 0 || !isFinite(number)) { return number; }
+ return (number &gt; 0 ? 1 : -1) * Math.floor(Math.abs(number));
+ };
+ var maxSafeInteger = Math.pow(2, 53) - 1;
+ var toLength = function (value) {
+ var len = toInteger(value);
+ return Math.min(Math.max(len, 0), maxSafeInteger);
+    };
+
+ // Свойство length метода from равно 1.
+ return function from(arrayLike/*, mapFn, thisArg */) {
+ // 1. Положим C равным значению this.
+ var C = this;
+
+ // 2. Положим items равным ToObject(arrayLike).
+ var items = Object(arrayLike);
+
+ // 3. ReturnIfAbrupt(items).
+ if (arrayLike == null) {
+ throw new TypeError('Array.from requires an array-like object - not null or undefined');
+ }
+
+ // 4. Если mapfn равен undefined, положим mapping равным false.
+ var mapFn = arguments.length &gt; 1 ? arguments[1] : void undefined;
+ var T;
+ if (typeof mapFn !== 'undefined') {
+ // 5. иначе
+ // 5. a. Если вызов IsCallable(mapfn) равен false, выкидываем исключение TypeError.
+ if (!isCallable(mapFn)) {
+ throw new TypeError('Array.from: when provided, the second argument must be a function');
+ }
+
+ // 5. b. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
+     if (arguments.length &gt; 2) {
+ T = arguments[2];
+ }
+ }
+
+ // 10. Положим lenValue равным Get(items, "length").
+ // 11. Положим len равным ToLength(lenValue).
+ var len = toLength(items.length);
+
+ // 13. Если IsConstructor(C) равен true, то
+ // 13. a. Положим A равным результату вызова внутреннего метода [[Construct]]
+ // объекта C со списком аргументов, содержащим единственный элемент len.
+ // 14. a. Иначе, положим A равным ArrayCreate(len).
+ var A = isCallable(C) ? Object(new C(len)) : new Array(len);
+
+ // 16. Положим k равным 0.
+ var k = 0;
+ // 17. Пока k &lt; len, будем повторять... (шаги с a по h)
+ var kValue;
+ while (k &lt; len) {
+ kValue = items[k];
+ if (mapFn) {
+ A[k] = typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
+ } else {
+ A[k] = kValue;
+ }
+ k += 1;
+ }
+ // 18. Положим putStatus равным Put(A, "length", len, true).
+ A.length = len;
+ // 20. Вернём A.
+ return A;
+ };
+ }());
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.from', 'Array.from')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array.from', 'Array.from')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Array.from")}}</div>
+
+<div id="compat-mobile"></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Array.prototype.map()")}}</li>
+ <li>{{jsxref("TypedArray.from()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/includes/index.html b/files/ru/web/javascript/reference/global_objects/array/includes/index.html
new file mode 100644
index 0000000000..61bbdf1620
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/includes/index.html
@@ -0,0 +1,171 @@
+---
+title: Array.prototype.includes()
+slug: Web/JavaScript/Reference/Global_Objects/Array/includes
+tags:
+ - JavaScript
+ - Prototype
+ - Reference
+ - polyfill
+ - Массив
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/includes
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>includes()</strong></code> определяет, содержит ли массив определённый элемент, возвращая в зависимости от этого <code>true</code> или <code>false</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-includes.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>arr</var>.includes(<var>searchElement[</var>, <var>fromIndex = 0]</var>)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>searchElement</code></dt>
+ <dd>Искомый элемент.</dd>
+ <dt><code>fromIndex</code> {{optional_inline}}</dt>
+ <dd>Позиция в массиве, с которой начинать поиск элемента  <code>searchElement</code>. При отрицательных значениях поиск производится начиная с индекса <code>array.length + fromIndex</code> по возрастанию. Значение по умолчанию равно 0.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Boolean")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">[1, 2, 3].includes(2); // true
+[1, 2, 3].includes(4); // false
+[1, 2, 3].includes(3, 3); // false
+[1, 2, 3].includes(3, -1); // true
+[1, 2, NaN].includes(NaN); // true
+</pre>
+
+<h3 id="fromIndex_больше_или_равен_длине_массива"><code>fromIndex</code> больше или равен длине массива</h3>
+
+<p>Если <code>fromIndex</code> больше или равен длине массива, то возвращается <code>false</code>. При этом поиск не производится.</p>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+
+arr.includes('c', 3); // false
+arr.includes('c', 100); // false</pre>
+
+<h3 id="Вычисленный_индекс_меньше_нуля_0">Вычисленный индекс меньше нуля 0</h3>
+
+<p>Если <code>fromIndex</code> отрицательный, то вычисляется индекс, начиная с которого будет производиться поиск элемента <code>searchElement</code>. Если вычисленный индекс меньше нуля, то поиск будет производиться во всём массиве.</p>
+
+<pre class="brush: js">// длина массива равна 3
+// fromIndex равен -100
+// вычисленный индекс равен 3 + (-100) = -97
+
+var arr = ['a', 'b', 'c'];
+
+arr.includes('a', -100); // true
+arr.includes('b', -100); // true
+arr.includes('c', -100); // true</pre>
+
+<h3 id="Использование_includes()_в_качестве_общих_метода">Использование <code>includes()</code> в качестве общих метода</h3>
+
+<p><code>includes()</code> специально сделан общим. Он не требует, чтобы <code>this</code> являлся массивом, так что он может быть применён к другим типам объектов (например, к массивоподобным объектам). Пример ниже показывает использование метода <code>includes()</code> на объекте <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>.</p>
+
+<pre class="brush: js">(function() {
+ console.log([].includes.call(arguments, 'a')); // true
+  console.log([].includes.call(arguments, 'd')); // false
+})('a','b','c');</pre>
+
+<h2 id="Полифилл">Полифилл</h2>
+
+<pre class="brush: js">// https://tc39.github.io/ecma262/#sec-array.prototype.includes
+if (!Array.prototype.includes) {
+ Object.defineProperty(Array.prototype, 'includes', {
+ value: function(searchElement, fromIndex) {
+
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ // 1. Let O be ? ToObject(this value).
+ var o = Object(this);
+
+ // 2. Let len be ? ToLength(? Get(O, "length")).
+ var len = o.length &gt;&gt;&gt; 0;
+
+ // 3. If len is 0, return false.
+ if (len === 0) {
+ return false;
+ }
+
+ // 4. Let n be ? ToInteger(fromIndex).
+ // (If fromIndex is undefined, this step produces the value 0.)
+ var n = fromIndex | 0;
+
+ // 5. If n ≥ 0, then
+ // a. Let k be n.
+ // 6. Else n &lt; 0,
+ // a. Let k be len + n.
+ // b. If k &lt; 0, let k be 0.
+ var k = Math.max(n &gt;= 0 ? n : len - Math.abs(n), 0);
+
+  function sameValueZero(x, y) {
+ return x === y || (typeof x === 'number' &amp;&amp; typeof y === 'number' &amp;&amp; isNaN(x) &amp;&amp; isNaN(y));
+  }
+
+ // 7. Repeat, while k &lt; len
+ while (k &lt; len) {
+ // a. Let elementK be the result of ? Get(O, ! ToString(k)).
+ // b. If SameValueZero(searchElement, elementK) is true, return true.
+ if (sameValueZero(o[k], searchElement)) {
+ return true;
+ }
+  // c. Increase k by 1.
+ k++;
+ }
+
+ // 8. Return false
+ return false;
+ }
+ });
+}
+</pre>
+
+<p>Если требуется поддержка устаревших движков JavaScript, которые не поддерживают <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code>, наилучшим решением будет вообще не делать полифилл для методов <code>Array.prototype</code>, так как не получится сделать их неперечисляемыми.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES7', '#sec-array.prototype.includes', 'Array.prototype.includes')}}</td>
+ <td>{{Spec2('ES7')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.includes', 'Array.prototype.includes')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>
+<p>{{Compat("javascript.builtins.Array.includes")}}</p>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("TypedArray.prototype.includes()")}}</li>
+ <li>{{jsxref("String.prototype.includes()")}}</li>
+ <li>{{jsxref("Array.prototype.indexOf()")}}</li>
+ <li>{{jsxref("Array.prototype.find()")}}</li>
+ <li>{{jsxref("Array.prototype.findIndex()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/index.html b/files/ru/web/javascript/reference/global_objects/array/index.html
new file mode 100644
index 0000000000..263de030df
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/index.html
@@ -0,0 +1,452 @@
+---
+title: Array
+slug: Web/JavaScript/Reference/Global_Objects/Array
+tags:
+ - Array
+ - JavaScript
+ - Reference
+ - Глобальные объекты
+translation_of: Web/JavaScript/Reference/Global_Objects/Array
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<div> </div>
+
+<p>Массив (<strong><code>Array</code></strong>) в JavaScript является глобальным объектом, который используется для создания массивов; которые представляют собой высокоуровневые спископодобные объекты.</p>
+
+<p><strong>Создание массива</strong></p>
+
+<pre class="brush: js">var fruits = ['Яблоко', 'Банан'];
+
+console.log(fruits.length);
+// 2
+</pre>
+
+<p><strong>Доступ к элементу массива по индексу</strong></p>
+
+<pre class="brush: js">var first = fruits[0];
+// Яблоко
+
+var last = fruits[fruits.length - 1];
+// Банан
+</pre>
+
+<p><strong>Итерирование по массиву</strong></p>
+
+<pre class="brush: js">fruits.forEach(function(item, index, array) {
+  console.log(item, index);
+});
+// Яблоко 0
+// Банан 1
+</pre>
+
+<p><strong>Добавление элемента в конец массива</strong></p>
+
+<pre class="brush: js">var newLength = fruits.push('Апельсин');
+// ["Яблоко", "Банан", "Апельсин"]
+</pre>
+
+<p><strong>Удаление последнего элемента массива</strong></p>
+
+<pre class="brush: js">var last = fruits.pop(); // удалим Апельсин (из конца)
+// ["Яблоко", "Банан"];
+</pre>
+
+<p><strong>Удаление первого элемента массива</strong></p>
+
+<pre class="brush: js">var first = fruits.shift(); // удалим Яблоко (из начала)
+// ["Банан"];
+</pre>
+
+<p><strong>Добавление элемента в начало массива</strong></p>
+
+<pre class="brush: js">var newLength = fruits.unshift('Клубника') // добавляет в начало
+// ["Клубника", "Банан"];
+</pre>
+
+<p><strong>Поиск номера элемента в массиве</strong></p>
+
+<pre class="brush: js">fruits.push('Манго');
+// ["Клубника", "Банан", "Манго"]
+
+var pos = fruits.indexOf('Банан');
+// 1
+</pre>
+
+<p><strong>Удаление элемента с определённым индексом</strong></p>
+
+<pre class="brush: js">var removedItem = fruits.splice(pos, 1); // так можно удалить элемент
+
+// ["Клубника", "Манго"]</pre>
+
+<p><strong>Удаление нескольких элементов, начиная с определённого индекса</strong></p>
+
+<pre class="brush: js">var vegetables = ['Капуста', 'Репа', 'Редиска', 'Морковка'];
+console.log(vegetables);
+// ["Капуста", "Репа", "Редиска", "Морковка"]
+
+var pos = 1, n = 2;
+
+var removedItems = vegetables.splice(pos, n);
+// так можно удалить элементы, n определяет количество элементов для удаления,
+// начиная с позиции(pos) и далее в направлении конца массива.
+
+console.log(vegetables);
+// ["Капуста", "Морковка"] (исходный массив изменён)
+
+console.log(removedItems);
+// ["Репа", "Редиска"]</pre>
+
+<p><strong>Создание копии массива</strong></p>
+
+<pre class="brush: js">var shallowCopy = fruits.slice(); // так можно создать копию массива
+// ["Клубника", "Манго"]
+</pre>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>[<var>element0</var>, <var>element1</var>, ..., <var>elementN</var>]
+new Array(<var>element0</var>, <var>element1</var>[, ...[, <var>elementN</var>]])
+new Array(<var>arrayLength</var>)</code></pre>
+
+<dl>
+ <dt><code>element<em>N</em></code></dt>
+ <dd>Массив в JavaScript инициализируется с помощью переданных элементов, за исключением случая, когда в конструктор <code>Array</code> передаётся один аргумент и этот аргумент является числом (см. ниже). Стоит обратить внимание, что этот особый случай применяется только к JavaScript-массивам, создаваемым с помощью конструктора <code>Array</code>, а не к литеральным массивам, создаваемым с использованием скобочного синтаксиса.</dd>
+ <dt><code>arrayLength</code></dt>
+ <dd>Если конструктору <code>Array</code> передаётся единственный аргумент, являющийся целым числом в диапазоне от 0 до 2<sup>32</sup>-1 (включительно), будет возвращён новый пустой JavaScript-массив, длина которого установится в это число (<strong>примечание</strong>: это означает массив, содержащий <code>arrayLength</code> пустых ячеек, а не ячеек со значениями <code>undefined</code>). Если аргументом будет любое другое число, возникнет исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Массивы являются спископодобными объектами, чьи прототипы содержат методы для операций обхода и изменения массива. Ни размер JavaScript-массива, ни типы его элементов не являются фиксированными. Поскольку размер массива может увеличиваться и уменьшаться в любое время, то нет гарантии, что массив окажется плотным. То есть, при работе с массивом может возникнуть ситуация, что элемент массива, к которому вы обратитесь, будет пустым и вернёт <code>undefined</code>. В целом, это удобная характеристика; но если эта особенность массива не желательна в вашем специфическом случае, вы можете рассмотреть возможность использования типизированных массивов.</p>
+
+<p>Некоторые полагают, что <a class="external" href="http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/">вы не должны использовать массив в качестве ассоциативного массива</a>. В любом случае, вместо него вы можете использовать простые {{jsxref("Global_Objects/Object", "объекты")}}, хотя у них есть и свои подводные камни. Смотрите пост <a class="external" href="http://www.less-broken.com/blog/2010/12/lightweight-javascript-dictionaries.html">Легковесные JavaScript-словари с произвольными ключами</a><em>(англ.)</em> в качестве примера.</p>
+
+<h3 id="Accessing_array_elements" name="Accessing_array_elements">Доступ к элементам массива</h3>
+
+<p>Массивы в JavaScript индексируются с нуля: первый элемент массива имеет индекс, равный <code>0</code>, а индекс последнего элемента равен значению свойства массива {{jsxref("Array.length", "length")}} минус 1.</p>
+
+<pre class="brush: js">var arr = ['первый элемент', 'второй элемент', 'последний элемент'];
+console.log(arr[0]); // напечатает 'первый элемент'
+console.log(arr[1]); // напечатает 'второй элемент'
+console.log(arr[arr.length - 1]); // напечатает 'последний элемент'
+</pre>
+
+<p>Элементы массива являются свойствами, точно такими же, как, например, свойство <code>toString</code>, однако попытка получить элемент массива по имени его свойства приведёт к синтаксической ошибке, поскольку имя свойства не является допустимым именем JavaScript:</p>
+
+<pre class="brush: js">console.log(arr.0); // синтаксическая ошибка
+</pre>
+
+<p>Это не особенность массивов или их свойств. В JavaScript к свойствам, начинающимся с цифры, невозможно обратиться посредством точечной нотации; к ним можно обратиться только с помощью скобочной нотации. Например, если у вас есть объект со свойством, названным <code>'3d'</code>, вы сможете обратиться к нему только посредством скобочной нотации. Примеры:</p>
+
+<pre class="brush: js">var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
+console.log(years.0); // синтаксическая ошибка
+console.log(years[0]); // работает как положено
+</pre>
+
+<pre class="brush: js">renderer.3d.setTexture(model, 'character.png'); // синтаксическая ошибка
+renderer['3d'].setTexture(model, 'character.png'); // работает как положено
+</pre>
+
+<p>Обратите внимание, что во втором примере <code>3d</code> заключено в кавычки: <code>'3d'</code>. Индексы можно заключать в кавычки (например <code>years['2']</code> вместо <code>years[2]</code>), но в этом нет необходимости. Значение 2 в выражении <code>years[2]</code> будет неявно приведено к строке движком JavaScript через метод преобразования <code>toString</code>. Именно по этой причине ключи <code>'2'</code> и <code>'02'</code> будут ссылаться на два разных элемента в объекте <code>years</code> и следующий пример выведет <code>true</code>:</p>
+
+<pre class="brush: js">console.log(years['2'] != years['02']);
+</pre>
+
+<p>Аналогично, к свойствам объекта, являющимся зарезервированными словами(!) можно получить доступ только посредством скобочной нотации:</p>
+
+<pre class="brush: js">var promise = {
+ 'var' : 'text',
+ 'array': [1, 2, 3, 4]
+};
+
+console.log(promise['array']);
+</pre>
+
+<h3 id="Relationship_between_length_and_numerical_properties" name="Relationship_between_length_and_numerical_properties">Взаимосвязь свойства <code>length</code> с числовыми свойствами</h3>
+
+<p>Свойство массивов {{jsxref("Array.length", "length")}} взаимосвязано с числовыми свойствами. Некоторые встроенные методы массива (например, {{jsxref("Array.join", "join")}}, {{jsxref("Array.slice", "slice")}}, {{jsxref("Array.indexOf", "indexOf")}} и т.д.) учитывают значение свойства <code>length</code> при своём вызове. Другие методы (например, {{jsxref("Array.push", "push")}}, {{jsxref("Array.splice", "splice")}} и т.д.) в результате своей работы также обновляют свойство <code>length</code> массива.</p>
+
+<pre class="brush: js">var fruits = [];
+fruits.push('банан', 'яблоко', 'персик');
+
+console.log(fruits.length); // 3
+</pre>
+
+<p>При установке свойства в массиве, если свойство имеет действительный индекс и этот индекс выходит за пределы текущих границ массива, движок соответствующим образом обновит свойство {{jsxref("Array.length", "length")}}:</p>
+
+<pre class="brush: js">fruits[5] = 'манго';
+console.log(fruits[5]); // 'манго'
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 6
+</pre>
+
+<p>Увеличиваем свойство <code>length</code></p>
+
+<pre class="brush: js">fruits.length = 10;
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 10
+</pre>
+
+<p>Однако, уменьшение свойства {{jsxref("Array.length", "length")}} приведёт к удалению элементов.</p>
+
+<pre class="brush: js">fruits.length = 2;
+console.log(Object.keys(fruits)); // ['0', '1']
+console.log(fruits.length); // 2
+</pre>
+
+<p>Более подробно эта тема освещена на странице, посвящённой свойству {{jsxref("Array.length")}}.</p>
+
+<h3 id="Creating_an_array_using_the_result_of_a_match" name="Creating_an_array_using_the_result_of_a_match">Создание массива с использованием результата сопоставления</h3>
+
+<p>Результатом сопоставления регулярного выражения строке является JavaScript-массив. Этот массив имеет свойства и элементы, предоставляющие информацию о сопоставлении. Подобные массивы возвращаются методами {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}} и {{jsxref("String.replace")}}. Чтобы было проще понять, откуда и какие появились свойства и элементы, посмотрите следующий пример и обратитесь к таблице ниже:</p>
+
+<pre class="brush: js">// Сопоставляется с одним символом d, за которым следует один
+// или более символов b, за которыми следует один символ d
+// Запоминаются сопоставившиеся символы b и следующий за ними символ d
+// Регистр игнорируется
+
+var myRe = /d(b+)(d)/i;
+var myArray = myRe.exec('cdbBdbsbz');
+</pre>
+
+<p>Свойства и элементы, возвращаемые из данного сопоставления, описаны ниже:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header">Свойство/Элемент</td>
+ <td class="header">Описание</td>
+ <td class="header">Пример</td>
+ </tr>
+ <tr>
+ <td><code>input</code></td>
+ <td>Свойство только для чтения, отражающее оригинальную строку, с которой сопоставлялось регулярное выражение.</td>
+ <td>cdbBdbsbz</td>
+ </tr>
+ <tr>
+ <td><code>index</code></td>
+ <td>Свойство только для чтения, являющееся индексом (отсчёт начинается с нуля) в строке, с которого началось сопоставление.</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td><code>[0]</code></td>
+ <td>Элемент только для чтения, определяющий последние сопоставившиеся символы.</td>
+ <td>dbBd</td>
+ </tr>
+ <tr>
+ <td><code>[1], ...[n]</code></td>
+ <td>Элементы только для чтения, определяющие сопоставившиеся подстроки, заключённые в круглые скобки, если те включены в регулярное выражение. Количество возможных подстрок не ограничено.</td>
+ <td>[1]: bB<br>
+ [2]: d</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Array.length")}}</dt>
+ <dd>Значение свойства <code>length</code> конструктора массива равно 1.</dd>
+ <dt>{{jsxref("Array.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам массива.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Array.from()")}} {{experimental_inline}}</dt>
+ <dd>Создаёт новый экземпляр <code>Array</code> из массивоподобного или итерируемого объекта.</dd>
+ <dt>{{jsxref("Array.isArray()")}}</dt>
+ <dd>Возвращает <code>true</code>, если значение является массивом, иначе возвращает <code>false</code>.</dd>
+ <dt>{{jsxref("Array.observe()")}} {{experimental_inline}}</dt>
+ <dd>Асинхронно наблюдает за изменениями в массиве, подобно методу {{jsxref("Object.observe()")}} для объектов. Метод предоставляет поток изменений в порядке их возникновения.</dd>
+ <dt>{{jsxref("Array.of()")}} {{experimental_inline}}</dt>
+ <dd>Создаёт новый экземпляр <code>Array</code> из любого количества аргументов, независимо от их количества или типа.</dd>
+</dl>
+
+<h2 id="Array_instances" name="Array_instances">Экземпляры массива</h2>
+
+<p>Все экземпляры массива наследуются от {{jsxref("Array.prototype")}}. Изменения в объекте прототипа конструктора массива затронет все экземпляры <code>Array</code>.</p>
+
+<h3 id="Methods_of_array_instances" name="Methods_of_array_instances">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_array_instances" name="Methods_of_array_instances">Методы</h3>
+
+<h4 id="Mutator_methods" name="Mutator_methods">Методы изменения</h4>
+
+<div>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Mutator_methods')}}</div>
+
+<h4 id="Accessor_methods" name="Accessor_methods">Методы доступа</h4>
+
+<div>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Accessor_methods')}}</div>
+
+<h4 id="Iteration_methods" name="Iteration_methods">Методы обхода</h4>
+
+<div>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Iteration_methods')}}</div>
+
+<h2 id="Array_generic_methods" name="Array_generic_methods">Общие методы массива</h2>
+
+<p>Иногда хочется применить методы массива к строкам или другим массивоподобным объектам (например, к {{jsxref("Functions_and_function_scope/arguments", "аргументам", "", 1)}} функции). Делая это, вы трактуете строку как массив символов (другими словами, рассматриваете не-массив в качестве массива). Например, в порядке проверки каждого символа в переменной <var>str</var> на то, что он является буквой (латинского алфавита), вы пишете следущий код:</p>
+
+<pre class="brush: js">function isLetter(character) {
+ return character &gt;= 'a' &amp;&amp; character &lt;= 'z';
+}
+
+if (Array.prototype.every.call(str, isLetter)) {
+ console.log("Строка '" + str + "' содержит только (латинские) буквы!");
+}
+</pre>
+
+<p>Эта запись довольно расточительна и в JavaScript 1.6 введён общий сокращённый вид:</p>
+
+<pre class="brush: js">if (Array.every(str, isLetter)) {
+ console.log("Строка '" + str + "' содержит только (латинские) буквы!");
+}
+</pre>
+
+<p>{{jsxref("Global_Objects/String", "Общие методы", "#String_generic_methods", 1)}} также доступны для объекта {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<p>В настоящее время они не являются частью стандартов ECMAScript (хотя в ES2015 для достижения поставленной цели можно использовать <a href="https://github.com/monolithed/ECMAScript-6"><code>Array.from()</code></a>). Следующая прослойка позволяет использовать их во всех браузерах:</p>
+
+<pre class="brush: js">// Предполагаем, что дополнения массива уже присутствуют (для них так же можно использовать polyfill'ы)
+(function() {
+ 'use strict';
+
+ var i,
+ // Мы могли построить массив методов следующим образом, однако метод
+ // getOwnPropertyNames() нельзя реализовать на JavaScript:
+ // Object.getOwnPropertyNames(Array).filter(function(methodName) {
+ // return typeof Array[methodName] === 'function'
+ // });
+ methods = [
+ 'join', 'reverse', 'sort', 'push', 'pop', 'shift', 'unshift',
+ 'splice', 'concat', 'slice', 'indexOf', 'lastIndexOf',
+ 'forEach', 'map', 'reduce', 'reduceRight', 'filter',
+ 'some', 'every'
+ ],
+ methodCount = methods.length,
+ assignArrayGeneric = function(methodName) {
+ if (!Array[methodName]) {
+ var method = Array.prototype[methodName];
+ if (typeof method === 'function') {
+ Array[methodName] = function() {
+ return method.call.apply(method, arguments);
+ };
+ }
+ }
+ };
+
+ for (i = 0; i &lt; methodCount; i++) {
+ assignArrayGeneric(methods[i]);
+ }
+}());
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Creating_an_array" name="Example:_Creating_an_array">Пример: создание массива</h3>
+
+<p>Следующий пример создаёт массив <code>msgArray</code> с длиной 0, присваивает значения элементам <code>msgArray[0]</code> и <code>msgArray[99]</code>, что изменяет длину массива на 100.</p>
+
+<pre class="brush: js">var msgArray = [];
+msgArray[0] = 'Привет';
+msgArray[99] = 'мир';
+
+if (msgArray.length === 100) {
+ console.log('Длина равна 100.');
+}
+</pre>
+
+<h3 id="Example.3A_Creating_a_two-dimensional_array" name="Example.3A_Creating_a_two-dimensional_array">Пример: создание двумерного массива</h3>
+
+<p>Следующий код создаёт шахматную доску в виде двумерного массива строк. Затем он перемещает пешку путём копирования символа 'p' в позиции (6,4) на позицию (4,4). Старая позиция (6,4) затирается пустым местом.</p>
+
+<pre class="brush: js">var board = [
+ ['R','N','B','Q','K','B','N','R'],
+ ['P','P','P','P','P','P','P','P'],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ ['p','p','p','p','p','p','p','p'],
+ ['r','n','b','q','k','b','n','r'] ];
+
+console.log(board.join('\n') + '\n\n');
+
+// Двигаем королевскую пешку вперёд на две клетки
+board[4][4] = board[6][4];
+board[6][4] = ' ';
+console.log(board.join('\n'));
+</pre>
+
+<p>Ниже показан вывод:</p>
+
+<pre class="eval">R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+p,p,p,p,p,p,p,p
+r,n,b,q,k,b,n,r
+
+R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,p, , ,
+ , , , , , , ,
+p,p,p,p, ,p,p,p
+r,n,b,q,k,b,n,r
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4', 'Array')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Добавлены новые методы: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array.prototype.forEach", "forEach")}}, {{jsxref("Array.prototype.map", "map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array-objects', 'Array')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Добавлены новые методы: {{jsxref("Array.from")}}, {{jsxref("Array.of")}}, {{jsxref("Array.prototype.find", "find")}}, {{jsxref("Array.prototype.findIndex", "findIndex")}}, {{jsxref("Array.prototype.fill", "fill")}}, {{jsxref("Array.prototype.copyWithin", "copyWithin")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES7', '#sec-array-objects', 'Array')}}</td>
+ <td>{{Spec2('ES7')}}</td>
+ <td>Добавлен новый метод: {{jsxref("Array.prototype.includes()")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Поддержка браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Array")}}</p>
+
+<div> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide_ru/Working_with_Objects#.D0.98.D0.BD.D0.B4.D0.B5.D0.BA.D1.81.D1.8B_.D1.81.D0.B2.D0.BE.D0.B9.D1.81.D1.82.D0.B2_.D0.BE.D0.B1.D1.8A.D0.B5.D0.BA.D1.82.D0.B0">Руководство JavaScript: «Индексирование объекта свойствами»</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Array_Object">Руководство JavaScript: «Предопределённые объекты ядра: объект <code>Array</code>»</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Array_comprehensions">Выражения заполнения массива</a></li>
+ <li><a href="https://github.com/plusdude/array-generics">Полифилл для общих методов массива из JavaScript 1.8.5 и дополнений массива из ECMAScript 5</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Typed_arrays">Типизированные массивы</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/indexof/index.html b/files/ru/web/javascript/reference/global_objects/array/indexof/index.html
new file mode 100644
index 0000000000..ef6820df41
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/indexof/index.html
@@ -0,0 +1,175 @@
+---
+title: Array.prototype.indexOf()
+slug: Web/JavaScript/Reference/Global_Objects/Array/indexOf
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/indexOf
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>indexOf()</strong></code> возвращает первый индекс, по которому данный элемент может быть найден в массиве или -1, если такого индекса нет.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.indexOf(<var>searchElement</var>[, <var>fromIndex</var> = 0])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchElement</code></dt>
+ <dd>Искомый элемент в массиве.</dd>
+ <dt><code>fromIndex</code></dt>
+ <dd>Индекс, с которого начинать поиск. Если индекс больше или равен длине массива, возвращается -1, что означает, что массив даже не просматривается. Если индекс является отрицательным числом, он трактуется как смещение с конца массива. Обратите внимание: если индекс отрицателен, массив всё равно просматривается от начала к концу. Если рассчитанный индекс оказывается меньше 0, поиск ведётся по всему массиву. Значение по умолчанию равно 0, что означает, что просматривается весь массив.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>indexOf()</code> сравнивает искомый элемент <code>searchElement</code> с элементами в массиве, используя <a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">строгое сравнение</a> (тот же метод используется оператором <code>===</code>, тройное равно).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_indexOf" name="Example:_Using_indexOf">Пример: использование <code>indexOf()</code></h3>
+
+<p>В следующем примере <code>indexOf()</code> используется для поиска значений в массиве.</p>
+
+<pre class="brush: js">var array = [2, 5, 9];
+array.indexOf(2); // 0
+array.indexOf(7); // -1
+array.indexOf(9, 2); // 2
+array.indexOf(2, -1); // -1
+array.indexOf(2, -3); // 0
+</pre>
+
+<h3 id="Example:_Finding_all_the_occurrences_of_an_element" name="Example:_Finding_all_the_occurrences_of_an_element">Пример: нахождение всех вхождений элемента</h3>
+
+<p>В следующем примере <code>indexOf()</code> используется для поиска всех индексов элемента в указанном массиве, которые с помощью {{jsxref("Array.prototype.push()", "push()")}} добавляются в другой массив.</p>
+
+<pre class="brush: js">var indices = [];
+var array = ['a', 'b', 'a', 'c', 'a', 'd'];
+var element = 'a';
+var idx = array.indexOf(element);
+while (idx != -1) {
+ indices.push(idx);
+ idx = array.indexOf(element, idx + 1);
+}
+
+console.log(indices);
+// [0, 2, 4]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>indexOf()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>indexOf()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что {{jsxref("Global_Objects/TypeError", "TypeError")}} и {{jsxref("Math.abs()")}} имеют свои первоначальные значения.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.14
+// Ссылка (en): http://es5.github.io/#x15.4.4.14
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.14
+if (!Array.prototype.indexOf) {
+ Array.prototype.indexOf = function(searchElement, fromIndex) {
+ var k;
+
+ // 1. Положим O равным результату вызова ToObject с передачей ему
+ // значения this в качестве аргумента.
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ var O = Object(this);
+
+ // 2. Положим lenValue равным результату вызова внутреннего метода Get
+ // объекта O с аргументом "length".
+ // 3. Положим len равным ToUint32(lenValue).
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // 4. Если len равен 0, вернём -1.
+ if (len === 0) {
+ return -1;
+ }
+
+ // 5. Если был передан аргумент fromIndex, положим n равным
+ // ToInteger(fromIndex); иначе положим n равным 0.
+ var n = +fromIndex || 0;
+
+ if (Math.abs(n) === Infinity) {
+ n = 0;
+ }
+
+ // 6. Если n &gt;= len, вернём -1.
+ if (n &gt;= len) {
+ return -1;
+ }
+
+ // 7. Если n &gt;= 0, положим k равным n.
+ // 8. Иначе, n&lt;0, положим k равным len - abs(n).
+ // Если k меньше нуля 0, положим k равным 0.
+ k = Math.max(n &gt;= 0 ? n : len - Math.abs(n), 0);
+
+ // 9. Пока k &lt; len, будем повторять
+ while (k &lt; len) {
+ // a. Положим Pk равным ToString(k).
+ // Это неявное преобразование для левостороннего операнда в операторе in
+ // b. Положим kPresent равным результату вызова внутреннего метода
+ // HasProperty объекта O с аргументом Pk.
+ // Этот шаг может быть объединён с шагом c
+ // c. Если kPresent равен true, выполним
+ // i. Положим elementK равным результату вызова внутреннего метода Get
+ // объекта O с аргументом ToString(k).
+ // ii. Положим same равным результату применения
+ // Алгоритма строгого сравнения на равенство между
+ // searchElement и elementK.
+ // iii. Если same равен true, вернём k.
+ if (k in O &amp;&amp; O[k] === searchElement) {
+ return k;
+ }
+ k++;
+ }
+ return -1;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.14', 'Array.prototype.indexOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.indexof', 'Array.prototype.indexOf')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Array.indexOf")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.indexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/isarray/index.html b/files/ru/web/javascript/reference/global_objects/array/isarray/index.html
new file mode 100644
index 0000000000..a9599389e8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/isarray/index.html
@@ -0,0 +1,120 @@
+---
+title: Array.isArray()
+slug: Web/JavaScript/Reference/Global_Objects/Array/isArray
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Array.isArray()</strong></code> возвращает <code>true</code>, если объект является массивом и <code>false</code>, если он массивом не является.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Array.isArray(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект для проверки.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code>true</code> если объект является {{jsxref("Array")}}; иначе, <code>false</code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>За подробностям обращайтесь к статье <a href="http://web.mit.edu/jwalden/www/isArray.html">«Абсолютно точное определение того, является ли JavaScript-объект массивом или нет»</a>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">// Все следующие вызовы вернут true
+Array.isArray([]);
+Array.isArray([1]);
+Array.isArray(new Array());
+// Малоизвестный факт: Array.prototype сам является массивом:
+Array.isArray(Array.prototype);
+
+// Все следующие вызовы вернут false
+Array.isArray();
+Array.isArray({});
+Array.isArray(null);
+Array.isArray(undefined);
+Array.isArray(17);
+Array.isArray("Array");
+Array.isArray(true);
+Array.isArray(false);
+Array.isArray({ __proto__: Array.prototype });
+</pre>
+
+<h3 id="instanceof_vs_isArray"><code>instanceof</code> vs <code>isArray</code></h3>
+
+<p>Когда проверяем экземпляр <code>Array</code>, <code>Array.isArray</code> предпочтительней, чем <code>instanceof</code>, потому что он работает и с <code>iframes</code>.</p>
+
+<pre class="brush: js">var iframe = document.createElement('iframe');
+document.body.appendChild(iframe);
+xArray = window.frames[window.frames.length-1].Array;
+var arr = new xArray(1,2,3); // [1,2,3]
+
+// Correctly checking for Array
+Array.isArray(arr); // true
+// Considered harmful, because doesn't work through iframes
+arr instanceof Array; // false
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Выполнение следующего кода перед любым другим кодом создаст метод <code>Array.isArray()</code>, если он ещё не реализован в браузере.</p>
+
+<pre class="brush: js">if (!Array.isArray) {
+ Array.isArray = function(arg) {
+ return Object.prototype.toString.call(arg) === '[object Array]';
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.3.2', 'Array.isArray')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.isarray', 'Array.isArray')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.isArray")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/join/index.html b/files/ru/web/javascript/reference/global_objects/array/join/index.html
new file mode 100644
index 0000000000..28ae457276
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/join/index.html
@@ -0,0 +1,110 @@
+---
+title: Array.prototype.join()
+slug: Web/JavaScript/Reference/Global_Objects/Array/join
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Массив
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/join
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>join()</strong></code> объединяет все элементы массива (или <a href="/en-US/docs/Web/JavaScript/Guide/Indexed_collections#Working_with_array-like_objects">массивоподобного объекта</a>) в строку.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/array-join.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.join(<var>[separator]</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>separator </code> <span class="diff_add">{{optional_inline}}</span></dt>
+ <dd>Определяет строку, разделяющую элементы массива. В случае необходимости тип разделителя приводится к типу Строка. Если он не задан, элементы массива разделяются запятой '<strong>,</strong>'. Если разделитель - пустая строка, элементы массива ничем не разделяются в возвращаемой строке.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Строка, содержащая все элементы массива. Если <em><code>arr.length</code></em> == <code>0</code>,  то будет возвращена пустая строка.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Преобразует все элементы массива в строки и объединяет их в одну большую строку. Элемент массива с типом <code>undefined</code> или <code>null </code>преобразуется в пустую строку.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Joining_an_array_three_different_ways" name="Example:_Joining_an_array_three_different_ways">Соединение массива четырьмя различными способами</h3>
+
+<p>В следующем примере создаётся массив <code>a</code> с тремя элементами, затем они четыре раза объединяются в строку: с использованием разделителя по умолчанию, запятой с пробелом, плюса, окружённого пробелами, и пустой строки.</p>
+
+<pre class="brush: js">var a = ['Ветер', 'Дождь', 'Огонь'];
+var myVar1 = a.join(); // присвоит 'Ветер,Дождь,Огонь' переменной myVar1
+var myVar2 = a.join(', '); // присвоит 'Ветер, Дождь, Огонь' переменной myVar2
+var myVar3 = a.join(' + '); // присвоит 'Ветер + Дождь + Огонь' переменной myVar3
+var myVar4 = a.join(''); // присвоит 'ВетерДождьОгонь' переменной myVar4
+</pre>
+
+<h3 id="Соединение_элементов_массивоподобного_объекта">Соединение элементов массивоподобного объекта</h3>
+
+<p>В следующем примере соединяется массивоподобный объект (в данном случае список <a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments">аргументов</a> функции) с использованием вызова {{jsxref("Function.prototype.call")}} <code>для Array.prototype.join</code>.</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span> <span class="function token">f</span><span class="punctuation token">(</span>a<span class="punctuation token">,</span> b<span class="punctuation token">,</span> c<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> s <span class="operator token">=</span> Array<span class="punctuation token">.</span>prototype<span class="punctuation token">.</span>join<span class="punctuation token">.</span><span class="function token">call</span><span class="punctuation token">(</span>arguments<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>s<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// '1,a,true'</span>
+<span class="punctuation token">}</span>
+<span class="function token">f</span><span class="punctuation token">(</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="string token">'a'</span><span class="punctuation token">,</span> <span class="keyword token">true</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.5', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.join', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.join")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("Array.prototype.toString()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.join()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..94cc84dd43
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/keys/index.html
@@ -0,0 +1,90 @@
+---
+title: Array.prototype.keys()
+slug: Web/JavaScript/Reference/Global_Objects/Array/keys
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - Iterator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/keys
+---
+<div>{{JSRef}}</div>
+
+
+
+<p>Метод <code><strong>keys()</strong></code> возвращает новый <strong>итератор массива</strong> <code><strong>Array Iterator</strong></code>, содержащий ключи каждого индекса в массиве.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-keys.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.keys()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_basic_usages" name="Example:_basic_usages">Пример: базовое использование</h3>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+var iterator = arr.keys();
+
+console.log(iterator.next()); // { value: 0, done: false }
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+</pre>
+
+<h3 id="Example:_keys_iterator_doesnt_ignore_holes" name="Example:_keys_iterator_doesnt_ignore_holes">Пример: итератор, возвращаемый методом <code>keys()</code>, не пропускает дырки в массиве</h3>
+
+<pre class="brush: js">var arr = ['a', , 'c'];
+var sparseKeys = Object.keys(arr);
+var denseKeys = [...arr.keys()];
+console.log(sparseKeys); // [0, 2]
+console.log(denseKeys); // [0, 1, 2]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array.prototype.keys', 'Array.prototype.keys')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.keys', 'Array.prototype.keys')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.keys")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.values()")}}</li>
+ <li>{{jsxref("Array.prototype.entries()")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols">Iteration protocols</a></li>
+</ul>
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
new file mode 100644
index 0000000000..d5125cd9e9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/lastindexof/index.html
@@ -0,0 +1,167 @@
+---
+title: Array.prototype.lastIndexOf()
+slug: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>lastIndexOf()</strong></code> возвращает последний индекс, по которому данный элемент может быть найден в массиве или -1, если такого индекса нет. Массив просматривается от конца к началу, начиная с индекса <code>fromIndex</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-lastindexof.html")}}</div>
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.lastIndexOf(<var>searchElement</var>[, <var>fromIndex</var> = arr.length])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchElement</code></dt>
+ <dd>Искомый элемент в массиве.</dd>
+ <dt><code>fromIndex</code></dt>
+ <dd>Необязательный параметр. Индекс, с которого начинать поиск в обратном направлении. Если индекс больше или равен длине массива, просматривается весь массив. Если индекс является отрицательным числом, он трактуется как смещение с конца массива. Обратите внимание: если индекс отрицателен, массив всё равно просматривается от конца к началу. Если рассчитанный индекс оказывается меньше 0, массив даже не просматривается. Значение по умолчанию равно длине массива, что означает, что просматривается весь массив.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>lastIndexOf()</code> сравнивает искомый элемент <code>searchElement</code> с элементами в массиве, используя <a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_Equality_Operators">строгое сравнение</a> (тот же метод используется оператором <code>===</code>, тройное равно).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_lastIndexOf" name="Example:_Using_lastIndexOf">Пример: использование <code>lastIndexOf()</code></h3>
+
+<p>В следующем примере метод <code>lastIndexOf()</code> используется для поиска значений в массиве.</p>
+
+<pre class="brush: js">var array = [2, 5, 9, 2];
+array.lastIndexOf(2); // 3
+array.lastIndexOf(7); // -1
+array.lastIndexOf(2, 3); // 3
+array.lastIndexOf(2, 2); // 0
+array.lastIndexOf(2, -2); // 0
+array.lastIndexOf(2, -1); // 3
+</pre>
+
+<h3 id="Example:_Finding_all_the_occurrences_of_an_element" name="Example:_Finding_all_the_occurrences_of_an_element">Пример: нахождение всех вхождений элемента</h3>
+
+<p>В следующем примере метод <code>lastIndexOf()</code> используется для поиска всех индексов элемента в указанном массиве, которые с помощью метода {{jsxref("Array.prototype.push()", "push()")}} добавляются в другой массив.</p>
+
+<pre class="brush: js">var indices = [];
+var array = ['a', 'b', 'a', 'c', 'a', 'd'];
+var element = 'a';
+var idx = array.lastIndexOf(element);
+while (idx != -1) {
+ indices.push(idx);
+ idx = (idx &gt; 0 ? array.lastIndexOf(element, idx - 1) : -1);
+}
+
+console.log(indices);
+// [4, 2, 0]
+</pre>
+
+<p>Обратите внимание, что мы обрабатываем случай <code>idx == 0</code> отдельно, поскольку элемент всегда будет найден, независимо от параметра <code>fromIndex</code>, если он является первым элементом в массиве. Этим он отличается от метода {{jsxref("Array.prototype.indexOf()", "indexOf()")}}.</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>lastIndexOf()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>lastIndexOf()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что {{jsxref("Global_Objects/Object", "Object")}}, {{jsxref("Global_Objects/TypeError", "TypeError")}}, {{jsxref("Global_Objects/Number", "Number")}}, {{jsxref("Math.floor()")}}, {{jsxref("Math.abs()")}} и {{jsxref("Math.min()")}} имеют свои первоначальные значения.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.15
+// Ссылка (en): http://es5.github.io/#x15.4.4.15
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.15
+if (!Array.prototype.lastIndexOf) {
+ Array.prototype.lastIndexOf = function(searchElement/*, fromIndex*/) {
+ 'use strict';
+
+ if (this === void 0 || this === null) {
+ throw new TypeError();
+ }
+
+ var n, k,
+ t = Object(this),
+ len = t.length &gt;&gt;&gt; 0;
+ if (len === 0) {
+ return -1;
+ }
+
+ n = len - 1;
+ if (arguments.length &gt; 1) {
+ n = Number(arguments[1]);
+ if (n != n) {
+ n = 0;
+ }
+ else if (n != 0 &amp;&amp; n != (1 / 0) &amp;&amp; n != -(1 / 0)) {
+ n = (n &gt; 0 || -1) * Math.floor(Math.abs(n));
+ }
+ }
+
+ for (k = n &gt;= 0 ? Math.min(n, len - 1) : len - Math.abs(n); k &gt;= 0; k--) {
+ if (k in t &amp;&amp; t[k] === searchElement) {
+ return k;
+ }
+ }
+ return -1;
+ };
+}
+</pre>
+
+<p>И снова обратите внимание, что данная реализация нацелена на абсолютную совместимость с методом <code>lastIndexOf()</code>, реализованным в Firefox и движке JavaScript SpiderMonkey, включая несколько случаев, которые являются спорными крайними случаями. Если вы используете этот код в реальных приложениях, вы можете вычислять параметр <code>from</code> менее сложным образом, игнорируя эти случаи.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.15', 'Array.prototype.lastIndexOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.lastindexof', 'Array.prototype.lastIndexOf')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.lastIndexOf")}}</p>
+</div>
+
+<h2 id="Замечания_по_совместимости">Замечания по совместимости</h2>
+
+<ul>
+ <li>Начиная с Firefox 47 {{geckoRelease (47)}}, метод больше не будет возвращать <code>-0</code>. Например, <code>[0].lastIndexOf(0, -0)</code> теперь всегда будет возвращать <code>+0</code> ({{bug (1242043)}}).</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("Array.prototype.indexOf()")}}</li>
+ <li>{{jsxref("Array.prototype.lastIndexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/length/index.html b/files/ru/web/javascript/reference/global_objects/array/length/index.html
new file mode 100644
index 0000000000..402e1005a4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/length/index.html
@@ -0,0 +1,146 @@
+---
+title: Array.length
+slug: Web/JavaScript/Reference/Global_Objects/Array/length
+tags:
+ - Array
+ - JavaScript
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/length
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Cвойство <strong><code>length</code></strong> объекта, который является экземпляром типа <code>Array</code> , устанавливает или возвращает число элементов этого массива. Значение данного свойства 32-битное безнаковое целое число, которое всегда численно больше чем самый наибольший индекс в массиве.</p>
+
+<pre class="brush: js">var items = ['shoes', 'shirts', 'socks', 'sweaters'];
+items.length;
+
+// возвращает 4</pre>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.length</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Свойство <code>length</code> является целым числом с положительным знаком и значением, меньшим чем 2 в степени 32 (2<sup>32</sup>).</p>
+
+<pre class="brush: js">var namelistA = new Array(4294967296); //2 в 32 степени<sup> = </sup>4294967296
+var namelistC = new Array(-100) //отрицательная величина
+
+console.log(namelistA.length); //RangeError: Invalid array length
+console.log(namelistC.length); //RangeError: Invalid array length
+
+
+
+var namelistB = [];
+namelistB.length = Math.pow(2,32)-1; //устанавливает длину массива меньше 2 в 32 степени
+console.log(namelistB.length);
+
+//4294967295
+</pre>
+
+<p>В любой момент вы можете установить свойство <code>length</code> для обрезки массива. Когда вы расширяете массив, изменяя его свойство <code>length</code>, реальное количество элементов в массиве увеличивается; например, если вы установите свойство <code>length</code> в 3, когда оно равно 2, массив будет из 3 элементов, где значение третьего элемента будет равно <code>undefined</code> .</p>
+
+<pre class="brush: js">var arr = [1, 2, 3];
+printEntries(arr);
+
+arr.length = 5; // устанавливает длину массива 5.
+printEntries(arr);
+
+function printEntries(arr) {
+ var goNext = true;
+ var entries = arr.entries();
+ while (goNext) {
+ var result = entries.next();
+ if (result.done !== true) {
+ console.log(result.value[1]);
+ goNext = true;
+ } else
+ goNext = false;
+ }
+ console.log('=== printed ===');
+}
+
+// 1
+// 2
+// 3
+// === printed ===
+// 1
+// 2
+// 3
+// undefined
+// undefined
+// === printed ===</pre>
+
+<p>Таким образом, свойство <code>length</code> ничего не говорит о количестве определённых значений в массиве. Также смотрите раздел <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array#Relationship_between_length_and_numerical_properties">Взаимосвязь свойства <code>length</code> с числовыми свойствами</a>.</p>
+
+<p>{{js_property_attributes(1, 0, 0)}}</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Iterating_over_an_array" name="Example:_Iterating_over_an_array">Пример: итерирование по массиву</h3>
+
+<p>В следующем примере массив <code>numbers</code> итерируется до значения свойства <code>length</code>, показывающего, сколько элементов содержит массив. Значение каждого элемента удваивается.</p>
+
+<pre class="brush: js">var numbers = [1, 2, 3, 4, 5];
+
+for (var i = 0; i &lt; numbers.length; i++) {
+ numbers[i] *= 2;
+}
+// Массив numbers теперь равен [2, 4, 6, 8, 10];
+</pre>
+
+<h3 id="Example:_Shortening_an_array" name="Example:_Shortening_an_array">Пример: сокращение массива</h3>
+
+<p>Следующий пример сокращает массив <code>statesUS</code> до длины в 50 элементов, если текущая длина массива больше 50.</p>
+
+<pre class="brush: js">if (statesUS.length &gt; 50) {
+ statesUS.length = 50;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.5.2', 'Array.length')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-array-instances-length', 'Array.length')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-properties-of-array-instances-length', 'Array.length')}}</td>
+ <td>{{Spec2('ESDraft')}}    </td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<p>{{Compat("javascript.builtins.Array.length")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..95e63de892
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/map/index.html
@@ -0,0 +1,284 @@
+---
+title: Array.prototype.map()
+slug: Web/JavaScript/Reference/Global_Objects/Array/map
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.6
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/map
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>map()</strong></code> создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">let <var>new_array</var> = <var>arr</var>.map(function <var>callback</var>( <var>currentValue</var>[, <var>index</var>[, <var>array</var>]]) {
+ // Возвращает элемент для new_array
+}[, <var>thisArg</var>])</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code><var>callback</var></code></dt>
+ <dd>
+ <p>Функция, вызываемая для каждого элемента массива <code><var>arr</var></code>. Каждый раз, когда <code><var>callback</var></code> выполняется, возвращаемое значение добавляется в <code><var>new_array</var></code>.</p>
+
+ <p>Функция <code><var>callback</var></code>, создающая элемент в новом массиве, принимает три аргумента:</p>
+
+ <dl>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента в массиве.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code>{{optional_inline}}</dt>
+ <dd>Необязательный параметр. Значение, используемое в качестве <code>this</code> при вызове функции <code><var>callback</var></code></dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый массив, где каждый элемент является результатом <code>callback</code> функции.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>map</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, в порядке их появления и конструирует новый массив из результатов её вызова. Функция <code>callback</code> вызывается только для индексов массива, имеющих присвоенные значения, включая {{jsxref("Global_Objects/undefined", "undefined")}}. Она не вызывается для пропущенных элементов массива (то есть для индексов, которые никогда не были заданы, которые были удалены или которым никогда не было присвоено значение.</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.</p>
+
+<p>Если в метод <code>map</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}. В конечном итоге, значение <code>this</code>, наблюдаемое из функции <code>callback</code>, определяется согласно <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">обычным правилам определения <code>this</code>, видимого из функции</a>.</p>
+
+<p>Метод <code>map</code> не изменяет массив, для которого он был вызван (хотя функция <code>callback</code> может это делать).</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>map</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>map</code>, не будут посещены функцией <code>callback</code>. Если существующие элементы массива изменяются функцией <code>callback</code>, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод <code>map</code> посетит их; удалённые элементы посещены не будут.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Mapping_an_array_of_numbers_to_an_array_of_square_roots" name="Example:_Mapping_an_array_of_numbers_to_an_array_of_square_roots">Пример: отображение массива чисел на массив квадратных корней</h3>
+
+<p>Следующий код берёт массив чисел и создаёт новый массив, содержащий квадратные корни чисел из первого массива.</p>
+
+<pre class="brush: js notranslate">var numbers = [1, 4, 9];
+var roots = numbers.map(Math.sqrt);
+// теперь roots равен [1, 2, 3], а numbers всё ещё равен [1, 4, 9]
+</pre>
+
+<h3 id="Example_Mapping_an_array_of_numbers_using_a_function_containing_an_argument" name="Example:_Mapping_an_array_of_numbers_using_a_function_containing_an_argument">Пример: отображение массива чисел с использованием функции, содержащей аргумент</h3>
+
+<p>Следующий код показывает, как работает отображение, когда функция требует один аргумент. Аргумент будет автоматически присваиваться каждому элементу массива, когда <code>map</code> проходит по оригинальному массиву.</p>
+
+<pre class="brush: js notranslate">var numbers = [1, 4, 9];
+var doubles = numbers.map(function(num) {
+ return num * 2;
+});
+// теперь doubles равен [2, 8, 18], а numbers всё ещё равен [1, 4, 9]
+</pre>
+
+<h3 id="Example_using_map_generically" name="Example:_using_map_generically">Пример: обобщённое использование <code>map</code></h3>
+
+<p>Этот пример показывает, как использовать <code>map</code> на объекте строки {{jsxref("Global_Objects/String", "String")}} для получения массива байт в кодировке ASCII, представляющего значения символов:</p>
+
+<pre class="brush: js notranslate">var map = Array.prototype.map;
+var a = map.call('Hello World', function(x) { return x.charCodeAt(0); });
+// теперь a равен [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
+</pre>
+
+<h3 id="Example_using_map_generically_querySelectorAll" name="Example:_using_map_generically_querySelectorAll">Пример: обобщённое использование <code>map</code> вместе с <code>querySelectorAll</code></h3>
+
+<p>Этот пример показывает, как пройтись по коллекции объектов, собранных с помощью <code>querySelectorAll</code>. В данном случае мы получаем все выбранные опции на экране и печатаем их в консоль:</p>
+
+<pre class="brush: js notranslate">var elems = document.querySelectorAll('select option:checked');
+var values = [].map.call(elems, function(obj) {
+ return obj.value;
+});
+</pre>
+
+<p>Более простым способом будет использование метода {{jsxref("Array.from()")}}.</p>
+
+<h3 id="Example_Using_map_to_reverse_a_string" name="Example:_Using_map_to_reverse_a_string">Пример: использование <code>map</code> для переворачивания строки</h3>
+
+<pre class="brush: js notranslate">var str = '12345';
+[].map.call(str, function(x) {
+ return x;
+}).reverse().join('');
+
+// Вывод: '54321'
+// Бонус: используйте '===' для проверки того, является ли строка палиндромом
+</pre>
+
+<p>Более простым способом будет использование метода {{jsxref("String.split()")}} (см. пример <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/split#Example:_Reversing_a_String_using_split">обращение строки при помощи метода split()</a>).</p>
+
+<h3 id="Example_Tricky_use_case" name="Example:_Tricky_use_case">Пример: хитрый вариант использования</h3>
+
+<p><a href="http://www.wirfs-brock.com/allen/posts/166">(навеяно этой записью в блоге)</a></p>
+
+<p>Распространённой практикой является использование функции обратного вызова с одним аргументом (элемент, над которым производится операция). Некоторые функции также широко используется с одним аргументом, хотя они принимают дополнительные необязательные аргументы. Эти привычки могут привести к неожиданному поведению программы.</p>
+
+<pre class="brush: js notranslate">// Рассмотрим пример:
+['1', '2', '3'].map(parseInt);
+// Хотя ожидаемый результат вызова равен [1, 2, 3],
+// в действительности получаем [1, NaN, NaN]
+
+// Функция parseInt часто используется с одним аргументом, но она принимает два.
+// Первый аргумент является выражением, а второй - основанием системы счисления.
+// В функцию callback Array.prototype.map передаёт 3 аргумента:
+// элемент, его индекс и сам массив.
+// Третий аргумент игнорируется parseInt, но не второй, следовательно,
+// возможна путаница. Смотрите запись в блоге для дополнительной информации.
+
+function returnInt(element) {
+ return parseInt(element, 10);
+}
+
+['1', '2', '3'].map(returnInt);
+// Результатом является массив чисел (как и ожидалось)
+
+// Простейший способ добиться вышеозначенного поведения и избежать чувства "чё за!?":
+['1', '2', '3'].map(Number); // [1, 2, 3]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>map</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>map</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; он предполагает, что {{jsxref("Global_Objects/Object", "Object")}}, {{jsxref("Global_Objects/TypeError", "TypeError")}} и {{jsxref("Global_Objects/Array", "Array")}} имеют свои первоначальные значения и что <code>callback.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call")}}.</p>
+
+<pre class="brush: js notranslate">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.19
+// Ссылка (en): http://es5.github.com/#x15.4.4.19
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.19
+if (!Array.prototype.map) {
+
+ Array.prototype.map = function(callback, thisArg) {
+
+ var T, A, k;
+
+ if (this == null) {
+ throw new TypeError(' this is null or not defined');
+ }
+
+ // 1. Положим O равным результату вызова ToObject с передачей ему
+ // значения |this| в качестве аргумента.
+ var O = Object(this);
+
+ // 2. Положим lenValue равным результату вызова внутреннего метода Get
+ // объекта O с аргументом "length".
+ // 3. Положим len равным ToUint32(lenValue).
+ var len = O.length &gt;&gt;&gt; 0;
+
+ // 4. Если вызов IsCallable(callback) равен false, выкидываем исключение TypeError.
+ // Смотрите (en): http://es5.github.com/#x9.11
+ // Смотрите (ru): http://es5.javascript.ru/x9.html#x9.11
+ if (typeof callback !== 'function') {
+ throw new TypeError(callback + ' is not a function');
+ }
+
+ // 5. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined.
+ if (arguments.length &gt; 1) {
+ T = thisArg;
+ }
+
+ // 6. Положим A равным новому масиву, как если бы он был создан выражением new Array(len),
+ // где Array является стандартным встроенным конструктором с этим именем,
+ // а len является значением len.
+ A = new Array(len);
+
+ // 7. Положим k равным 0
+ k = 0;
+
+ // 8. Пока k &lt; len, будем повторять
+ while (k &lt; len) {
+
+ var kValue, mappedValue;
+
+ // a. Положим Pk равным ToString(k).
+ // Это неявное преобразование для левостороннего операнда в операторе in
+ // b. Положим kPresent равным результату вызова внутреннего метода HasProperty
+ // объекта O с аргументом Pk.
+ // Этот шаг может быть объединён с шагом c
+ // c. Если kPresent равен true, то
+ if (k in O) {
+
+ // i. Положим kValue равным результату вызова внутреннего метода Get
+ // объекта O с аргументом Pk.
+ kValue = O[k];
+
+ // ii. Положим mappedValue равным результату вызова внутреннего метода Call
+ // функции callback со значением T в качестве значения this и списком
+ // аргументов, содержащим kValue, k и O.
+ mappedValue = callback.call(T, kValue, k, O);
+
+ // iii. Вызовем внутренний метод DefineOwnProperty объекта A с аргументами
+ // Pk, Описатель Свойства
+ // { Value: mappedValue,
+ // Writable: true,
+ // Enumerable: true,
+ // Configurable: true }
+ // и false.
+
+ // В браузерах, поддерживающих Object.defineProperty, используем следующий код:
+ // Object.defineProperty(A, k, {
+ // value: mappedValue,
+ // writable: true,
+ // enumerable: true,
+ // configurable: true
+ // });
+
+ // Для лучшей поддержки браузерами, используем следующий код:
+ A[k] = mappedValue;
+ }
+ // d. Увеличим k на 1.
+ k++;
+ }
+
+ // 9. Вернём A.
+ return A;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.19', 'Array.prototype.map')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.map', 'Array.prototype.map')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправите нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.map")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>объект {{jsxref("Map")}}</li>
+ <li>{{jsxref("Array.from()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/observe/index.html b/files/ru/web/javascript/reference/global_objects/array/observe/index.html
new file mode 100644
index 0000000000..f8d7d9cd07
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/observe/index.html
@@ -0,0 +1,138 @@
+---
+title: Array.observe()
+slug: Web/JavaScript/Reference/Global_Objects/Array/observe
+tags:
+ - Array
+ - ECMAScript7
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Archive/Web/JavaScript/Array.observe
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Array.observe()</code></strong> используется для асинхронного обзора изменений в массивах, подобно тому, как метод {{jsxref("Object.observe()")}} используется для тех же целей для объектов. Он предоставляет поток изменений в порядке их возникновения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Array.observe(<var>arr</var>, <var>callback</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>arr</code></dt>
+ <dd>Обозреваемый массив.</dd>
+ <dt><code>callback</code></dt>
+ <dd>Функция, вызываемая на каждое сделанное изменение со следующими аргументами:
+ <dl>
+ <dt><code>changes</code></dt>
+ <dd>Массив объектов, каждый из которых представляет одно изменение. Эти объекты обладают следующими свойствами:
+ <ul>
+ <li><strong><code>name</code></strong>: название изменённого свойства.</li>
+ <li><strong><code>object</code></strong>: изменённый массив, после применения этого изменения.</li>
+ <li><strong><code>type</code></strong>: строка, указывающая тип произошедшего изменения. Может быть одной из <code>"add"</code>, <code>"update"</code>, <code>"delete"</code> или <code>"splice"</code>.</li>
+ <li><strong><code>oldValue</code></strong>: только для типов <code>"update"</code> и <code>"delete"</code>. Значение до изменения.</li>
+ <li><strong><code>index</code></strong>: только для типа <code>"splice"</code>. Индекс, по которому произошло изменение.</li>
+ <li><strong><code>removed</code></strong>: только для типа <code>"splice"</code>. Массив с удалёнными элементами.</li>
+ <li><strong><code>addedCount</code></strong>: только для типа <code>"splice"</code>. Количество добавленных элементов.</li>
+ </ul>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Функция <code>callback</code> вызывается каждый раз, когда с массивом <code>arr</code> происходят какие-либо изменения. Параметром в неё передаётся массив со всеми произошедшими изменениями в порядке их возникновения.</p>
+
+<div class="note">
+<p>Изменения через методы объекта {{jsxref("Array")}}, например, посредством метода {{jsxref("Array.prototype.pop()")}}, будут зарегистрированы как изменения типа <code>"splice"</code>. Присваивание по индексу, в результате которого размер массива не изменится, может быть зарегистрировано, как изменение типа <code>"update"</code>.</p>
+</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Logging_all_three_different_types" name="Example:_Logging_all_three_different_types">Пример: журналирование всех трёх типов событий</h3>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+
+Array.observe(arr, function(changes) {
+ console.log(changes);
+});
+
+arr[1] = 'B';
+// [{type: 'update', object: &lt;arr&gt;, name: '1', oldValue: 'b'}]
+
+arr[3] = 'd';
+// [{type: 'splice', object: &lt;arr&gt;, index: 3, removed: [], addedCount: 1}]
+
+arr.splice(1, 2, 'beta', 'gamma', 'delta');
+// [{type: 'splice', object: &lt;arr&gt;, index: 1, removed: ['B', 'c', 'd'], addedCount: 3}]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p><a href="https://github.com/arv/ecmascript-object-observe">Черновое предложение к обсуждению для ECMAScript 7</a>.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("36")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.unobserve()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Object.observe()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/of/index.html b/files/ru/web/javascript/reference/global_objects/array/of/index.html
new file mode 100644
index 0000000000..3f798e0516
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/of/index.html
@@ -0,0 +1,99 @@
+---
+title: Array.of()
+slug: Web/JavaScript/Reference/Global_Objects/Array/of
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - JavaScript
+ - Method
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/of
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Array.of()</strong></code> создаёт новый экземпляр массива <code>Array</code> из произвольного числа аргументов, вне зависимости от числа или типа аргумента.</p>
+
+<p>Разница между <code><strong>Array.of()</strong></code> и конструктором <code><strong>Array</strong></code> заключается в обработке целочисленных аргументов: <code><strong>Array.of(7)</strong></code> создаёт массив с одним элементом <code>7</code>, а <code><strong>Array(7)</strong></code> создаёт пустой массив со значением свойства <code>length</code> равным 7 (<strong>Замечание:</strong> подразумевается 7 пустых слотов, а не слоты со значением <code>undefined</code>).</p>
+
+<pre class="brush: js">Array.of(7); // [7]
+Array.of(1, 2, 3); // [1, 2, 3]
+
+Array(7); // массив с 7 пустыми слотами
+Array(1, 2, 3); // [1, 2, 3]</pre>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Array.of(<var>element0</var>[, <var>element1</var>[, ...[, <var>elementN</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>element<em>N</em></code></dt>
+ <dd>Элементы, из которых создаётся массив.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый массив {{jsxref("Array")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Эта функция является частью стандарта ECMAScript 6. Для дополнительной информации смотрите <a href="https://gist.github.com/rwaldron/1074126">предложение по Array.of и Array.from</a> и <a href="https://gist.github.com/rwaldron/3186576">полифилл для Array.of</a>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Array.of(1); // [1]
+Array.of(1, 2, 3); // [1, 2, 3]
+Array.of(undefined); // [undefined]
+</pre>
+
+<h2 id="Compatibility" name="Compatibility">Полифилл</h2>
+
+<p>Выполнение следующего кода перед любым другим кодом создаст метод <code>Array.of()</code>, если он ещё не реализован в браузере.</p>
+
+<pre class="brush: js">if (!Array.of) {
+ Array.of = function() {
+ return Array.prototype.slice.call(arguments);
+ // Or
+ let vals = []
+ for(let prop in arguments){
+ vals.push(arguments[prop])
+ }
+ return vals.slice()
+}</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.of', 'Array.of')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.of', 'Array.of')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Array.of")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Array.from()")}}</li>
+ <li>{{jsxref("TypedArray.of()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/pop/index.html b/files/ru/web/javascript/reference/global_objects/array/pop/index.html
new file mode 100644
index 0000000000..0f6ba275f0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/pop/index.html
@@ -0,0 +1,99 @@
+---
+title: Array.prototype.pop()
+slug: Web/JavaScript/Reference/Global_Objects/Array/pop
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>pop()</strong></code> удаляет <strong>последний</strong> элемент из массива и возвращает его значение.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.pop()</code></pre>
+
+<h3 id="Description" name="Description">Возвращаемое значение</h3>
+
+<p>Последний элемент массива или {{jsxref("undefined")}}, если массив пуст.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>pop</code> удаляет последний элемент из массива и возвращает удалённое значение.</p>
+
+<p>Метод <code>pop</code> не является привязанным к типу; этот метод может быть {{jsxref("Function.call", "вызван", "", 1)}} или {{jsxref("Function.apply", "применён", "", 1)}} к массивоподобным объектам. Объекты, не содержащие свойство <code>length</code>, отражающее последний элемент в серии последовательных числовых, начинающихся с нуля, свойств, могут повести себя неправильным образом.</p>
+
+<p>Если вы вызовете <code>pop()</code> на пустом массиве, он вернёт значение {{jsxref("undefined")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Removing_the_last_element_of_an_array" name="Example:_Removing_the_last_element_of_an_array">Удаление последнего элемента массива</h3>
+
+<p>Следующий код создаёт массив <code>myFish</code>, содержащий четыре элемента, а затем удаляет последний элемент.</p>
+
+<pre class="brush: js">var myFish = ['ангел', 'клоун', 'мандарин', 'хирург'];
+
+console.log(myFish); // ['ангел', 'клоун', 'мандарин', 'хирург']
+
+var popped = myFish.pop();
+
+console.log(myFish); // ['ангел', 'клоун', 'мандарин']
+
+console.log(popped); // 'хирург'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.6', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.pop', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.pop")}}</p>
+</div>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.push()")}}</li>
+ <li>{{jsxref("Array.prototype.shift()")}}</li>
+ <li>{{jsxref("Array.prototype.unshift()")}}</li>
+ <li>{{jsxref("Array.prototype.splice()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/prototype/index.html b/files/ru/web/javascript/reference/global_objects/array/prototype/index.html
new file mode 100644
index 0000000000..4d04fc0736
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/prototype/index.html
@@ -0,0 +1,171 @@
+---
+title: Array.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Array/prototype
+tags:
+ - Array
+ - JavaScript
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/prototype
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>Array.prototype</code></strong> представляет прототип для конструктора {{jsxref("Global_Objects/Array", "Array", "массива")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Экземпляры <span class="internal"><code>Array</code></span> наследуются от <code>Array.prototype</code>. Как и с остальными конструкторами, вы можете изменять прототип конструктора объекта для применения изменений ко всем экземплярам класса <code>Array</code>.</p>
+
+<p>Небольшой факт: <code>Array.prototype</code> сам является экземпляром <code>Array</code>:</p>
+
+<pre class="brush: js">Array.isArray(Array.prototype); // true</pre>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>Array.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип объекта.</dd>
+ <dt>{{jsxref("Array.prototype.length")}}</dt>
+ <dd>Отражает количество элементов в массиве.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<h3 id="Mutator_methods" name="Mutator_methods">Методы изменения</h3>
+
+<p>Эти методы изменяют массив:</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.copyWithin()")}} {{experimental_inline}}</dt>
+ <dd>Копирует последовательность элементов массива внутри массива.</dd>
+ <dt>{{jsxref("Array.prototype.fill()")}} {{experimental_inline}}</dt>
+ <dd>Заполняет все элементы массива от начального индекса до конечного индекса указанным значением.</dd>
+ <dt>{{jsxref("Array.prototype.pop()")}}</dt>
+ <dd>Удаляет последний элемент из массива и возвращает его.</dd>
+ <dt>{{jsxref("Array.prototype.push()")}}</dt>
+ <dd>Добавляет один или более элементов в конец массива и возвращает новую длину массива.</dd>
+ <dt>{{jsxref("Array.prototype.reverse()")}}</dt>
+ <dd>Переворачивает порядок элементов в массиве — первый элемент становится последним, а последний — первым.</dd>
+ <dt>{{jsxref("Array.prototype.shift()")}}</dt>
+ <dd>Удаляет первый элемент из массива и возвращает его.</dd>
+ <dt>{{jsxref("Array.prototype.sort()")}}</dt>
+ <dd>Сортирует элементы массива на месте и возвращает отсортированный массив.</dd>
+ <dt>{{jsxref("Array.prototype.splice()")}}</dt>
+ <dd>Добавляет и/или удаляет элементы из массива.</dd>
+ <dt>{{jsxref("Array.prototype.unshift()")}}</dt>
+ <dd>Добавляет один или более элементов в начало массива и возвращает новую длину массива.</dd>
+</dl>
+
+<h3 id="Accessor_methods" name="Accessor_methods">Методы доступа</h3>
+
+<p>Эти методы не изменяют массив, а просто возвращают его в ином представлении.</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.concat()")}}</dt>
+ <dd>Возвращает новый массив, состоящий из данного массива, соединённого с другим массивом и/или значением (списком массивов/значений).</dd>
+ <dt>{{jsxref("Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, содержится ли в массиве указанный элемент, возвращая, соответственно, <code>true</code> или <code>false</code>.</dd>
+ <dt>{{jsxref("Array.prototype.join()")}}</dt>
+ <dd>Объединяет все элементы массива в строку.</dd>
+ <dt>{{jsxref("Array.prototype.slice()")}}</dt>
+ <dd>Извлекает диапазон значений и возвращает его в виде нового массива.</dd>
+ <dt>{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает литеральное представление указанного массива; вы можете использовать это значение для создания нового массива. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Array.prototype.toString()")}}</dt>
+ <dd>Возвращает строковое представление массива и его элементов. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("Array.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает локализованное строковое представление массива и его элементов. Переопределяет метод {{jsxref("Object.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("Array.prototype.indexOf()")}}</dt>
+ <dd>Возвращает первый (наименьший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено.</dd>
+ <dt>{{jsxref("Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Возвращает последний (наибольший) индекс элемента внутри массива, равный указанному значению; или -1, если значение не найдено.</dd>
+</dl>
+
+<h3 id="Iteration_methods" name="Iteration_methods">Методы обхода</h3>
+
+<p>Некоторые методы принимают в качестве аргументов функции, вызываемые при обработке массива. Когда вызываются эти методы, достаётся длина массива, и любой элемент, добавленный свыше этой длины изнутри функции обратного вызова не посещается. Другие изменения в массиве (установка значения или удаление элемента) могут повлиять на результаты операции, если изменённый элемент метод посещает после изменения. Хотя специфическое поведение этих методов в таких случаях хорошо определено, вы не должны на него полагаться, чтобы не запутывать других людей, читающих ваш код. Если вам нужно изменить массив, лучше вместо этого скопируйте его в новый массив.</p>
+
+<dl>
+ <dt>{{jsxref("Array.prototype.forEach()")}}</dt>
+ <dd>Вызывает функцию для каждого элемента в массиве.</dd>
+ <dt>{{jsxref("Array.prototype.entries()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает новый объект итератора массива <code>Array Iterator</code>, содержащий пары ключ / значение для каждого индекса в массиве.</dd>
+ <dt>{{jsxref("Array.prototype.every()")}}</dt>
+ <dd>Возвращает <code>true</code>, если каждый элемент в массиве удовлетворяет условию проверяющей функции.</dd>
+ <dt>{{jsxref("Array.prototype.some()")}}</dt>
+ <dd>Возвращает <code>true</code>, если хотя бы один элемент в массиве удовлетворяет условию проверяющей функции.</dd>
+ <dt>{{jsxref("Array.prototype.filter()")}}</dt>
+ <dd>Создаёт новый массив со всеми элементами этого массива, для которых функция фильтрации возвращает <code>true</code>.</dd>
+ <dt>{{jsxref("Array.prototype.find()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает искомое значение в массиве, если элемент в массиве удовлетворяет условию проверяющей функции или {{jsxref("Global_Objects/undefined", "undefined")}}, если такое значение не найдено.</dd>
+ <dt>{{jsxref("Array.prototype.findIndex()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает искомый индекс в массиве, если элемент в массиве удовлетворяет условию проверяющей функции или -1, если такое значение не найдено.</dd>
+ <dt>{{jsxref("Array.prototype.keys()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает новый итератор массива, содержащий ключи каждого индекса в массиве.</dd>
+ <dt>{{jsxref("Array.prototype.map()")}}</dt>
+ <dd>Создаёт новый массив с результатами вызова указанной функции на каждом элементе данного массива.</dd>
+ <dt>{{jsxref("Array.prototype.reduce()")}}</dt>
+ <dd>Применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению.</dd>
+ <dt>{{jsxref("Array.prototype.reduceRight()")}}</dt>
+ <dd>Применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.</dd>
+ <dt>{{jsxref("Array.prototype.values()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает новый объект итератора массива <code>Array Iterator</code>, содержащий значения для каждого индекса в массиве.</dd>
+ <dt>{{jsxref("Array.prototype.@@iterator()", "Array.prototype[@@iterator]()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает новый объект итератора массива <code>Array Iterator</code>, содержащий значения для каждого индекса в массиве.</dd>
+</dl>
+
+<h3 id="Generic_methods" name="Generic_methods">Общие методы</h3>
+
+<p>Многие методы JavaScript-массива спроектированы таким образом, чтобы иметь возможность применяться ко всем объектам, «выглядящим похоже» на массивы. То есть, они могут использоваться на любом объекте, имеющим свойство <code>length</code> и к элементам которого можно получить доступ через числовые имена свойств (как при индексации: <code>array[5]</code>). <span class="comment">TODO: предоставить примеры с Array.prototype.forEach.call и добавлением методов к объекту, как сделано для {{jsxref("Global_Objects/JavaArray", "JavaArray")}} или {{jsxref("Global_Objects/String", "String")}}.</span> Некоторые методы, например {{jsxref("Array.join", "join")}}, только читают свойство <code>length</code> и числовые свойства объекта, на котором они вызываются. Другие, вроде {{jsxref("Array.reverse", "reverse")}} требуют, чтобы числовые свойства и свойство <code>length</code> объекта были изменяемыми; эти методы не могут вызываться на объектах вроде {{jsxref("Global_Objects/String", "String")}}, которые не позволяют установку своего свойства <code>length</code> или синтезирование числовых свойств.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.3.1', 'Array.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype', 'Array.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Array.prototype")}}</p>
+
+<p> </p>
+
+<div> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/push/index.html b/files/ru/web/javascript/reference/global_objects/array/push/index.html
new file mode 100644
index 0000000000..d746b2cd88
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/push/index.html
@@ -0,0 +1,111 @@
+---
+title: Array.prototype.push()
+slug: Web/JavaScript/Reference/Global_Objects/Array/push
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/push
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>push()</strong></code> добавляет один или более элементов в конец массива и возвращает новую длину массива.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.push(<var>element1</var>, ..., <var>elementN</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>element<em>N</em></code></dt>
+ <dd>Элементы, добавляемые в конец массива.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Новое значение свойства {{jsxref("Array.length", "length")}} объекта, для которого был вызван данный метод.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>push</code> присоединяет значения к массиву.</p>
+
+<p>Метод <code>push</code> не является привязанным к типу; этот метод может быть {{jsxref("Function.call", "вызван", "", 1)}} или {{jsxref("Function.apply", "применён", "", 1)}} к объектам, напоминающим массив. Метод опирается на свойство <code>length</code> для определения места вставки значений. Если свойство <code>length</code> не может быть преобразовано в число, будет использовать индекс 0. Сюда входит случай несуществования свойства <code>length</code>, в этом случае оно также будет создано.</p>
+
+<p>Единственными родными массивоподобными объектами являются {{jsxref("Global_Objects/String", "строки", "", 1)}}, хотя к ним он не может быть применён, поскольку строки являются неизменяемыми.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Adding_elements_to_an_array" name="Example:_Adding_elements_to_an_array">Пример: добавление элементов в массив</h3>
+
+<p>Следующий код создаёт массив <code>sports</code>, содержащий два элемента, а затем добавляет к нему ещё два элемента. Переменная <code>total</code> будет содержать новую длину массива.</p>
+
+<pre class="brush: js">var sports = ['футбол', 'бейсбол'];
+var total = sports.push('американский футбол', 'плавание');
+
+console.log(sports); // ['футбол', 'бейсбол', 'американский футбол', 'плавание']
+console.log(total); // 4
+</pre>
+
+<h3 id="Example_Merging_two_arrays" name="Example:_Merging_two_arrays">Пример: слияние двух массивов</h3>
+
+<p>В этом примере используется функция {{jsxref("Function.apply", "apply()")}} для помещения всех элементов из второго массива в первый.</p>
+
+<pre class="brush: js">var vegetables = ['пастернак', 'картошка'];
+var moreVegs = ['сельдерей', 'свёкла'];
+
+// Сливает второй массив с первым
+// Эквивалентно вызову vegetables.push('сельдерей', 'свёкла');
+Array.prototype.push.apply(vegetables, moreVegs);
+
+console.log(vegetables); // ['пастернак', 'картошка', 'сельдерей', 'свёкла']
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.7', 'Array.prototype.push')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.push', 'Array.prototype.push')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div>
+
+
+<p>{{Compat("javascript.builtins.Array.push")}}</p>
+</div>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.pop()")}}</li>
+ <li>{{jsxref("Array.prototype.shift()")}}</li>
+ <li>{{jsxref("Array.prototype.unshift()")}}</li>
+ <li>{{jsxref("Array.prototype.concat()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..b65fb98ed4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/reduce/index.html
@@ -0,0 +1,314 @@
+---
+title: Array.prototype.reduce()
+slug: Web/JavaScript/Reference/Global_Objects/Array/Reduce
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/Reduce
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>reduce()</strong></code> применяет функцию <strong>reducer</strong> к каждому элементу массива (слева-направо), возвращая одно результирующее значение.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-reduce.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>array</var>.reduce(<var>callback</var>[, <var>initialValue</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
+ <dl>
+ <dt><code>accumulator</code></dt>
+ <dd>Аккумулятор, аккумулирующий значение, которое возвращает функция <strong>callback </strong>после посещения очередного элемента, либо значение <code>initialValue</code>, если оно предоставлено (смотрите пояснения ниже).</dd>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента массива.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Массив, для которого была вызвана функция <code>reduce</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>initialValue</code>{{optional_inline}}</dt>
+ <dd>Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции <code>callback</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>reduce()</code> выполняет функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызова <code>callback</code>), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.</p>
+
+<p>При первом вызове функции, параметры <code>accumulator</code> и <code>currentValue</code> могут принимать одно из двух значений. Если при вызове <code>reduce()</code> передан аргумент <code>initialValue</code>, то значение <code>accumulator</code> будет равным значению <code>initialValue</code>, а значение <code>currentValue</code> будет равным первому значению в массиве. Если аргумент <code>initialValue</code> не задан, то значение <code>accumulator</code> будет равным первому значению в массиве, а значение <code>currentValue</code> будет равным второму значению в массиве.</p>
+
+<p>Если массив пустой и аргумент <code>initialValue</code> не указан, будет брошено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент <code>initialValue</code> не указан, или если аргумент <code>initialValue</code> указан, но массив пустой, то будет возвращено одно это значение, без вызова функции <code>callback</code>.</p>
+
+<p>Предположим, что <code>reduce()</code> используется следующим образом:</p>
+
+<pre class="brush: js">[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array) {
+ return previousValue + currentValue;
+});
+</pre>
+
+<p>Функция обратного вызова будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:</p>
+
+<table style="width: 100%;">
+ <thead>
+ <tr>
+ <th scope="col"></th>
+ <th scope="col"><code>previousValue</code></th>
+ <th scope="col"><code>currentValue</code></th>
+ <th scope="col"><code>index</code></th>
+ <th scope="col"><code>array</code></th>
+ <th scope="col">возвращаемое значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">первый вызов</th>
+ <td><code>0</code></td>
+ <td><code>1</code></td>
+ <td><code>1</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>1</code></td>
+ </tr>
+ <tr>
+ <th scope="row">второй вызов</th>
+ <td><code>1</code></td>
+ <td><code>2</code></td>
+ <td><code>2</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>3</code></td>
+ </tr>
+ <tr>
+ <th scope="row">третий вызов</th>
+ <td><code>3</code></td>
+ <td><code>3</code></td>
+ <td><code>3</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>6</code></td>
+ </tr>
+ <tr>
+ <th scope="row">четвёртый вызов</th>
+ <td><code>6</code></td>
+ <td><code>4</code></td>
+ <td><code>4</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>10</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Значение, возвращённое методом <code>reduce()</code> будет равным последнему результату выполнения функции обратного вызова (<code>10</code>).</p>
+
+<p>Если же вы зададите начальное значение <code>initialValue</code>, результат будет выглядеть так:</p>
+
+<pre class="brush: js">[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, index, array) {
+ return accumulator + currentValue;
+}, 10);
+</pre>
+
+<table style="width: 100%;">
+ <thead>
+ <tr>
+ <th scope="col"></th>
+ <th scope="col"><code>accumulator</code></th>
+ <th scope="col"><code>currentValue</code></th>
+ <th scope="col"><code>index</code></th>
+ <th scope="col"><code>array</code></th>
+ <th scope="col">возвращаемое значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">первый вызов</th>
+ <td><code>10</code></td>
+ <td><code>0</code></td>
+ <td><code>0</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>10</code></td>
+ </tr>
+ <tr>
+ <th scope="row">второй вызов</th>
+ <td><code>10</code></td>
+ <td><code>1</code></td>
+ <td><code>1</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>11</code></td>
+ </tr>
+ <tr>
+ <th scope="row">третий вызов</th>
+ <td><code>11</code></td>
+ <td><code>2</code></td>
+ <td><code>2</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>13</code></td>
+ </tr>
+ <tr>
+ <th scope="row">четвёртый вызов</th>
+ <td><code>13</code></td>
+ <td><code>3</code></td>
+ <td><code>3</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>16</code></td>
+ </tr>
+ <tr>
+ <th scope="row">пятый вызов</th>
+ <td><code>16</code></td>
+ <td><code>4</code></td>
+ <td><code>4</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>20</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Значение, возвращённое методом <code>reduce()</code> на этот раз, конечно же, будет равным <code>20</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Sum_up_all_values_within_an_array" name="Example:_Sum_up_all_values_within_an_array">Суммирование всех значений в массиве</h3>
+
+<pre class="brush: js">var total = [0, 1, 2, 3].reduce(function(a, b) {
+ return a + b;
+});
+// total == 6
+</pre>
+
+<h3 id="Суммирование_значений_в_массиве_объектов">Суммирование значений в массиве объектов</h3>
+
+<p>Чтобы суммировать значения, содержащиеся в массиве объектов, вы <strong>должны</strong> указать <code>initialValue</code>, чтобы каждый элемент смог пройти через <code>callback</code>.</p>
+
+<pre class="brush: js">var initialValue = 0;
+var sum = [{x: 1}, {x:2}, {x:3}].reduce(function (accumulator, currentValue) {
+ return accumulator + currentValue.x;
+}, initialValue)
+// sum == 6
+</pre>
+
+<p>Тоже самое, но со стрелочной функцией: </p>
+
+<pre class="brush: js">var initialValue = 0;
+var sum = [{x: 1}, {x:2}, {x:3}].reduce(
+ (accumulator, currentValue) =&gt; accumulator + currentValue.x,
+ initialValue
+);
+// sum == 6
+</pre>
+
+<h3 id="Example_Flatten_an_array_of_arrays" name="Example:_Flatten_an_array_of_arrays">Разворачивание массива массивов</h3>
+
+<pre class="brush: js">var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
+ return a.concat(b);
+});
+// flattened равен [0, 1, 2, 3, 4, 5]
+</pre>
+
+<h3 id="Example_Flatten_an_array_of_arrays" name="Example:_Flatten_an_array_of_arrays">Пример: склеивание массивов, содержащихся в объектах массива, с использованием оператора расширения и initialValue</h3>
+
+<pre class="brush: js">// friends - список из объектов(друзей)
+// где поле "books" - список любимых книг друга
+var friends = [
+{ name: "Anna", books: ["Bible", "Harry Potter"], age: 21 },
+{ name: "Bob", books: ["War and peace", "Romeo and Juliet"], age: 26 },
+{ name: "Alice", books: ["The Lord of the Rings", "The Shining"], age: 18 }
+]
+
+// allbooks - список, который будет содержать все книги друзей +
+// дополнительный список указанный в initialValue
+var allbooks = friends.reduce(function(prev, curr) {
+ return [...prev, ...curr.books];
+}, ["Alphabet"]);
+
+// allbooks = ["Alphabet", "Bible", "Harry Potter", "War and peace",
+// "Romeo and Juliet", "The Lord of the Rings", "The Shining"]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>Array.prototype.reduce()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>reduce()</code> в реализациях, которые не поддерживают этот метод.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.21
+// Ссылка (en): http://es5.github.io/#x15.4.4.21
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.21
+if (!Array.prototype.reduce) {
+ Array.prototype.reduce = function(callback/*, initialValue*/) {
+ 'use strict';
+ if (this == null) {
+ throw new TypeError('Array.prototype.reduce called on null or undefined');
+ }
+ if (typeof callback !== 'function') {
+ throw new TypeError(callback + ' is not a function');
+ }
+ var t = Object(this), len = t.length &gt;&gt;&gt; 0, k = 0, value;
+ if (arguments.length &gt;= 2) {
+ value = arguments[1];
+ } else {
+ while (k &lt; len &amp;&amp; ! (k in t)) {
+ k++;
+ }
+ if (k &gt;= len) {
+ throw new TypeError('Reduce of empty array with no initial value');
+ }
+ value = t[k++];
+ }
+ for (; k &lt; len; k++) {
+ if (k in t) {
+ value = callback(value, t[k], k, t);
+ }
+ }
+ return value;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.21', 'Array.prototype.reduce()')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.reduce', 'Array.prototype.reduce()')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.reduce")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.reduceRight()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html b/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html
new file mode 100644
index 0000000000..08bb7e978d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/reduceright/index.html
@@ -0,0 +1,290 @@
+---
+title: Array.prototype.reduceRight()
+slug: Web/JavaScript/Reference/Global_Objects/Array/reduceRight
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8
+ - Method
+ - Prototype
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>reduceRight()</strong></code> применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>arr</var>.reduceRight(<var>callback</var>[, <var>initialValue</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
+ <dl>
+ <dt><code>previousValue</code></dt>
+ <dd>Значение, возвращённое предыдущим выполнением функции <code>callback</code>, либо значение <code>initialValue</code>, если оно предоставлено (смотрите пояснения ниже).</dd>
+ <dt><code>currentValue</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code></dt>
+ <dd>Индекс текущего обрабатываемого элемента массива.</dd>
+ <dt><code>array</code></dt>
+ <dd>Массив, для которого была вызвана функция <code>reduceRight</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>initialValue</code></dt>
+ <dd>Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции <code>callback</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>reduceRight()</code> выполняет функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызова <code>callback</code>), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.</p>
+<p>Вызов функции обратного вызова <code>callback</code> будет выглядеть так:</p>
+<pre class="brush: js">array.reduceRight(function(previousValue, currentValue, index, array) {
+ // ...
+});
+</pre>
+<p>При первом вызове функции, параметры <code>previousValue</code> и <code>currentValue</code> могут принимать одно из двух значений. Если при вызове <code>reduceRight()</code> передан аргумент <code>initialValue</code>, то значение <code>previousValue</code> будет равным значению <code>initialValue</code>, а значение <code>currentValue</code> будет равным последнему значению в массиве. Если аргумент <code>initialValue</code> не задан, то значение <code>previousValue</code> будет равным последнему значению в массиве, а значение <code>currentValue</code> будет равным второму с конца значению в массиве.</p>
+<p>Если массив пустой и аргумент <code>initialValue</code> не указан, будет брошено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргумент <code>initialValue</code> не указан, или если аргумент <code>initialValue</code> указан, но массив пустой, то будет возвращено одно это значение, без вызова функции <code>callback</code>.</p>
+<p>Вот так будут выглядеть некоторый примеры прогона функции:</p>
+<pre class="brush: js">[0, 1, 2, 3, 4].reduceRight(function(previousValue, currentValue, index, array) {
+ return previousValue + currentValue;
+});
+</pre>
+<p>Функция обратного вызова будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:</p>
+<table style="width: 100%;">
+ <thead>
+ <tr>
+ <th scope="col"> </th>
+ <th scope="col"><code>previousValue</code></th>
+ <th scope="col"><code>currentValue</code></th>
+ <th scope="col"><code>index</code></th>
+ <th scope="col"><code>array</code></th>
+ <th scope="col">возвращаемое значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">первый вызов</th>
+ <td><code>4</code></td>
+ <td><code>3</code></td>
+ <td><code>3</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>7</code></td>
+ </tr>
+ <tr>
+ <th scope="row">второй вызов</th>
+ <td><code>7</code></td>
+ <td><code>2</code></td>
+ <td><code>2</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>9</code></td>
+ </tr>
+ <tr>
+ <th scope="row">третий вызов</th>
+ <td><code>9</code></td>
+ <td><code>1</code></td>
+ <td><code>1</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>10</code></td>
+ </tr>
+ <tr>
+ <th scope="row">четвёртый вызов</th>
+ <td><code>10</code></td>
+ <td><code>0</code></td>
+ <td><code>0</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>10</code></td>
+ </tr>
+ </tbody>
+</table>
+<p>Значение, возвращённое методом <code>reduceRight()</code> будет равным последнему результату выполнения функции обратного вызова (<code>10</code>).</p>
+<p>Если же вы зададите начальное значение <code>initialValue</code>, результат будет выглядеть так:</p>
+<pre class="brush: js">[0, 1, 2, 3, 4].reduceRight(function(previousValue, currentValue, index, array) {
+ return previousValue + currentValue;
+}, 10);
+</pre>
+<table style="width: 100%;">
+ <thead>
+ <tr>
+ <th scope="col"> </th>
+ <th scope="col"><code>previousValue</code></th>
+ <th scope="col"><code>currentValue</code></th>
+ <th scope="col"><code>index</code></th>
+ <th scope="col"><code>array</code></th>
+ <th scope="col">возвращаемое значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">первый вызов</th>
+ <td><code>10</code></td>
+ <td><code>4</code></td>
+ <td><code>4</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>14</code></td>
+ </tr>
+ <tr>
+ <th scope="row">второй вызов</th>
+ <td><code>14</code></td>
+ <td><code>3</code></td>
+ <td><code>3</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>17</code></td>
+ </tr>
+ <tr>
+ <th scope="row">третий вызов</th>
+ <td><code>17</code></td>
+ <td><code>2</code></td>
+ <td><code>2</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>19</code></td>
+ </tr>
+ <tr>
+ <th scope="row">четвёртый вызов</th>
+ <td><code>19</code></td>
+ <td><code>1</code></td>
+ <td><code>1</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>20</code></td>
+ </tr>
+ <tr>
+ <th scope="row">пятый вызов</th>
+ <td><code>20</code></td>
+ <td><code>0</code></td>
+ <td><code>0</code></td>
+ <td><code>[0, 1, 2, 3, 4]</code></td>
+ <td><code>20</code></td>
+ </tr>
+ </tbody>
+</table>
+<p>Значение, возвращённое методом <code>reduceRight()</code> на этот раз, конечно же, будет равным <code>20</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Sum_up_all_values_within_an_array" name="Example:_Sum_up_all_values_within_an_array">Пример: суммирование всех значений в массиве</h3>
+<pre class="brush: js">var total = [0, 1, 2, 3].reduceRight(function(a, b) {
+ return a + b;
+});
+// total == 6
+</pre>
+
+<h3 id="Example:_Flatten_an_array_of_arrays" name="Example:_Flatten_an_array_of_arrays">Пример: разворачивание массива массивов</h3>
+<pre class="brush: js">var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
+ return a.concat(b);
+}, []);
+// flattened равен [4, 5, 2, 3, 0, 1]
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+<p>Метод <code>Array.prototype.reduceRight()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>reduceRight()</code> в реализациях, которые не поддерживают этот метод.</p>
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.22
+// Ссылка (en): http://es5.github.io/#x15.4.4.22
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.22
+if ('function' !== typeof Array.prototype.reduceRight) {
+ Array.prototype.reduceRight = function(callback/*, initialValue*/) {
+ 'use strict';
+ if (null === this || 'undefined' === typeof this) {
+ throw new TypeError('Array.prototype.reduce called on null or undefined');
+ }
+ if ('function' !== typeof callback) {
+ throw new TypeError(callback + ' is not a function');
+ }
+ var t = Object(this), len = t.length &gt;&gt;&gt; 0, k = len - 1, value;
+ if (arguments.length &gt;= 2) {
+ value = arguments[1];
+ } else {
+ while (k &gt;= 0 &amp;&amp; !k in t) {
+ k--;
+ }
+ if (k &lt; 0) {
+ throw new TypeError('Reduce of empty array with no initial value');
+ }
+ value = t[k--];
+ }
+ for (; k &gt;= 0; k--) {
+ if (k in t) {
+ value = callback(value, t[k], k, t);
+ }
+ }
+ return value;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.22', 'Array.prototype.reduceRight')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("4.0")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Array.prototype.reduce()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..15bb946242
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/reverse/index.html
@@ -0,0 +1,96 @@
+---
+title: Array.prototype.reverse()
+slug: Web/JavaScript/Reference/Global_Objects/Array/reverse
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>reverse()</strong></code> на месте обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-reverse.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>array</var>.reverse()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Перевернутный массив</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>reverse()</code> на месте переставляет элементы массива, на котором он был вызван, изменяет массив и возвращает ссылку на него.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Reversing_the_elements_in_an_array" name="Example:_Reversing_the_elements_in_an_array">Пример: обращение порядка элементов в массиве</h3>
+
+<p>В следующем примере создаётся массив <code>myArray</code>, содержащий три элемента, а затем массив переворачивается.</p>
+
+<pre class="brush: js">var myArray = ['один', 'два', 'три'];
+myArray.reverse();
+
+console.log(myArray) // ['три', 'два', 'один']
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.8', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.reverse")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.join()")}}</li>
+ <li>{{jsxref("Array.prototype.sort()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.reverse()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/shift/index.html b/files/ru/web/javascript/reference/global_objects/array/shift/index.html
new file mode 100644
index 0000000000..081339bd93
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/shift/index.html
@@ -0,0 +1,139 @@
+---
+title: Array.prototype.shift()
+slug: Web/JavaScript/Reference/Global_Objects/Array/shift
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/shift
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>shift()</strong></code> удаляет <strong>первый</strong> элемент из массива и возвращает его значение. Этот метод изменяет длину массива.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.shift()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>shift</code> удаляет элемент по нулевому индексу, сдвигает значения по последовательным индексам вниз, а затем возвращает удалённое значение. Если свойство {{jsxref("Array.length", "length")}} массива равно 0, вернётся значение {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Метод <code>shift</code> не является привязанным к типу; этот метод может быть {{jsxref("Function.call", "вызван", "", 1)}} или {{jsxref("Function.apply", "применён", "", 1)}} к объектам, напоминающим массив. Объекты, не содержащие свойство <code>length</code>, отражающее последний элемент в серии последовательных числовых, начинающихся с нуля, свойств, могут повести себя неправильным образом.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Removing_an_element_from_an_array" name="Example:_Removing_an_element_from_an_array">Пример: удаление элемента из массива</h3>
+
+<p>Следующий код показывает массив <code>myFish</code> до и после удаления его первого элемента. Также он показывает удалённый элемент:</p>
+
+<pre class="brush: js">var myFish = ['ангел', 'клоун', 'мандарин', 'хирург'];
+
+console.log('myFish до: ' + myFish);
+//myFish до: ангел,клоун,мандарин,хирург
+
+var shifted = myFish.shift();
+
+console.log('myFish после: ' + myFish);
+//myFish после: клоун,мандарин,хирург
+
+console.log('Удалён этот элемент: ' + shifted);
+//Удалён этот элемент: ангел
+</pre>
+
+<p>Вывод этого примера будет следующим:</p>
+
+<pre class="brush: js">myFish до: ангел,клоун,мандарин,хирург
+myFish после: клоун,мандарин,хирург
+Удалён этот элемент: ангел
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.9', 'Array.prototype.shift')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.shift', 'Array.prototype.shift')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("1.0")}}</td>
+ <td>{{CompatGeckoDesktop("1.7")}}</td>
+ <td>{{CompatIE("5.5")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.push()")}}</li>
+ <li>{{jsxref("Array.prototype.pop()")}}</li>
+ <li>{{jsxref("Array.prototype.unshift()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..1b35c36e24
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/slice/index.html
@@ -0,0 +1,242 @@
+---
+title: Array.prototype.slice()
+slug: Web/JavaScript/Reference/Global_Objects/Array/slice
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>slice()</strong></code> возвращает новый массив, содержащий копию части исходного массива.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-slice.html")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>arr</var>.slice([<var>begin</var>[, <var>end</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>begin</code> {{optional_inline}}</dt>
+ <dd>Индекс (счёт начинается с нуля), по которому начинать извлечение.</dd>
+ <dd>Если индекс отрицательный, <code>begin</code> указывает смещение от конца последовательности. Вызов <code>slice(-2)</code> извлечёт два последних элемента последовательности.</dd>
+ <dd>Если <code>begin</code> неопределен, <code>slice()</code> начинает работать с индекса <code>0</code>.</dd>
+ <dd>Если <code>begin</code> больше длины последовательности вернется пустой массив.</dd>
+ <dt><code>end</code> {{optional_inline}}</dt>
+ <dd>Индекс (счёт начинается с нуля), по которому заканчивать извлечение. Метод <code>slice()</code> извлекает элементы с индексом меньше <code>end</code>.</dd>
+ <dd>Вызов <code>slice(1, 4)</code> извлечёт элементы со второго по четвёртый (элементы по индексам 1, 2 и 3).</dd>
+ <dd>Если индекс отрицательный, <code>end</code> указывает смещение от конца последовательности. Вызов <code>slice(2, -1)</code> извлечёт из последовательности элементы начиная с третьего элемента с начала и заканчивая вторым с конца.</dd>
+ <dd>Если <code>end</code> опущен, <code>slice()</code> извлекает все элементы до конца последовательности (<code>arr.length</code>).</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый массив, содержащий извлеченные элементы.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>slice()</code> не изменяет исходный массив, а возвращает новую «одноуровневую» копию, содержащую копии элементов, вырезанных из исходного массива. Элементы исходного массива копируются в новый массив по следующим правилам:</p>
+
+<ul>
+ <li>Ссылки на объекты (но не фактические объекты): метод <code>slice()</code> копирует ссылки на объекты в новый массив. И оригинал, и новый массив ссылаются на один и тот же объект. То есть, если объект по ссылке будет изменён, изменения будут видны и в новом, и в исходном массивах.</li>
+ <li>Строки и числа (но не объекты {{jsxref("Global_Objects/String", "String")}} и {{jsxref("Global_Objects/Number", "Number")}}): метод <code>slice()</code> копирует значения строк и чисел в новый массив. Изменения строки или числа в одном массиве никак не затрагивает другой.</li>
+</ul>
+
+<p>Если к любому массиву будет добавлен новый элемент, это никак не повлияет на другой массив.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Return_a_portion_of_an_existing_array" name="Example:_Return_a_portion_of_an_existing_array">Пример: возврат части существующего массива</h3>
+
+<pre class="brush: js notranslate">// Пример: наши хорошие друзья цитрусовые среди фруктов
+var fruits = ['Банан', 'Апельсин', 'Лимон', 'Яблоко', 'Манго'];
+var citrus = fruits.slice(1, 3);
+
+// citrus содержит ['Апельсин', 'Лимон']
+</pre>
+
+<h3 id="Example_Using_slice" name="Example:_Using_slice">Пример: использование метода <code>slice()</code></h3>
+
+<p>В следующем примере метод <code>slice()</code> создаёт новый массив, <code>newCar</code>, из массива <code>myCar</code>. Оба содержат ссылку на объект <code>myHonda</code>. Когда цвет в объекте <code>myHonda</code> изменяется на багровый, оба массива замечают это изменение.</p>
+
+<pre class="brush: js notranslate">// Используя slice, создаём newCar из myCar.
+var myHonda = { color: 'красный', wheels: 4, engine: { cylinders: 4, size: 2.2 } };
+var myCar = [myHonda, 2, 'в хорошем состоянии', 'приобретена в 1997'];
+var newCar = myCar.slice(0, 2);
+
+// Отображаем значения myCar, newCar и цвет myHonda
+// по ссылкам из обоих массивов.
+console.log('myCar = ' + myCar.toSource());
+console.log('newCar = ' + newCar.toSource());
+console.log('myCar[0].color = ' + myCar[0].color);
+console.log('newCar[0].color = ' + newCar[0].color);
+
+// Изменяем цвет myHonda.
+myHonda.color = 'багровый';
+console.log('Новый цвет моей Honda - ' + myHonda.color);
+
+// Отображаем цвет myHonda по ссылкам из обоих массивов.
+console.log('myCar[0].color = ' + myCar[0].color);
+console.log('newCar[0].color = ' + newCar[0].color);
+</pre>
+
+<p>Этот скрипт выведет:</p>
+
+<pre class="brush: js notranslate">myCar = [{color:'красный', wheels:4, engine:{cylinders:4, size:2.2}}, 2,
+ 'в хорошем состоянии', 'приобретена в 1997']
+newCar = [{color:'красный', wheels:4, engine:{cylinders:4, size:2.2}}, 2]
+myCar[0].color = красный
+newCar[0].color = красный
+Новый цвет моей Honda - багровый
+myCar[0].color = багровый
+newCar[0].color = багровый
+</pre>
+
+<h2 id="Array-like" name="Array-like">Массивоподобные объекты</h2>
+
+<p>Метод <code>slice()</code> также может использоваться для преобразования массивоподобных объектов / коллекций в новый массив <code>Array</code>. Вам просто нужно привязать метод к объекту. Псевдомассив {{jsxref("Functions_and_function_scope/arguments", "arguments")}} внутри функции как раз является примером «массивоподобного объекта».</p>
+
+<pre class="brush: js notranslate">function list() {
+ return Array.prototype.slice.call(arguments, 0);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+</pre>
+
+<p>Привязка может быть осуществлена посредством функции .<code>call()</code> из прототипа функции {{jsxref("Function.prototype")}}, также запись может быть сокращена до <code>[].slice.call(arguments)</code> вместо использования <code>Array.prototype.slice.call()</code>. В любом случае, она может быть упрощена посредством использования функции {{jsxref("Function.prototype.bind()", "bind()")}}.</p>
+
+<pre class="brush: js notranslate">var unboundSlice = Array.prototype.slice;
+var slice = Function.prototype.call.bind(unboundSlice);
+
+function list() {
+ return slice(arguments, 0);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+</pre>
+
+<h2 id="Streamlining_cross-browser_behavior" name="Streamlining_cross-browser_behavior">Совершенствование кросс-браузерного поведения</h2>
+
+<p>Хотя спецификация не требует от хост-объектов (например, объектов DOM) следовать поведению Mozilla при преобразовании с помощью <code>Array.prototype.slice()</code> и IE &lt; 9 так не делает, версии IE, начиная с 9-й это умеют. «Прокладывание» позволяет добиться надёжного кросс-браузерного поведения. Пока другие современные браузеры будут поддерживать эту способность, что и делают в настоящее время IE, Mozilla, Chrome, Safari и Opera, разработчики, читая (поддерживающий DOM) код функции <code>slice()</code>, опирающийся на эту прокладку, не будут вводиться в заблуждение его семантикой; они могут смело полагаться на текущую семантику, являющуюся, видимо, <em>де-факто</em> стандартным поведением. (Прокладка также исправляет поведение IE, позволяя работать со вторым аргументом <code>slice()</code>, явно определённым как {{jsxref("Global_Objects/null", "null")}}/{{jsxref("Global_Objects/undefined", "undefined")}}, поскольку более ранние версии IE такое не позволяют, но все современные браузеры, в том числе IE &gt;= 9, поддерживают данное поведение.)</p>
+
+<pre class="brush: js notranslate">/**
+ * Прокладка для "исправления" отсутствия поддержки в IE &lt; 9 применения slice
+ * к хост-объектам вроде NamedNodeMap, NodeList и HTMLCollection
+ * (технически, поскольку хост-объекты зависят от реализации,
+ * по крайней мере, до ES2015, IE не обязан так работать).
+ * Также работает для строк, исправляет поведение IE &lt; 9, позволяя явно указывать undefined
+ * вторым аргументом (как в Firefox), и предотвращает ошибки, возникающие при
+ * вызове на других объектах DOM.
+ */
+(function () {
+ 'use strict';
+ var _slice = Array.prototype.slice;
+
+ try {
+ // Не может использоваться с элементами DOM в IE &lt; 9
+ _slice.call(document.documentElement);
+ } catch (e) { // В IE &lt; 9 кидается исключение
+ // Функция будет работать для истинных массивов, массивоподобных объектов,
+ // NamedNodeMap (атрибуты, сущности, примечания),
+ // NodeList (например, getElementsByTagName), HTMLCollection (например, childNodes)
+ // и не будет падать на других объектах DOM (как это происходит на элементах DOM в IE &lt; 9)
+ Array.prototype.slice = function(begin, end) {
+ // IE &lt; 9 будет недоволен аргументом end, равным undefined
+ end = (typeof end !== 'undefined') ? end : this.length;
+
+ // Для родных объектов Array мы используем родную функцию slice
+ if (Object.prototype.toString.call(this) === '[object Array]') {
+ return _slice.call(this, begin, end);
+ }
+
+ // Массивоподобные объекты мы обрабатываем самостоятельно
+ var i, cloned = [],
+ size, len = this.length;
+
+ // Обрабатываем отрицательное значение begin
+ var start = begin || 0;
+ start = (start &gt;= 0) ? start: len + start;
+
+ // Обрабатываем отрицательное значение end
+ var upTo = (end) ? end : len;
+ if (end &lt; 0) {
+ upTo = len + end;
+ }
+
+ // Фактически ожидаемый размер среза
+ size = upTo - start;
+
+ if (size &gt; 0) {
+ cloned = new Array(size);
+ if (this.charAt) {
+ for (i = 0; i &lt; size; i++) {
+ cloned[i] = this.charAt(start + i);
+ }
+ } else {
+ for (i = 0; i &lt; size; i++) {
+ cloned[i] = this[start + i];
+ }
+ }
+ }
+
+ return cloned;
+ };
+ }
+}());
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.10', 'Array.prototype.slice')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.slice', 'Array.prototype.slice')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Array.slice")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.splice()")}}</li>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..ee4c18f9f0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/some/index.html
@@ -0,0 +1,215 @@
+---
+title: Array.prototype.some()
+slug: Web/JavaScript/Reference/Global_Objects/Array/some
+tags:
+ - Array
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.6
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - Массив
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/some
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>some()</strong></code> проверяет, удовлетворяет ли какой-либо элемент массива условию, заданному в передаваемой функции.</p>
+
+<div class="blockIndicator note">
+<p><strong>Обратите внимание</strong>: метод возвращает <code>false</code> при любом условии для пустого массива.</p>
+</div>
+
+<p>{{EmbedInteractiveExample("pages/js/array-some.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>arr</var>.some(<var>callback(element[, index[, array]])</var>[, <var>thisArg</var>])</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция проверки каждого элемента, принимает три аргумента:
+ <dl>
+ <dt><code>element</code></dt>
+ <dd>Текущий обрабатываемый элемент массива.</dd>
+ <dt><code>index</code>{{Optional_inline}}</dt>
+ <dd>Индекс текущего обрабатываемого элемента массива.</dd>
+ <dt><code>array</code>{{Optional_inline}}</dt>
+ <dd>Массив, по которому осуществляется проход.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code>{{Optional_inline}}</dt>
+ <dd>Значение, используемое в качестве <code>this</code> при выполнении функции <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code><strong>true</strong></code>, если функция проверки возвращает {{Glossary("truthy")}} значение хотя бы для одного элемента массива. Иначе, <code><strong>false</strong></code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>some()</code> вызывает переданную функцию <code>callback</code> один раз для каждого элемента, присутствующего в массиве до тех пор, пока не найдет такой, для которого <code>callback</code> вернет <em>истинное</em> значение (значение, становящееся равным <code>true</code> при приведении его к типу {{jsxref("Boolean")}}). Если такой элемент найден, метод <code>some()</code> немедленно вернёт <code>true</code>. В противном случае, если <code>callback</code> вернёт <code>false</code> для всех элементов массива, метод <code>some()</code> вернёт <code>false</code>. Функция <code>callback</code> вызывается только для индексов массива, имеющих присвоенные значения; она не вызывается для индексов, которые были удалены или которым значения никогда не присваивались.</p>
+
+<p>Функция <code>callback</code> вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.</p>
+
+<p>Если в метод <code>some()</code> был передан параметр <code>thisArg</code>, при вызове <code>callback</code> он будет использоваться в качестве значения <code>this</code>. В противном случае в качестве значения <code>this</code> будет использоваться значение {{jsxref("Global_Objects/undefined", "undefined")}}. В конечном итоге, значение <code>this</code>, наблюдаемое из функции <code>callback</code>, определяется согласно <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">обычным правилам определения <code>this</code>, видимого из функции</a>.</p>
+
+<p>Метод <code>some()</code> не изменяет массив, для которого он был вызван.</p>
+
+<p>Диапазон элементов, обрабатываемых методом <code>some()</code>, устанавливается до первого вызова функции <code>callback</code>. Элементы, добавленные в массив после начала выполнения метода <code>some()</code>, не будут посещены функцией <code>callback</code>. Если существующие элементы массива изменятся, значения, переданные в функцию <code>callback</code>, будут значениями на тот момент времени, когда метод <code>some()</code> посетит их; удалённые элементы посещены не будут.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Testing_size_of_all_array_elements" name="Example:_Testing_size_of_all_array_elements">Проверка значений элементов массива</h3>
+
+<p>Следующий пример проверяет наличие в массиве элемента, который больше 10.</p>
+
+<pre class="brush: js">function isBiggerThan10(element, index, array) {
+ return element &gt; 10;
+}
+[2, 5, 8, 1, 4].some(isBiggerThan10); // false
+[12, 5, 8, 1, 4].some(isBiggerThan10); // true
+</pre>
+
+<p>{{ EmbedLiveSample('Проверка_значений_элементов_массива', '', '', '', 'Web/JavaScript/Reference/Global_Objects/Array/some') }}</p>
+
+<h3 id="Example_Testing_array_elements_using_arrow_functions" name="Example:_Testing_array_elements_using_arrow_functions">Проверка элементов массива с использованием стрелочных функций</h3>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочные функции</a> предоставляют более краткий синтаксис для подобных проверок.</p>
+
+<pre class="brush: js">[2, 5, 8, 1, 4].some(elem =&gt; elem &gt; 10); // false
+[12, 5, 8, 1, 4].some(elem =&gt; elem &gt; 10); // true
+</pre>
+
+<p>{{ EmbedLiveSample('Проверка_элементов_массива_с_использованием_стрелочных_функций', '', '', '', 'Web/JavaScript/Reference/Global_Objects/Array/some') }}</p>
+
+<h3 id="Проверка_наличия_элемента_в_массиве">Проверка наличия элемента в массиве</h3>
+
+<p>Чтобы имитировать функцию метода <code>includes()</code>, эта пользовательская функция возвращает true, если элемент существует в массиве:</p>
+
+<pre class="brush: js">const fruits = ['apple', 'banana', 'mango', 'guava'];
+
+function checkAvailability(arr, val) {
+ return arr.some(function(arrVal) {
+ return val === arrVal;
+ });
+}
+
+checkAvailability(fruits, 'kela'); // false
+checkAvailability(fruits, 'banana'); // true</pre>
+
+<p>{{ EmbedLiveSample('Проверка_наличия_элемента_в_массиве', '', '', '', 'Web/JavaScript/Reference/Global_Objects/Array/some') }}</p>
+
+<h3 id="Проверка_наличия_элемента_в_массиве_с_использованием_стрелочной_функции">Проверка наличия элемента в массиве с использованием стрелочной функции</h3>
+
+<pre><code>const fruits = ['apple', 'banana', 'mango', 'guava'];
+
+function checkAvailability(arr, val) {
+ return arr.some(arrVal =&gt; val === arrVal);
+}
+
+checkAvailability(fruits, 'kela'); // false
+checkAvailability(fruits, 'banana'); // true</code></pre>
+
+<p>{{ EmbedLiveSample('Проверка_наличия_элемента_в_массиве_с_использованием_стрелочной_функции', '', '', '', 'Experiment:StaticExamplesOnTop/JavaScript/Array/some') }}</p>
+
+<h3 id="Приведение_значения_к_логическому_типу">Приведение значения к логическому типу</h3>
+
+<pre><code>const TRUTHY_VALUES = [true, 'true', 1];
+
+function getBoolean(value) {
+ 'use strict';
+
+ if (typeof value === 'string') {
+ value = value.toLowerCase().trim();
+ }
+
+ return TRUTHY_VALUES.some(function(t) {
+ return t === value;
+ });
+}
+
+getBoolean(false); // false
+getBoolean('false'); // false
+getBoolean(1); // true
+getBoolean('true'); // true</code></pre>
+
+<p>{{ EmbedLiveSample('Приведение_значения_к_логическому_типу', '', '', '', 'Web/JavaScript/Reference/Global_Objects/Array/some') }}</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>some()</code> был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может не присутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать <code>some()</code> в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 5-го издания; и предполагает, что {{jsxref("Global_Objects/Object", "Object")}} и {{jsxref("Global_Objects/TypeError", "TypeError")}} имеют свои первоначальные значения и что <code>callback.call</code> вычисляется в оригинальное значение {{jsxref("Function.prototype.call()")}}.</p>
+
+<pre class="brush: js">// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.17
+// Ссылка (en): http://es5.github.io/#x15.4.4.17
+// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.17
+if (!Array.prototype.some) {
+ Array.prototype.some = function(fun/*, thisArg*/) {
+ 'use strict';
+
+ if (this == null) {
+ throw new TypeError('Array.prototype.some called on null or undefined');
+ }
+
+ if (typeof fun !== 'function') {
+ throw new TypeError();
+ }
+
+ var t = Object(this);
+ var len = t.length &gt;&gt;&gt; 0;
+
+ var thisArg = arguments.length &gt;= 2 ? arguments[1] : void 0;
+ for (var i = 0; i &lt; len; i++) {
+ if (i in t &amp;&amp; fun.call(thisArg, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.17', 'Array.prototype.some')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.some', 'Array.prototype.some')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.some', 'Array.prototype.some')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Array.some")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.find()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.some()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..06769275e6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/sort/index.html
@@ -0,0 +1,234 @@
+---
+title: Array.prototype.sort()
+slug: Web/JavaScript/Reference/Global_Objects/Array/sort
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/sort
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>sort()</strong></code> <em>на месте</em> сортирует элементы массива и возвращает отсортированный массив. Сортировка не обязательно <a href="https://ru.wikipedia.org/wiki/Устойчивая_сортировка">устойчива</a> (<a href="https://en.wikipedia.org/wiki/Sorting_algorithm#Stability">англ.</a>). Порядок cортировки по умолчанию соответствует порядку кодовых точек Unicode.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>arr</var>.sort([<var>compareFunction</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>compareFunction</code></dt>
+ <dd>Необязательный параметр. Указывает функцию, определяющую порядок сортировки. Если опущен, массив сортируется в соответствии со значениями кодовых точек каждого символа <a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Unicode">Unicode</a>, полученных путём преобразования каждого элемента в строку.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Отсортированный массив. Важно, что копия массива не создается - массив сортируется <em><a href="https://en.wikipedia.org/wiki/In-place_algorithm">на месте</a></em>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если функция сравнения <code>compareFunction</code> не предоставляется, элементы сортируются путём преобразования их в строки и сравнения строк в порядке следования кодовых точек Unicode. Например, слово "Вишня" идёт перед словом "бананы". При числовой сортировке, 9 идёт перед 80, но поскольку числа преобразуются в строки, то "80" идёт перед "9" в соответствии с порядком в Unicode.</p>
+
+<pre class="brush: js notranslate">var fruit = ['арбузы', 'бананы', 'Вишня'];
+fruit.sort(); // ['Вишня', 'арбузы', 'бананы']
+
+var scores = [1, 2, 10, 21];
+scores.sort(); // [1, 10, 2, 21]
+
+var things = ['слово', 'Слово', '1 Слово', '2 Слова'];
+things.sort(); // ['1 Слово', '2 Слова', 'Слово', 'слово']
+// В Unicode, числа находятся перед буквами в верхнем регистре,
+// а те, в свою очередь, перед буквами в нижнем регистре.
+</pre>
+
+<p>Если функция сравнения <code>compareFunction</code> предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента <code>a</code> и <code>b</code>, то:</p>
+
+<ul>
+ <li>Если <code>compareFunction(a, b)</code> меньше 0, сортировка поставит <code>a</code> по меньшему индексу, чем <code>b</code>, то есть, <code>a</code> идёт первым.</li>
+ <li>Если <code>compareFunction(a, b)</code> вернёт 0, сортировка оставит <code>a</code> и <code>b</code> неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).</li>
+ <li>Если <code>compareFunction(a, b)</code> больше 0, сортировка поставит <code>b</code> по меньшему индексу, чем <code>a</code>.</li>
+ <li>Функция <code>compareFunction(a, b)</code> должна всегда возвращать одинаковое значение для определённой пары элементов <code>a</code> и <code>b</code>. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.</li>
+</ul>
+
+<p>Итак, функция сравнения имеет следующую форму:</p>
+
+<pre class="brush: js notranslate">function compare(a, b) {
+ if (a меньше b по некоторому критерию сортировки) {
+ return -1;
+ }
+ if (a больше b по некоторому критерию сортировки) {
+ return 1;
+ }
+ // a должно быть равным b
+ return 0;
+}
+</pre>
+
+<p>Для числового сравнения, вместо строкового, функция сравнения может просто вычитать <code>b</code> из <code>a</code>. Следующая функция будет сортировать массив по возрастанию:</p>
+
+<pre class="brush: js notranslate">function compareNumbers(a, b) {
+ return a - b;
+}
+</pre>
+
+<p>Метод <code>sort</code> можно удобно использовать с {{jsxref("Operators/function", "функциональными выражениями", "", 1)}} (и <a href="/ru/docs/Web/JavaScript/Guide/Closures">замыканиями</a>):</p>
+
+<pre class="brush: js notranslate">var numbers = [4, 2, 5, 1, 3];
+numbers.sort(function(a, b) {
+ return a - b;
+});
+console.log(numbers); // [1, 2, 3, 4, 5]
+</pre>
+
+<p>Объекты могут быть отсортированы по значению одного из своих свойств.</p>
+
+<pre class="brush: js notranslate">var items = [
+ { name: 'Edward', value: 21 },
+ { name: 'Sharpe', value: 37 },
+ { name: 'And', value: 45 },
+ { name: 'The', value: -12 },
+ { name: 'Magnetic' },
+ { name: 'Zeros', value: 37 }
+];
+items.sort(function (a, b) {
+ if (a.name &gt; b.name) {
+ return 1;
+ }
+ if (a.name &lt; b.name) {
+ return -1;
+ }
+ // a должно быть равным b
+ return 0;
+});
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Creating.2C_displaying.2C_and_sorting_an_array" name="Example:_Creating.2C_displaying.2C_and_sorting_an_array">Пример: создание, отображение и сортировка массива</h3>
+
+<p>В следующем примере создаётся четыре массива, сначала отображается первоначальный массив, а затем они сортируются. Числовые масивы сортируются сначала без, а потом с функцией сравнения.</p>
+
+<pre class="brush: js notranslate">var stringArray = ['Голубая', 'Горбатая', 'Белуга'];
+var numericStringArray = ['80', '9', '700'];
+var numberArray = [40, 1, 5, 200];
+var mixedNumericArray = ['80', '9', '700', 40, 1, 5, 200];
+
+function compareNumbers(a, b) {
+ return a - b;
+}
+
+// снова предполагаем, что функция печати определена
+console.log('stringArray:', stringArray.join());
+console.log('Сортировка:', stringArray.sort());
+
+console.log('numberArray:', numberArray.join());
+console.log('Сортировка без функции сравнения:', numberArray.sort());
+console.log('Сортировка с функцией compareNumbers:', numberArray.sort(compareNumbers));
+
+console.log('numericStringArray:', numericStringArray.join());
+console.log('Сортировка без функции сравнения:', numericStringArray.sort());
+console.log('Сортировка с функцией compareNumbers:', numericStringArray.sort(compareNumbers));
+
+console.log('mixedNumericArray:', mixedNumericArray.join());
+console.log('Сортировка без функции сравнения:', mixedNumericArray.sort());
+console.log('Сортировка с функцией compareNumbers:', mixedNumericArray.sort(compareNumbers));
+</pre>
+
+<p>Этот пример произведёт следующий вывод. Как показывает вывод, когда используется функция сравнения, числа сортируются корректно вне зависимости от того, являются ли они собственно числами или строками с числами.</p>
+
+<pre class="notranslate">stringArray: Голубая,Горбатая,Белуга
+Сортировка: Белуга,Голубая,Горбатая
+
+numberArray: 40,1,5,200
+Сортировка без функции сравнения: 1,200,40,5
+Сортировка с функцией compareNumbers: 1,5,40,200
+
+numericStringArray: 80,9,700
+Сортировка без функции сравнения: 700,80,9
+Сортировка с функцией compareNumbers: 9,80,700
+
+mixedNumericArray: 80,9,700,40,1,5,200
+Сортировка без функции сравнения: 1,200,40,5,700,80,9
+Сортировка с функцией compareNumbers: 1,5,9,40,80,200,700
+</pre>
+
+<h3 id="Example_Sorting_non-ASCII_characters" name="Example:_Sorting_non-ASCII_characters">Пример: сортировка не-ASCII символов</h3>
+
+<p>Для сортировки строк с не-ASCII символами, то есть строк с символами акцента (e, é, è, a, ä и т.д.), строк, с языками, отличными от английского: используйте {{jsxref("String.localeCompare")}}. Эта функция может сравнивать эти символы, чтобы они становились в правильном порядке.</p>
+
+<pre class="brush: js notranslate">var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
+items.sort(function (a, b) {
+ return a.localeCompare(b);
+});
+
+// items равен ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']
+</pre>
+
+<h3 id="Example_Sorting_maps" name="Example:_Sorting_maps">Пример: сортировка c помощью map</h3>
+
+<p>Функция сравнения <code>(compareFunction)</code> может вызываться несколько раз для каждого элемента в массиве. В зависимости от природы функции сравнения, это может привести к высоким расходам ресурсов. Чем более сложна функция сравнения и чем больше элементов требуется отсортировать, тем разумнее использовать <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/map">map</a> для сортировки. Идея состоит в том, чтобы обойти массив один раз, чтобы извлечь фактические значения, используемые для сортировки, во временный массив, отсортировать временный массив, а затем обойти временный массив для получения правильного порядка.</p>
+
+<pre class="brush: js notranslate">// массив для сортировки
+var list = ['Дельта', 'альфа', 'ЧАРЛИ', 'браво'];
+
+// временный массив содержит объекты с позицией и значением сортировки
+var mapped = list.map(function(el, i) {
+return { index: i, value: el.toLowerCase() };
+});
+
+// сортируем массив, содержащий уменьшенные значения
+mapped.sort(function(a, b) {
+ if (a.value &gt; b.value) {
+ return 1; }
+ if (a.value &lt; b.value) {
+ return -1; }
+ return 0;
+});
+
+// контейнер для результа
+var result = mapped.map(function(el) {
+ return list[el.index];
+});
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.11', 'Array.prototype.sort')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.sort', 'Array.prototype.sort')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Array.sort")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.reverse()")}}</li>
+ <li>{{jsxref("String.prototype.localeCompare()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/splice/index.html b/files/ru/web/javascript/reference/global_objects/array/splice/index.html
new file mode 100644
index 0000000000..a714590fab
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/splice/index.html
@@ -0,0 +1,142 @@
+---
+title: Array.prototype.splice()
+slug: Web/JavaScript/Reference/Global_Objects/Array/splice
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/splice
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>splice()</strong></code> изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>array</var>.splice(<var>start[</var>, <var>deleteCount</var>[, <var>item1</var>[, <var>item2</var>[, ...]]]])
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>start</code></dt>
+ <dd>Индекс, по которому начинает изменять массив. Если больше длины массива, реальный индекс будет установлен на длину массива. Если отрицателен, указывает индекс элемента с конца.</dd>
+ <dt><code>deleteCount </code>{{optional_inline}}</dt>
+ <dd>Целое число, показывающее количество старых удаляемых из массива элементов. Если <code>deleteCount</code> равен 0, элементы не удаляются. В этом случае вы должны указать как минимум один новый элемент. Если <code>deleteCount</code> больше количества элементов, оставшихся в массиве, начиная с индекса <code>start</code>, то будут удалены все элементы до конца массива.</dd>
+ <dt><code>item<em>N </em></code>{{optional_inline}}</dt>
+ <dd>Необязательные параметры. Добавляемые к массиву элементы. Если вы не укажете никакого элемента, <code>splice()</code> просто удалит элементы из массива.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Массив, содержащий удалённые элементы. Если будет удалён только один элемент, вернётся массив из одного элемента. Если никакие элементы не будут удалены, вернётся пустой массив.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если количество указанных вставляемых элементов будет отличным от количества удаляемых элементов, массив изменит длину после вызова.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Удаляет_0_элементов_по_индексу_2_и_вставляет_drum">Удаляет 0 элементов по индексу 2 и вставляет "drum"</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(2, 0, 'drum');
+
+// myFish равен ["angel", "clown", "drum", "mandarin", "sturgeon"]
+// removed равен [], ничего не удалено</pre>
+
+<h3 id="Удаляет_1_элемент_по_индексу_3">Удаляет 1 элемент по индексу 3</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(3, 1);
+
+// removed равен ["mandarin"]
+// myFish равен ["angel", "clown", "drum", "sturgeon"]</pre>
+
+<h3 id="Удаляет_1_элемент_по_индексу_2_и_вставляет_trumpet">Удаляет 1 элемент по индексу 2 и вставляет "trumpet"</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
+var removed = myFish.splice(2, 1, 'trumpet');
+
+// myFish равен ["angel", "clown", "trumpet", "sturgeon"]
+// removed равен ["drum"]</pre>
+
+<h3 id="Удаляет_2_элемента_начиная_с_индекса_0_и_вставляет_parrot_anemone_и_blue">Удаляет 2 элемента начиная с индекса 0 и вставляет "parrot", "anemone" и "blue"</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
+var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
+
+// myFish равен ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
+// removed равен ["angel", "clown"]</pre>
+
+<h3 id="Удаляет_2_элемента_начиная_с_индекса_2">Удаляет 2 элемента начиная с индекса 2</h3>
+
+<pre class="brush: js notranslate">var myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
+var removed = myFish.splice(myFish.length - 3, 2);
+
+// myFish равен ["parrot", "anemone", "sturgeon"]
+// removed равен ["blue", "trumpet"]</pre>
+
+<h3 id="Удаляет_1_элемент_по_индексу_-2">Удаляет 1 элемент по индексу -2</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(-2, 1);
+
+// myFish равен ["angel", "clown", "sturgeon"]
+// removed равен s ["mandarin"]</pre>
+
+<h3 id="Удаляет_все_элементы_после_индекса_2_включительно">Удаляет все элементы после индекса 2 (включительно)</h3>
+
+<pre class="brush: js notranslate">var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+var removed = myFish.splice(2);
+
+// myFish равен ["angel", "clown"]
+// removed равен ["mandarin", "sturgeon"]</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.12', 'Array.prototype.splice')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.splice', 'Array.prototype.splice')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Array.splice")}}</p>
+
+<h3 id="Backward_compatibility" name="Backward_compatibility">Обратная совместимость</h3>
+
+<p>В JavaScript 1.2 метод <code>splice()</code> возвращал удалённый элемент только если был удалён один элемент (параметр <code>deleteCount</code> равен 1); в противном случае метод возвращал массив с удалёнными элементами. Обратите внимание, что последним браузером, использующим JavaScript 1.2, был Netscape Navigator 4, так что вы можете считать, что <code>splice()</code> всегда возвращает массив.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.push()", "push()")}} / {{jsxref("Array.prototype.pop()", "pop()")}} — добавление / удаление элементов с конца массива</li>
+ <li>{{jsxref("Array.prototype.unshift()", "unshift()")}} / {{jsxref("Array.prototype.shift()", "shift()")}} — добавление / удаление элементов с начала массива</li>
+ <li>{{jsxref("Array.prototype.concat()", "concat()")}} — возвращает новый массив, состоящий из данного массива, соединённого с другими массивами и/или значениями</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/tolocalestring/index.html b/files/ru/web/javascript/reference/global_objects/array/tolocalestring/index.html
new file mode 100644
index 0000000000..ed3f4f6088
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/tolocalestring/index.html
@@ -0,0 +1,134 @@
+---
+title: Array.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString
+tags:
+ - Array
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/toLocaleString
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>toLocaleString()</strong></code> возвращает строковое представление элементов массива. Элементы преобразуются в строки с использованием своих собственных методов <code>toLocaleString</code> и эти строки разделяются локале-зависимой строкой (например, запятой «,»).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.toLocaleString();</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Элементы массива преобразуются в строки с использованием своих собственных методов <code>toLocaleString</code>:</p>
+
+<ul>
+ <li><code>Object</code>: {{jsxref("Object.prototype.toLocaleString()")}}</li>
+ <li><code>Number</code>: {{jsxref("Number.prototype.toLocaleString()")}}</li>
+ <li><code>Date</code>: {{jsxref("Date.prototype.toLocaleString()")}}</li>
+</ul>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleString" name="Example:_Using_toLocaleString">Пример: использование <code>toLocaleString</code></h3>
+
+<pre class="brush: js">var number = 1337;
+var date = new Date();
+var myArr = [number, date, 'foo'];
+
+var str = myArr.toLocaleString();
+
+console.log(str);
+// напечатает '1337,6.12.2013 19:37:35,foo',
+// если работает под германской локалью (de-DE) с временной зоной Европа/Берлин
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.3', 'Array.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.tolocalestring', 'Array.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/tosource/index.html b/files/ru/web/javascript/reference/global_objects/array/tosource/index.html
new file mode 100644
index 0000000000..c4d30c1287
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/tosource/index.html
@@ -0,0 +1,94 @@
+---
+title: Array.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Array/toSource
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/toSource
+---
+<div>
+ {{JSRef("Global_Objects", "Array")}} {{non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toSource()</strong></code> возвращает строковое представление исходного кода массива.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>arr</var>.toSource()</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toSource</code> возвращает следующие значения:</p>
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Array", "Array")}}, метод <code>toSource</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+ <pre class="brush: js">function Array() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров класса {{jsxref("Global_Objects/Array", "Array")}}, метод <code>toSource</code> возвращает строковое представление исходного кода.</li>
+</ul>
+<p>Этот метод обычно вызывается внутри движка JavaScript, а не явно в коде. Вы можете вызвать <code>toSource</code> во время отладки для просмотра содержимого массива.</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<h3 id="Example:_Examining_the_source_code_of_an_array" name="Example:_Examining_the_source_code_of_an_array">Пример: рассмотрение исходного кода массива</h3>
+<p>Для просмотра исходного кода массива:</p>
+<pre class="brush: js">var alpha = new Array('a', 'b', 'c');
+
+alpha.toSource(); // вернёт ['a', 'b', 'c']
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+ <li>{{jsxref("Array.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/tostring/index.html b/files/ru/web/javascript/reference/global_objects/array/tostring/index.html
new file mode 100644
index 0000000000..f2877df269
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/tostring/index.html
@@ -0,0 +1,122 @@
+---
+title: Array.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Array/toString
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/toString
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>toString()</strong></code> возвращает строковое представление указанного массива и его элементов.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.toString()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объект {{jsxref("Global_Objects/Array", "Array")}} переопределяет метод <code>toString</code> объекта {{jsxref("Global_Objects/Object", "Object")}}. Для объектов класса <code>Array</code>, метод <code>toString</code> соединяет массив и возвращает одну строку, содержащую каждый элемент массива, разделённый запятыми. Например, следующий код создаёт массив и использует метод <code>toString</code> для преобразования массива в строку.</p>
+
+<pre class="brush: js">var monthNames = ['Янв', 'Фев', 'Мар', 'Апр'];
+var myVar = monthNames.toString(); // присваивает 'Янв,Фев,Мар,Апр' переменной myVar.
+</pre>
+
+<p>JavaScript вызывает метод <code>toString</code> автоматически, когда массив представляется текстовым значением или когда массив находится в контексте конкатенации строк.</p>
+
+<h3 id="ECMAScript_5_semantics" name="ECMAScript_5_semantics">Семантика ECMAScript 5</h3>
+
+<p>Начиная с JavaScript 1.8.5 (<span class="st">Firefox 4</span>), и в соответствии с сементикой ECMAScript 5-го издания, метод <code>toString()</code> является обобщённым и может использоваться с любым объектом. В случае с массивами, если он имеет метод <code>join()</code>, он будет вызван и результат его работы будет возвращён. В противном случае будет вызван метод {{jsxref("Object.prototype.toString()")}}, и будет возвращён результат его работы.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.2', 'Array.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.tostring', 'Array.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/unshift/index.html b/files/ru/web/javascript/reference/global_objects/array/unshift/index.html
new file mode 100644
index 0000000000..1d3e095ead
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/unshift/index.html
@@ -0,0 +1,89 @@
+---
+title: Array.prototype.unshift()
+slug: Web/JavaScript/Reference/Global_Objects/Array/unshift
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/unshift
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>unshift()</strong></code> добавляет один или более элементов в начало массива и возвращает новую длину массива.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.unshift(<var>element1</var>[, ...[, <var>elementN</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>element1, ..., element<em>N</em></code></dt>
+ <dd>Элементы, добавляемые в начало массива.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Новое свойство {{jsxref("Array.length", "length")}} объекта, над которым был вызван метод <code>unshift</code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>unshift</code> вставляет переданные значения в начало массивоподобного объекта.</p>
+
+<p>Метод <code>unshift</code> не является привязанным к типу; этот метод может быть {{jsxref("Function.call", "вызван", "", 1)}} или {{jsxref("Function.apply", "применён", "", 1)}} к объектам, напоминающим массив. Объекты, не содержащие свойство <code>length</code>, отражающее последний элемент в серии последовательных числовых, начинающихся с нуля, свойств, могут повести себя неправильным образом.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var arr = [1, 2];
+
+arr.unshift(0); // результат вызова равен 3, новой длине массива
+// arr равен [0, 1, 2]
+
+arr.unshift(-2, -1); // = 5
+// arr равен [-2, -1, 0, 1, 2]
+
+arr.unshift([-3]);
+// arr равен[[-3], -2, -1, 0, 1, 2]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.13', 'Array.prototype.unshift')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.unshift', 'Array.prototype.unshift')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Array.unshift")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.push()")}}</li>
+ <li>{{jsxref("Array.prototype.pop()")}}</li>
+ <li>{{jsxref("Array.prototype.shift()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/array/values/index.html b/files/ru/web/javascript/reference/global_objects/array/values/index.html
new file mode 100644
index 0000000000..bdd8c8c2f6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/array/values/index.html
@@ -0,0 +1,136 @@
+---
+title: Array.prototype.values()
+slug: Web/JavaScript/Reference/Global_Objects/Array/values
+tags:
+ - Array
+ - ECMAScript6
+ - Experimental
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/values
+---
+<div>{{JSRef("Global_Objects", "Array")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>values()</code></strong> возвращает новый объект итератора массива <strong><code>Array Iterator</code></strong>, содержащий значения для каждого индекса в массиве.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.values()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Iteration_using_for...of_loop" name="Example:_Iteration_using_for...of_loop">Пример: итерация через цикл <code>for...of</code></h3>
+
+<pre class="brush: js">var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr.values();
+// ваш браузер должен поддерживать цикл for...of и переменные,
+// объявленные через let в циклах for
+for (let letter of eArr) {
+ console.log(letter);
+}
+</pre>
+
+<h3 id="Example:_Alternative_iteration" name="Example:_Alternative_iteration">Пример: альтернативный способ итерации</h3>
+
+<pre class="brush: js">var arr = ['w', 'y', 'k', 'o', 'p'];
+var eArr = arr.values();
+console.log(eArr.next().value); // w
+console.log(eArr.next().value); // y
+console.log(eArr.next().value); // k
+console.log(eArr.next().value); // o
+console.log(eArr.next().value); // p
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.values', 'Array.prototype.values')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.values', 'Array.prototype.values')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>9</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Firefox-specific_notes" name="Firefox-specific_notes">Примечание по Firefox</h3>
+
+<ul>
+ <li>Из-за <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=875433">проблемы с совместимостью</a> метод <code>Array.prototype.values()</code> в данный момент убран из SpiderMonkey.</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.keys()")}}</li>
+ <li>{{jsxref("Array.prototype.entries()")}}</li>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+ <li>{{jsxref("Array.prototype.some()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html b/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html
new file mode 100644
index 0000000000..3dfc1687ab
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/arraybuffer/index.html
@@ -0,0 +1,145 @@
+---
+title: ArrayBuffer
+slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer
+tags:
+ - Буфер
+ - Типизированные массивы
+translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>ArrayBuffer</code></strong> используется для работы с бинарными данными. Он представляет собой ссылку на поток "сырых" двоичных данных, однако работать с ними напрямую возможности не дает. Вместо этого, вы можете создать <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray">типизированный массив</a> или объект {{jsxref("DataView")}}, который можно использовать для чтения и записи данных в <strong><code>ArrayBuffer</code></strong>. </p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new ArrayBuffer(length)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>length</code></dt>
+ <dd>Длина создаваемого буфера в байтах.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый объект <code>ArrayBuffer</code> определенного размера. Изначально содержимое равно 0.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Конструктор <code>ArrayBuffer</code> создает новый <code>ArrayBuffer</code> установленного в байтах размера.</p>
+
+<h3 id="Создание_буфера">Создание буфера</h3>
+
+<ul>
+ <li><a href="/ru/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Appendix.3A_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer">Из Base64 строки</a></li>
+ <li><a href="/ru/docs/Web/API/FileReader#readAsArrayBuffer()">Из локального файла</a></li>
+</ul>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>ArrayBuffer.length</code></dt>
+ <dd><font face="Open Sans, Arial, sans-serif">Длина конструктора</font><code><font face="Open Sans, Arial, sans-serif"> </font>ArrayBuffer</code>, которая равна 1.</dd>
+ <dt>{{jsxref("ArrayBuffer.prototype")}}</dt>
+ <dd>Позволяет расширить прототип всех <code>ArrayBuffer</code> объектов.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("ArrayBuffer.isView", "ArrayBuffer.isView(arg)")}}</dt>
+ <dd>Возвращает <code>true</code> если <code>arg</code> – одно из представлений <code>ArrayBuffer</code>, например <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray">типизированный массив</a> или {{jsxref("DataView")}}. Вернет <code>false</code> в остальных случаях.</dd>
+ <dt>{{jsxref("ArrayBuffer.transfer", "ArrayBuffer.transfer(oldBuffer [, newByteLength])")}} {{experimental_inline}}</dt>
+ <dd>
+ <div class="line" id="file-arraybuffer-transfer-LC6">Вернет новый <code>ArrayBuffer</code>, контент которого будет взят из данных <code>oldBuffer</code>, а затем усечен или дополнен нулевыми значениями до<font face="Open Sans, Arial, sans-serif"> </font><code>newByteLength</code>.</div>
+ </dd>
+</dl>
+
+<h2 id="Пример">Пример</h2>
+
+<p>В этом примере мы создаем 8-байтный буфер с {{jsxref("Global_Objects/Int32Array", "Int32Array")}} представлением:</p>
+
+<pre class="brush: js">var buffer = new ArrayBuffer(8);
+var view = new Int32Array(buffer);</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Заменен спецификацией ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arraybuffer-constructor', 'ArrayBuffer')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первичное определение в ECMA стандарте.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Таблица_совместимости">Таблица совместимости</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>7.0</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>5.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>4.0</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("2")}}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>4.2</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Также">Также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Typed_arrays">JavaScript типизированные массивы</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/arraybuffer/isview/index.html b/files/ru/web/javascript/reference/global_objects/arraybuffer/isview/index.html
new file mode 100644
index 0000000000..22971e53cd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/arraybuffer/isview/index.html
@@ -0,0 +1,88 @@
+---
+title: ArrayBuffer.isView()
+slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView
+tags:
+ - ArrayBuffer
+ - JavaScript
+ - TypedArrays
+translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/isView
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>ArrayBuffer.isView(</strong><var>arg</var><strong>)</strong></code> возвращает <code>true</code>, если <code>arg</code> является одним из таких видов <code>ArrayBuffer</code>, как <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray">типизированные массивы</a> или {{jsxref("DataView")}}; в ином случае возвращает <code>false</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/arraybuffer-isview.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>ArrayBuffer.isView(<var>arg</var>)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>arg</code></dt>
+ <dd>Проверяемое значение.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code>true</code>, если переданный аргумент является одним из видов <code>ArrayBuffer</code>; в противном случае <code>false</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">ArrayBuffer.isView(); // false
+ArrayBuffer.isView([]); // false
+ArrayBuffer.isView({}); // false
+ArrayBuffer.isView(null); // false
+ArrayBuffer.isView(undefined); // false
+ArrayBuffer.isView(new ArrayBuffer(10)); // false
+
+ArrayBuffer.isView(new Uint8Array()); // true
+ArrayBuffer.isView(new Float32Array()); // true
+ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)); // true
+
+var buffer = new ArrayBuffer(2);
+var dv = new DataView(buffer);
+ArrayBuffer.isView(dv); // true
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Примечание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>Устарело</td>
+ <td>Заменено в ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определене в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arraybuffer.isview', 'ArrayBuffer.isView')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+
+
+<p>{{Compat("javascript.builtins.ArrayBuffer.isView")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">Типизированные массивы JavaScript</a></li>
+</ul>
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
new file mode 100644
index 0000000000..84b8592a5e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/arraybuffer/slice/index.html
@@ -0,0 +1,125 @@
+---
+title: ArrayBuffer.prototype.slice()
+slug: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice
+translation_of: Web/JavaScript/Reference/Global_Objects/ArrayBuffer/slice
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>slice()</strong></code> вернет новый <code>ArrayBuffer</code>, содержимое которого, будет копией содержимого, содержащегося в исходом ArrayBuffer, начиная с begin (включительно), и до end(не включая).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">arraybuffer.slice(begin[, end])</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>begin</code></dt>
+ <dd>Указывает с какого индекса начинать slice, начинается с нуля.</dd>
+</dl>
+
+<dl>
+ <dt><code>end</code></dt>
+ <dd>Указывает до какого индекса делать slice. Если не указан - slice будет выполнен до конца <code>ArrayBuffer. Разница между begin и end должна быть положительной и быть не более длины ArrayBuffer, в противном случае будет выставлен 0.</code></dd>
+</dl>
+
+<h3 id="Return_value">Return value</h3>
+
+<p>Новый  объект <code>ArrayBuffer</code>.</p>
+
+<h2 id="Description">Description</h2>
+
+<p>Метод <code>slice</code> копирует, до индекса в параметре end (не включительно) .  В случае если <code>begin</code> или <code>end</code> негативен, то индекс считается с конца массива.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Копируем_ArrayBuffer">Копируем <code>ArrayBuffer</code></h3>
+
+<pre class="brush: js">var buf1 = new ArrayBuffer(8);
+var buf2 = buf1.slice(0);
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by EMCAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-arraybuffer.prototype.slice', 'ArrayBuffer.prototype.slice')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("12") }}</td>
+ <td>11</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>6</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("12") }}</td>
+ <td>11</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>6.0</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html b/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html
new file mode 100644
index 0000000000..b1475ad6e3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/asyncfunction/index.html
@@ -0,0 +1,166 @@
+---
+title: AsyncFunction
+slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction
+translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong><font face="Open Sans, arial, sans-serif">Конструктор </font>Async</strong></code><strong><code>Function</code> </strong>создает новый объект {{jsxref("Statements/async_function", "async function")}}. В JavaScript любая асинхронная функция фактически является объектом AsyncFunction.</p>
+
+<p>Обратите внимание, что AsyncFunction не является глобальным объектом. Её можно получить, выполнив следующий код.</p>
+
+<pre class="brush: js">Object.getPrototypeOf(async function(){}).constructor
+</pre>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new AsyncFunction([<var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]],] <var>functionBody</var>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Имена, используемые функцией как формальные имена аргументов. Каждое имя должно быть строкой, которая соответствует действительному идентификатору JavaScript или списку таких строк, разделенных запятой; например, "<code>x</code>", "<code>theValue</code>", или "<code>a,b</code>". </dd>
+ <dt><code>functionBody</code></dt>
+ <dd>Строка, содержащая в себе определение функции в исходном коде JavaScript .</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объекты {{jsxref("Statements/async_function", "async function")}}, созданные с помощью AsyncFunction constructor  будут распарсены в момент, когда функция создается. Это менее эффективно, чем объявлять асинхронную функцию с помощью {{jsxref("Statements/async_function", "async function expression")}} и вызывать ее внутри вашего кода, поскольку такие функции анализируются с остальной частью кода.</p>
+
+<p>Все аргументы, переданные функции, рассматриваются как имена идентификаторов параметров в создаваемой функции в том порядке, в котором они передаются.</p>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> объекты {{jsxref("Statements/async_function", "async functions")}} созданные с помощью AsyncFunction constructor , не создают замыкания на создающие их контексты; Они всегда создаются в глобальной области видимости. При их запуске они смогут получить доступ только к своим локальным переменным и к глобальным переменным, но не имеют доступа к тем областям видимости, в которых был вызван AsyncFunction constructor. Это отличается от использования {{jsxref("Global_Objects/eval", "eval")}} с кодом для async function. </p>
+</div>
+
+<p>Вызов AsyncFunction constructor как функции (без использования оператора new ) имеет тот же эффект, что и вызов его как конструктора.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code><strong>AsyncFunction.length</strong></code></dt>
+ <dd>Свойство length AsyncFunction constructor, значение которого равно 1.</dd>
+ <dt>{{jsxref("AsyncFunction.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам async function.</dd>
+</dl>
+
+<h2 id="AsyncFunction_prototype_object"><code>AsyncFunction</code> prototype object</h2>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<div>{{page('/ru-RU/docs/Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype', 'Properties')}}</div>
+
+<h2 id="Экземпляры_AsyncFunction"><code>Экземпляры AsyncFunction</code></h2>
+
+<p>Экземпляры <code>AsyncFunction</code> наследуют методы и свойства от {{jsxref("AsyncFunction.prototype")}}. Как и для всех конструкторов, вы можете изменить объект-прототип конструктора, чтобы внести изменения во все экземпляры <code>AsyncFunction</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Создание_async_function_с_помощью_AsyncFunction_constructor">Создание async function с помощью <code>AsyncFunction</code> constructor</h3>
+
+<pre class="brush: js">function resolveAfter2Seconds(x) {
+ return new Promise(resolve =&gt; {
+ setTimeout(() =&gt; {
+ resolve(x);
+ }, 2000);
+ });
+}
+
+var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor
+
+var a = new AsyncFunction('a',
+ 'b',
+ 'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);');
+
+a(10, 20).then(v =&gt; {
+ console.log(v); // напечатает 30 через 4 секунды
+});
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-objects', 'AsyncFunction object')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Изначальное определение в ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th> Edge</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(55)}}</td>
+ <td>{{CompatGeckoDesktop("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(55)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/async_function", "async function function")}}</li>
+ <li>{{jsxref("Operators/async_function", "async function expression")}}</li>
+ <li>{{jsxref("Global_Objects/Function", "Function")}}</li>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Functions_and_function_scope", "Functions and function scope", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/asyncfunction/prototype/index.html b/files/ru/web/javascript/reference/global_objects/asyncfunction/prototype/index.html
new file mode 100644
index 0000000000..9d0c21f241
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/asyncfunction/prototype/index.html
@@ -0,0 +1,55 @@
+---
+title: AsyncFunction.prototype
+slug: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/AsyncFunction/prototype
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <code><strong>AsyncFunction.prototype</strong></code> представляет прототип объекта  {{jsxref("AsyncFunction")}} .</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объект {{jsxref("AsyncFunction")}} наследуется от <code>AsyncFunction.prototype</code>. <code>AsyncFunction.prototype</code> не может быть модифицирован.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code><strong>AsyncFunction.constructor</strong></code></dt>
+ <dd>Начальное значение {{jsxref("AsyncFunction")}}.</dd>
+ <dt><code><strong>AsyncFunction.prototype[@@toStringTag]</strong></code></dt>
+ <dd>Возвращает "AsyncFunction".</dd>
+</dl>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-constructor-prototype', 'AsyncFunction.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.AsyncFunction.prototype")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("AsyncFunction")}}</li>
+ <li>{{jsxref("Function")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..a426517362
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/atomics/add/index.html
@@ -0,0 +1,126 @@
+---
+title: Atomics.add()
+slug: Web/JavaScript/Reference/Global_Objects/Atomics/add
+translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Atomics</strong></code><strong><code>.add()</code></strong> добавляет значение к текущему по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная опреация гарантирует, что никакой другой записи не произойдет, пока измененное значение не будет записано обратно.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Atomics.add(typedArray, index, value)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>typedArray</code></dt>
+ <dd>Разделенный массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.</dd>
+ <dt><code>index</code></dt>
+ <dd>Позиция в <code>typedArray</code> для добавления <code>value</code>.</dd>
+ <dt><code>value</code></dt>
+ <dd>Число для добавления.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Предыдущее значение в указанной позиции (<code>typedArray[index]</code>).</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<ul>
+ <li>Выбрасывает {{jsxref("TypeError")}}, если тип <code>typedArray</code> не является одним из допустимых тцелочисленных типов.</li>
+ <li>Выбрасывает {{jsxref("TypeError")}}, если тип <code>typedArray</code> не общего типа.</li>
+ <li>Выбрасывает {{jsxref("RangeError")}}, если <code>index</code> вне <code>typedArray</code>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+
+Atomics.add(ta, 0, 12); // возвращает 0, предыдущее значение
+Atomics.load(ta, 0); // 12</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-atomics.add', 'Atomics.add')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}} [2]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] In Firefox version 46 until version 54, this feature is disabled by a preference setting. In about:config, set <code>javascript.options.shared_memory</code> to <code>true</code>. </p>
+
+<p>[2] The implementation is under development and needs these runtime flags: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Atomics")}}</li>
+ <li>{{jsxref("Atomics.sub()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/atomics/index.html b/files/ru/web/javascript/reference/global_objects/atomics/index.html
new file mode 100644
index 0000000000..8ac33321f2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/atomics/index.html
@@ -0,0 +1,168 @@
+---
+title: Atomics
+slug: Web/JavaScript/Reference/Global_Objects/Atomics
+translation_of: Web/JavaScript/Reference/Global_Objects/Atomics
+---
+<div>{{JSRef}}</div>
+
+<div>Объект <strong><code>Atomics</code></strong> предоставляет атомарные операции как статические методы. Используется вместе с объектом {{jsxref("SharedArrayBuffer")}}. </div>
+
+<div> </div>
+
+<p>Атомарные операции установлены в модуле <code>Atomics</code>. В отличие от других глобальных объектов, <code>Atomics</code> не является конструктором. Его нельзя использовать вместе с оператором <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a> или вызывать объект <code>Atomics</code> как функцию. Все свойства и методы <code>Atomics</code> статические (как у объекта {{jsxref("Math")}}, к примеру).</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Atomics[Symbol.toStringTag]</code></dt>
+ <dd>Значение этого свойства - "Atomics".</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<h3 id="Атомарные_операции">Атомарные операции</h3>
+
+<p>Когда память разделена, несколько потоков могут читать и записывать одни и те же данные в память. Атомарные операции гарантируют, что ожидаемые значения будут записаны и прочитаны, а операции завершены, прежде чем следующая операция начнет свою работу, и они не будут прерваны.</p>
+
+<dl>
+ <dt>{{jsxref("Atomics.add()")}}</dt>
+ <dd>Добавляет представленное значение к текущему по указанной позиции в массиве. Возвращает предыдущее значение в этой позиции.</dd>
+ <dt>{{jsxref("Atomics.and()")}}</dt>
+ <dd>Вычисляет побитовое AND в указанной позиции массива. Возвращает предыдущее значение в этой позиции.</dd>
+ <dt>{{jsxref("Atomics.compareExchange()")}}</dt>
+ <dd>Сохраняет представленное значение в указанную позицию массива, если оно эквивалентно представленному значению. Возвращает предыдущее значение.</dd>
+ <dt>{{jsxref("Atomics.exchange()")}}</dt>
+ <dd>Сохраняет представленное значение в указанную позицию массива. Возвращает предыдущее значение.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Atomics.load()")}}</dt>
+ <dd>Возвращает значение из указаной позиции массива.</dd>
+ <dt>{{jsxref("Atomics.or()")}}</dt>
+ <dd>Вычисляет побитовое OR в указанной позиции массивая. Возвращает предыдущее значение в этой позиции.</dd>
+ <dt>{{jsxref("Atomics.store()")}}</dt>
+ <dd>Сохраняет представленное значение в указанную позицию массива. Возвращает значение.</dd>
+ <dt>{{jsxref("Atomics.sub()")}}</dt>
+ <dd>Вычитает представленное значение из текущего по указанной позиции в массиве. Возвращает предыдущее значение в этой позиции.</dd>
+ <dt>{{jsxref("Atomics.xor()")}}</dt>
+ <dd>Вычисляет побитовое XOR в указанной позиции массива. Возвращает предыдущее значение в этой позиции.</dd>
+</dl>
+
+<h3 id="Wait_и_notify">Wait и notify</h3>
+
+<p><code>wait()</code> и <code>wake()</code> методы моделируются на основе futexes ("fast user-space mutex" - быстрый мьютекс пользовательского пространства) Linux и предоставляют собой способы ожидания момента, когда определенное состояние не станет true, и обычно используется как блокирующие конструкции.</p>
+
+<dl>
+ <dt>{{jsxref("Atomics.wait()")}}</dt>
+ <dd>
+ <p>Проверяет, содержится в указанной позиции массива все еще представленное значение и спит в ожидании или тайм-аут. Возвращает <code>"ok"</code>, <code>"not-equal" </code>или <code>"timed-out"</code>. Если ожидание не разрешено в вызывающем агенете, тогда выбросит ошибку исключения (большинство браузеров не разрешают <code>wait()</code> в главном потоке барузера).</p>
+ </dd>
+ <dt>{{jsxref("Atomics.wake()")}}</dt>
+ <dd>Пробуждает некоторых агентов, которые спят в очереди ожидания в указанной позиции массива. Возвращает количество агентов, которые были разбужены.</dd>
+ <dt>{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}</dt>
+ <dd>
+ <p>Оптимизационный примитив, который может быть использован для определения использовать ли блокирующие операции или атомарные. Возвращает <code>true</code>, если атомарные операции над массивaми с указанным размерами элеменатов будут выполнены с использованием аппаратных атомарных опреаций (как противоположность блокирующим). Только для специалистов.</p>
+ </dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}}</td>
+ <td>{{Spec2('ES8')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}} [2]</td>
+ <td>{{CompatGeckoDesktop("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] In Firefox version 46 until version 54, this feature is disabled by a preference setting. In about:config, set <code>javascript.options.shared_memory</code> to <code>true</code>. </p>
+
+<p>[2] The implementation is under development and needs these runtime flags: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p>
+
+<h2 id="Похожие_заметки">Похожие заметки</h2>
+
+<p>До SpiderMonkey 48 {{geckoRelease(48)}}, финальные имена API и сематика не были еще реализованы. Изменения между Firefox v. 46 и v. 48:</p>
+
+<ul>
+ <li>Методы <code>Atomics.futexWakeOrRequeue()</code> и <code>Atomics.fence()</code> полностью удалены ({{bug(1259544)}} и {{bug(1225028)}}).</li>
+ <li>Методы {{jsxref("Atomics.wait()")}} и {{jsxref("Atomics.wake()")}} были назвны <code>Atomics.futexWait()</code> и <code>Atomics.futexWake()</code> ({{bug(1260910)}}). Заметка: старые имена были удалены в версии 49 и младше ({{bug(1262062)}}).</li>
+ <li>Свойства <code>Atomics.OK</code>, <code>Atomics.TIMEDOUT</code>, <code>Atomics.NOTEQUAL</code> были удалены. {{jsxref("Atomics.wait()")}} метод теперь возвращает строки "ok", "timed-out" и "not-equal" ({{bug(1260835)}}).</li>
+ <li>
+ <p>Параметр <code>count</code> метода {{jsxref("Atomics.wake()")}} изменился: теперь он по умолчанию равен <code>+Infinity</code>, а не <code>0</code> ({{bug(1253350)}}).</p>
+ </li>
+</ul>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li>
+ <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– a simple library providing synchronization and work distribution abstractions.</li>
+ <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – a brief tutorial</a></li>
+ <li><a href="https://hacks.mozilla.org/2016/05/a-taste-of-javascripts-new-parallel-primitives/">A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks</a></li>
+</ul>
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
new file mode 100644
index 0000000000..6535d885e5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/atomics/sub/index.html
@@ -0,0 +1,128 @@
+---
+title: Atomics.sub()
+slug: Web/JavaScript/Reference/Global_Objects/Atomics/sub
+translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Atomics</strong></code><strong><code>.sub()</code></strong> вычитает представленное значение из текущего по указанной позиции в массиве и возвращает предыдущее значение в этой позиции. Эта атомарная опреация гарантирует, что никакой другой записи не произойдет, пока измененное значение не будет записано обратно.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Atomics.sub(typedArray, index, value)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>typedArray</code></dt>
+ <dd>Разделенный массив целых чисел. {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}} или {{jsxref("Uint32Array")}}.</dd>
+ <dt><code>index</code></dt>
+ <dd>Позиция в <code>typedArray</code> для добавления <code>value</code>.</dd>
+ <dt><code>value</code></dt>
+ <dd>Число для вычитания.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Предыдущее значение в указанной позиции (<code>typedArray[index]</code>).</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<ul>
+ <li>Выбрасывает {{jsxref("TypeError")}},  если тип <code>typedArray</code> не является одним из допустимых тцелочисленных типов.</li>
+ <li>Выбрасывает {{jsxref("TypeError")}}, если тип <code>typedArray</code> не общего типа.</li>
+ <li>Выбрасывает {{jsxref("RangeError")}}, если <code>index</code> вне <code>typedArray</code>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var sab = new SharedArrayBuffer(1024);
+var ta = new Uint8Array(sab);
+ta[0] = 48;
+
+Atomics.sub(ta, 0, 12); // возвращает 48, предыдущее значение
+Atomics.load(ta, 0); // 36
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-atomics.sub', 'Atomics.sub')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}} [2]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] In Firefox version 46 until version 54, this feature is disabled by a preference setting. In about:config, set <code>javascript.options.shared_memory</code> to <code>true</code>. </p>
+
+<p>[2] The implementation is under development and needs these runtime flags: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Atomics")}}</li>
+ <li>{{jsxref("Atomics.add()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html b/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html
new file mode 100644
index 0000000000..67f371ecf6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/bigint/asintn/index.html
@@ -0,0 +1,79 @@
+---
+title: BigInt.asIntN()
+slug: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN
+tags:
+ - BigInt
+ - JavaScript
+ - Method
+ - Reference
+ - asIntN
+translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asIntN
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>BigInt.asIntN</code></strong> — это статический метод, который позволяет перенести BigInt-значение в целое число со знаком между  -2<sup>ширина-1</sup> and 2<sup>ширина-1</sup>-1.</p>
+
+<div>\{{EmbedInteractiveExample("pages/js/bigint-asintn.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">BigInt.asIntN(<var>width</var>, <var>bigint</var>);</pre>
+
+<h3 id="Аргументы">Аргументы</h3>
+
+<dl>
+ <dt><code>width</code></dt>
+ <dd>Количество битов, доступных для целочисленного размера.</dd>
+ <dt><code>bigint</code></dt>
+ <dd>Целое число для зажима, чтобы соответствовать поставляемым битам.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Значение <code>bigint</code><span style="font-size: 13.3333px;"> </span>по модулю 2<code><sup>width</sup></code> как целое число со знаком.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Пребывание_в_64-битных_диапазонах">Пребывание в 64-битных диапазонах</h3>
+
+<p>Метод  <code>BigInt.asIntN()</code> может быть полезен, чтобы оставаться в диапазоне 64-битной арифметики.</p>
+
+<pre class="brush: js">const max = 2n ** (64n - 1n) - 1n;
+
+BigInt.asIntN(64, max);
+// ↪ 9223372036854775807n
+
+BigInt.asIntN(64, max + 1n);
+// ↪ -9223372036854775807n
+// отрицательное число из-за переполнения
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификации</th>
+ <th scope="col">Статус</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.github.io/proposal-bigint/#sec-bigint.asintn">BigInt proposal</a></td>
+ <td>Stage 3</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+
+
+<p>{{Compat("javascript.builtins.BigInt.asIntN")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("BigInt")}}</li>
+ <li>{{JSxRef("BigInt.asUintN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html b/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html
new file mode 100644
index 0000000000..6f3c09ba56
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/bigint/asuintn/index.html
@@ -0,0 +1,72 @@
+---
+title: BigInt.asUintN()
+slug: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN
+translation_of: Web/JavaScript/Reference/Global_Objects/BigInt/asUintN
+---
+<div>{{JSRef}}</div>
+
+<p>The <strong><code>BigInt.asUintN</code></strong> static method is used to wrap a BigInt value to an unsigned integer between 0 and 2<sup>width</sup>-1.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/bigint-asuintn.html", "taller")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox notranslate">BigInt.asUintN(<var>width</var>, <var>bigint</var>);</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code><var>width</var></code></dt>
+ <dd>The amount of bits available for the integer size.</dd>
+ <dt><code><var>bigint</var></code></dt>
+ <dd>The integer to clamp to fit into the supplied bits.</dd>
+</dl>
+
+<h3 id="Returns">Returns</h3>
+
+<p>The value of <code><var>bigint</var></code> modulo 2<sup><code><var>width</var></code></sup> as an unsigned integer.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Staying_in_64-bit_ranges">Staying in 64-bit ranges</h3>
+
+<p>The <code>BigInt.asUintN()</code> method can be useful to stay in the range of 64-bit arithmetic.</p>
+
+<pre class="brush: js notranslate">const max = 2n ** 64n - 1n;
+
+BigInt.asUintN(64, max);
+// ↪ 18446744073709551615n
+
+BigInt.asUintN(64, max + 1n);
+// ↪ 0n
+// zero because of overflow</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-bigint.asuintn', 'BigInt.asUintN()')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.BigInt.asUintN")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{JSxRef("BigInt")}}</li>
+ <li>{{JSxRef("BigInt.asIntN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/bigint/index.html b/files/ru/web/javascript/reference/global_objects/bigint/index.html
new file mode 100644
index 0000000000..9760700391
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/bigint/index.html
@@ -0,0 +1,294 @@
+---
+title: BigInt
+slug: Web/JavaScript/Reference/Global_Objects/BigInt
+tags:
+ - BigInt
+ - JavaScript
+ - методы BigInt
+ - свойства BigInt
+translation_of: Web/JavaScript/Reference/Global_Objects/BigInt
+---
+<p>{{JSRef}}</p>
+
+<p><strong><code>BigInt</code></strong> это встроенный объект, который предоставляет способ представлять целые числа больше 2<sup>53</sup> - 1, наибольшего числа, которое JavaScript может надежно представить с {{JSxRef("Number")}} примитивом. Это максимальное значение можно получить, обратившись к {{JSxRef("Number.MAX_SAFE_INTEGER")}}.</p>
+
+<dl>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>BigInt</code> создается путем добавления <code>n</code> в конец целочисленного литерала — <code>10n</code> — или вызовом функции <code>BigInt()</code>.</p>
+
+<pre class="brush: js">const theBiggestInt = 9007199254740991n;
+
+const alsoHuge = BigInt(9007199254740991);
+// ↪ 9007199254740991n
+
+const hugeString = BigInt("9007199254740991");
+// ↪ 9007199254740991n
+
+const hugeHex = BigInt("0x1fffffffffffff");
+// ↪ 9007199254740991n
+
+const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
+// ↪ 9007199254740991n
+</pre>
+
+<p>В некотором смысле он похож на {{JSxRef ("Number")}}, но отличается в некоторых ключевых моментах — его нельзя использовать с методами во встроенном объекте {{JSxRef ("Math")}} и нельзя смешивать в операциях с любыми экземплярами Number.</p>
+
+<div class="blockIndicator warning">
+<p>{{JSxRef("Number")}} и <code>BigInt</code> нельзя смешивать в операциях — они должны быть приведены к тому же типу.</p>
+
+<p>Будте осторожны приводя значения туда и обратно,  так как точность BigInt может быть потеряна при приведении к числу (<code>Number)</code>.</p>
+</div>
+
+<h3 id="Тип">Тип</h3>
+
+<p>При проверке с использованием оператора <code>typeof</code>, <code>BigInt</code> выдает тип <code>"bigint"</code>:</p>
+
+<pre class="brush: js">typeof 1n === 'bigint'; // true
+typeof BigInt('1') === 'bigint'; // true
+</pre>
+
+<p>При оборачивании в объект, BigInt будет представлен как обычный объект:</p>
+
+<pre class="brush: js">typeof Object(1n) === 'object'; // true
+</pre>
+
+<h3 id="Операторы">Операторы</h3>
+
+<p>Следующие операторы могут использоваться с <code>BigInt</code> (или объектом-оберткой <code>BigInt</code>): <code>+</code>, <code>*</code>, <code>-</code>, <code>**</code>, <code>%</code>.</p>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Побитовые операции</a> также поддерживаются, кроме <code>&gt;&gt;&gt;</code> (сдвиг вправо с заполнением нулями).</p>
+
+<p>Не поддерживаемый унарный оператор (<code>+</code>) <a href="https://github.com/tc39/proposal-bigint/blob/master/ADVANCED.md#dont-break-asmjs">больше не ломает asm.js</a>.</p>
+
+<pre class="brush: js">const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
+// ↪ 9007199254740991n
+
+const maxPlusOne = previousMaxSafe + 1n;
+// ↪ 9007199254740992n
+
+const theFuture = previousMaxSafe + 2n;
+// ↪ 9007199254740993n, это работает!
+
+const multi = previousMaxSafe * 2n;
+// ↪ 18014398509481982n
+
+const subtr = multi – 10n;
+// ↪ 18014398509481972n
+
+const mod = multi % 10n;
+// ↪ 2n
+
+const bigN = 2n ** 54n;
+// ↪ 18014398509481984n
+
+bigN * -1n
+// ↪ –18014398509481984n
+</pre>
+
+<p>Оператор <code>/</code> также работает, как и ожидалось, с целыми числами. Однако, поскольку это BigInt, эта операция будет округляться в меньшую сторону, то есть она не будет возвращать какие-либо дробные цифры.</p>
+
+<div class="blockIndicator warning">
+<p>Результат операции с дробным результатом будет округлен в <strong><u>меньшую</u></strong> сторону при использовании  <code>BigInt</code>.</p>
+</div>
+
+<pre class="brush: js">const expected = 4n / 2n;
+// ↪ 2n
+
+const rounded = 5n / 2n;
+// ↪ 2n, not 2.5n
+
+</pre>
+
+<h3 id="Сравнения">Сравнения</h3>
+
+<p><code>BigInt</code> равен {{JSxRef ("Number")}} только при нестрогом сравнении.</p>
+
+<pre class="brush: js">0n === 0
+// ↪ false
+
+0n == 0
+// ↪ true</pre>
+
+<p>{{JSxRef("Global_Objects/Number", "Обычные числа")}} и <code>BigInt</code> можно сравнивать как обычно.</p>
+
+<pre class="brush: js">1n &lt; 2
+// ↪ true
+
+2n &gt; 1
+// ↪ true
+
+2 &gt; 2
+// ↪ false
+
+2n &gt; 2
+// ↪ false
+
+2n &gt;= 2
+// ↪ true</pre>
+
+<p>Они могут быть смешаны в массивах и отсортированы:</p>
+
+<pre class="brush: js">const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
+// ↪ [4n, 6, -12n, 10, 4, 0, 0n]
+
+mixed.sort();
+// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]
+</pre>
+
+<p>Обратите внимание, что сравнения с <code>обьектом</code>-оберткой <code>BigInt</code> действуют как с другими объектами, указывая на равенство только когда сравинивается идентичный экземпляр объекта:</p>
+
+<pre class="brush: js">0n === Object(0n); // false
+Object(0n) === Object(0n); // false
+
+const o = Object(0n);
+o === o // true
+</pre>
+
+<h3 id="Условные_выражения">Условные выражения</h3>
+
+<p><code>BigInt</code> ведёт себя как {{JSxRef("Global_Objects/Number", "обычное число")}} в следующих случаях:</p>
+
+<ul>
+ <li>Преобразуется в {{JSxRef("Global_Objects/Boolean", "Boolean")}} через функцию {{JSxRef("Global_Objects/Boolean", "Boolean")}}</li>
+ <li>Используется с логическими операторами {{JSxRef("Operators/Logical_Operators", "Logical Operators")}} <code>||</code>, <code>&amp;&amp;</code> и <code>!</code></li>
+ <li>В условном тесте, таком как {{JSxRef("Statements/if...else", "if statement")}}.</li>
+</ul>
+
+<pre class="brush: js">if (0n) {
+ console.log('Привет из if!');
+} else {
+ console.log('Привет из else!');
+}
+
+// ↪ "Привет из else!"
+
+0n || 12n
+// ↪ 12n
+
+0n &amp;&amp; 12n
+// ↪ 0n
+
+Boolean(0n)
+// ↪ false
+
+Boolean(12n)
+// ↪ true
+
+!12n
+// ↪ false
+
+!0n
+// ↪ true
+</pre>
+
+<h2 id="Конструктор">Конструктор</h2>
+
+<dl>
+ <dt><code><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt">BigInt()</a></code></dt>
+ <dd>Создаёт объект {{jsxref("BigInt")}}.</dd>
+</dl>
+
+<h2 id="Статические_методы">Статические методы</h2>
+
+<dl>
+ <dt>{{JSxRef("BigInt.asIntN()")}}</dt>
+ <dd>Оборачивает BigInt в пределах от -2<sup>width-1</sup> до 2<sup>width-1</sup>-1</dd>
+ <dt>{{JSxRef("BigInt.asUintN()")}}</dt>
+ <dd>Оборачивает a BigInt в пределах от 0 до 2<sup>width</sup>-1</dd>
+</dl>
+
+<h2 id="Методы_экземпляра">Методы экземпляра</h2>
+
+<dl>
+ <dt>{{JSxRef("BigInt.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает строку с языко-зависимым представлением числа. Переопредедяет метод {{JSxRef("Object.prototype.toLocaleString()")}}.</dd>
+ <dt>{{JSxRef("BigInt.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, представляющую указанный объект по указанному основанию системы счисления. Переопределяет метод {{JSxRef("Object.prototype.toString()")}}.</dd>
+ <dt>{{JSxRef("BigInt.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение указанного объекта. Переопределяет метод {{JSxRef("Object.prototype.valueOf()")}}.</dd>
+</dl>
+
+<h2 id="Рекомендации_по_использованию">Рекомендации по использованию</h2>
+
+<h3 id="Приведение">Приведение</h3>
+
+<p>Поскольку приведение между {{JSxRef("Number")}} и <code>BigInt</code> может привести к потере точности, рекомендуется использовать<code> BigInt</code> только тогда, когда разумно ожидаются значения, превышающие 2<sup>53</sup> и не приводить между двумя типами.</p>
+
+<h3 id="Криптография">Криптография</h3>
+
+<p>Операции поддерживаемые <code>BigInt</code> не постоянны во времени. <code>BigInt</code> следовательно <a href="https://www.chosenplaintext.ca/articles/beginners-guide-constant-time-cryptography.html">не пригоден для использования в криптографии</a>.</p>
+
+<h3 id="Использование_вместе_с_JSON">Использование вместе с JSON</h3>
+
+<p>Использование {{jsxref("JSON.stringify()")}} с любым значением типа <code>BigInt</code> приведёт к <code>TypeError</code>, поскольку значения <code>BigInt</code> не преобразуется в JSON по умолчанию, однако вы можете реализовать свой собственный метод <code>toJSON</code>, если вам необходимо:</p>
+
+<pre class="brush: js">BigInt.prototype.toJSON = function() { return this.toString() }
+</pre>
+
+<p>Теперь вместо ошибки, <code>JSON.stringify</code> будет создавать строку:</p>
+
+<pre class="brush: js">JSON.stringify(BigInt(1))
+// '"1"'
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Расчет_простых_чисел">Расчет простых чисел</h3>
+
+<pre class="brush: js">// Возвращает true, если BigInt — простое число
+function isPrime(p) {
+ for (let i = 2n; i * i &lt;= p; i++) {
+ if (p % i === 0n) return false;
+ }
+ return true;
+}
+
+// Берет BigInt в качестве аргумента и возвращает BigInt
+function nthPrime(nth) {
+ let maybePrime = 2n;
+ let prime = 0n;
+
+ while (nth &gt;= 0n) {
+ if (isPrime(maybePrime)) {
+ nth--;
+ prime = maybePrime;
+ }
+ maybePrime++;
+ }
+
+ return prime;
+}
+
+nthPrime(20n)
+// ↪ 73n</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>{{SpecName("ESDraft", "#sec-bigint-objects", "<code>BigInt</code> objects")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузера">Совместимость браузера</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.BigInt")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("Number")}}</li>
+ <li>{{JSxRef("Number.MAX_SAFE_INTEGER")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/boolean/index.html b/files/ru/web/javascript/reference/global_objects/boolean/index.html
new file mode 100644
index 0000000000..00d4637117
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/boolean/index.html
@@ -0,0 +1,200 @@
+---
+title: Boolean
+slug: Web/JavaScript/Reference/Global_Objects/Boolean
+tags:
+ - Boolean
+ - Constructor
+ - JavaScript
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Boolean
+---
+<div>{{JSRef()}}</div>
+
+<p>Объект <strong><code>Boolean</code></strong> является объектом-обёрткой над примитивом логического типа.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new Boolean([<var>value</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Необязательный параметр. Начальное значение объекта <code>Boolean</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Значение, переданное первым параметром, при необходимости преобразуется в логическое значение. Если значение опущено или равно <code>0</code>, <code>-0</code>, {{jsxref("Global_Objects/null", "null")}}, <code>false</code>, {{jsxref("Global_Objects/NaN", "NaN")}}, {{jsxref("Global_Objects/undefined", "undefined")}} или пустой строке (<code>""</code>), объект имеет начальное значение, равное <code>false</code>. Все остальные значения, включая любые объекты или строку <code>"false"</code>, создают объект с начальным значением, равным <code>true</code>.</p>
+
+<p>Не путайте примитивные значения <code>true</code> и <code>false</code> логического типа со значениями <code>true</code> и <code>false</code> объекта <code>Boolean</code>.</p>
+
+<p>Любой объект, чьё значение не является равным {{jsxref("Global_Objects/undefined", "undefined")}} или {{jsxref("Global_Objects/null", "null")}}, включая сам объект <code>Boolean</code> со значением, равным <code>false</code>, вычисляется в <code>true</code> при передаче его в условное выражение. Например, условие в следующей инструкции {{jsxref("Statements/if...else", "if")}} вычисляется в <code>true</code>:</p>
+
+<pre class="brush: js">var x = new Boolean(false);
+if (x) {
+ // этот код будет выполнен
+}
+</pre>
+
+<p>Это поведение не применяется к примитивам логического типа. Например, условие в следующей инструкции {{jsxref("Statements/if...else", "if")}} вычисляется в <code>false </code>:</p>
+
+<pre class="brush: js">var x = false;
+if (x) {
+ // этот код не будет выполнен
+}
+</pre>
+
+<p>Не используйте объект <code>Boolean</code> для преобразования нелогического значения в логическое значение. Вместо этого используйте <code>Boolean</code> в качестве функции:</p>
+
+<pre class="brush: js">var x = Boolean(expression); // предпочтительно
+var x = new Boolean(expression); // не используйте
+</pre>
+
+<p>Если вы определите любой объект, включая объект <code>Boolean</code> со значением <code>false</code>, в качестве начального значения объекта <code>Boolean</code>, новый объект <code>Boolean</code> будет иметь значение <code>true</code>.</p>
+
+<pre class="brush: js">var myFalse = new Boolean(false); // начальное значение равно false
+var g = new Boolean(myFalse); // начальное значение равно true
+var myString = new String('Привет'); // строковый объект
+var s = new Boolean(myString); // начальное значение равно true
+</pre>
+
+<p>Не используйте объект <code>Boolean</code> вместо примитива логического типа.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>Boolean.length</code></dt>
+ <dd>Свойство <code>length</code> логического значения равно 1.</dd>
+ <dt>{{jsxref("Boolean.prototype")}}</dt>
+ <dd>Представляет прототип конструктора объекта <code>Boolean</code>.</dd>
+</dl>
+
+<p>{{jsOverrides("Function", "Properties", "prototype")}}</p>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<p>Глобальный объект <code>Boolean</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов:</p>
+
+<div>{{jsOverrides("Function", "Methods")}}</div>
+
+<h2 id="Boolean_instances" name="Boolean_instances">Экземпляры объекта <code>Boolean</code></h2>
+
+<p>Все экземпляры объекта <code>Boolean</code> наследуются от {{jsxref("Boolean.prototype")}}. Как и все конструкторы, объект прототипа предоставляет экземплярам свойства и методы.</p>
+
+<h3 id="Properties_2" name="Properties_2">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_2" name="Methods_2">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Creating_Boolean_objects_with_an_initial_value_of_false" name="Example:_Creating_Boolean_objects_with_an_initial_value_of_false">Пример: создание объектов <code>Boolean</code> с начальным значением, равным <code>false</code></h3>
+
+<pre class="brush: js">var bNoParam = new Boolean();
+var bZero = new Boolean(0);
+var bNull = new Boolean(null);
+var bEmptyString = new Boolean('');
+var bfalse = new Boolean(false);
+</pre>
+
+<h3 id="Example:_Creating_Boolean_objects_with_an_initial_value_of_true" name="Example:_Creating_Boolean_objects_with_an_initial_value_of_true">Пример: создание объектов <code>Boolean</code> с начальным значением, равным <code>true</code></h3>
+
+<pre class="brush: js">var btrue = new Boolean(true);
+var btrueString = new Boolean('true');
+var bfalseString = new Boolean('false');
+var bSuLin = new Boolean('Су Лин');
+var bArrayProto = new Boolean([]);
+var bObjProto = new Boolean({});
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.6', 'Boolean')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-boolean-objects', 'Boolean')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("6.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Boolean.prototype")}}</li>
+ <li>{{Glossary("Boolean")}}</li>
+ <li><a href="https://ru.wikipedia.org/wiki/Логический_тип">Логический тип данных (Википедия)</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/boolean/prototype/index.html b/files/ru/web/javascript/reference/global_objects/boolean/prototype/index.html
new file mode 100644
index 0000000000..310a9768f3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/boolean/prototype/index.html
@@ -0,0 +1,112 @@
+---
+title: Boolean.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Boolean/prototype
+tags:
+ - Boolean
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Boolean
+---
+<div>{{JSRef("Global_Objects", "Boolean")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Boolean.prototype</code></strong> представляет прототип конструктора объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Экземпляры объекта {{jsxref("Global_Objects/Boolean", "Boolean")}} наследуются от <code>Boolean.prototype</code>. Вы можете использовать протитип конструктора объекта для добавления свойств или методов ко всем экземплярам объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>Boolean.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создающую экземпляр прототипа. По умолчанию, это функция {{jsxref("Global_Objects/Boolean", "Boolean")}}.</dd>
+</dl>
+<div>{{jsOverrides("Object", "properties", "constructor")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("Boolean.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает строку, содержащую исходный код объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}; вы можете использовать эту строку для создания эквивалентного объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Boolean.prototype.toString()")}}</dt>
+ <dd>Возвращает строку <code>"true"</code> или <code>"false"</code>, в зависимости от значения объекта. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("Boolean.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}. Переопределяет метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
+</dl>
+<div>{{jsOverrides("Object", "methods", "toSource", "toString", "valueOf")}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.6.3.1', 'Boolean.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-boolean.prototype', 'Boolean.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/boolean/tosource/index.html b/files/ru/web/javascript/reference/global_objects/boolean/tosource/index.html
new file mode 100644
index 0000000000..164fc98bba
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/boolean/tosource/index.html
@@ -0,0 +1,92 @@
+---
+title: Boolean.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Boolean/toSource
+tags:
+ - Boolean
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toSource
+---
+<div>{{JSRef("Global_Objects", "Boolean")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toSource()</strong></code> возвращает строку, представляющую исходный код объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>booleanObj</var>.toSource()
+Boolean.toSource()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toSource</code> возвращает следующие значения:</p>
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Boolean", "Boolean")}} метод <code>toSource</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+<pre class="brush: js">function Boolean() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров класса {{jsxref("Global_Objects/Boolean", "Boolean")}} метод <code>toSource</code> возвращает строковое представление исходного кода.</li>
+</ul>
+<p>Этот метод обычно вызывается внутри движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/boolean/tostring/index.html b/files/ru/web/javascript/reference/global_objects/boolean/tostring/index.html
new file mode 100644
index 0000000000..abc713e318
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/boolean/tostring/index.html
@@ -0,0 +1,113 @@
+---
+title: Boolean.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Boolean/toString
+tags:
+ - Boolean
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/toString
+---
+<div>{{JSRef("Global_Objects", "Boolean")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toString()</strong></code> возвращает строковое представление указанного объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>bool</var>.toString()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Global_Objects/Boolean", "Boolean")}} переопределяет метод <code>toString</code> объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString()")}}. Для объектов {{jsxref("Global_Objects/Boolean", "Boolean")}} метод <code>toString</code> возвращает строковое представление объекта.</p>
+<p>JavaScript вызывает метод <code>toString</code> автоматически, когда объект {{jsxref("Global_Objects/Boolean", "Boolean")}} должен быть представлен в виде текста или когда объект {{jsxref("Global_Objects/Boolean", "Boolean")}} находится в контексте строковой конкатенации.</p>
+<p>Для объектов и значений {{jsxref("Global_Objects/Boolean", "Boolean")}} встроенный метод <code>toString</code> возвращает строки «<code>true</code>» или «<code>false</code>» в зависимости от значения логического объекта.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example.3A_Using_toString" name="Example.3A_Using_toString">Пример: использование <code>toString</code></h3>
+<p>В следующем коде вызов <code>flag.toString()</code> вернёт строку <code>"true"</code>:</p>
+<pre class="brush: js">var flag = new Boolean(true);
+var myVar = flag.toString();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.6.4.2', 'Boolean.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-boolean.prototype.tostring', 'Boolean.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/boolean/valueof/index.html b/files/ru/web/javascript/reference/global_objects/boolean/valueof/index.html
new file mode 100644
index 0000000000..6b4ed81473
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/boolean/valueof/index.html
@@ -0,0 +1,111 @@
+---
+title: Boolean.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf
+tags:
+ - Boolean
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Boolean/valueOf
+---
+<div>{{JSRef("Global_Objects", "Boolean")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>valueOf()</strong></code> возвращает примитивное значение объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>bool</var>.valueOf()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>valueOf</code> объекта {{jsxref("Global_Objects/Boolean", "Boolean")}} возвращает примитивное значение объекта или литерала логического типа.</p>
+<p>Этот метод обычно вызывается внутри движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование <code>valueOf</code></h3>
+<pre class="brush: js">x = new Boolean();
+myVar = x.valueOf(); // присваивает false переменной myVar
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.6.4.3', 'Boolean.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-boolean.prototype.valueof', 'Boolean.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/dataview/index.html b/files/ru/web/javascript/reference/global_objects/dataview/index.html
new file mode 100644
index 0000000000..adf480e976
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/dataview/index.html
@@ -0,0 +1,122 @@
+---
+title: DataView
+slug: Web/JavaScript/Reference/Global_Objects/DataView
+translation_of: Web/JavaScript/Reference/Global_Objects/DataView
+---
+<div>{{JSRef}}</div>
+
+<p>Вид <strong><code>DataView</code></strong> предоставляет низко-уровневый интерфейс для чтения и записи многочисленных числовых типов в бинарном {{jsxref("ArrayBuffer")}}, независимо от порядка байтов платформы.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/dataview-constructor.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new DataView(buffer [, byteOffset [, byteLength]])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>buffer</code></dt>
+ <dd>Существующий {{jsxref("ArrayBuffer")}} или {{jsxref("SharedArrayBuffer")}} {{experimental_inline}} для использования как хранилище для нового объекта <code>DataView</code>.</dd>
+ <dt><code>byteOffset</code> {{optional_inline}}</dt>
+ <dd>Смещение в байтах к первому байту в заданном буфере. Если не определён, то вид буфера будет начинаться с первого байта.</dd>
+ <dt><code>byteLength</code> {{optional_inline}}</dt>
+ <dd>Количество элементов в массиве байтов. Если не определён, то длина вида будет соответствовать длине буфера.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый объект <code>DataView</code> представляющий определённый буфер данных.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<dl>
+ <dt><code>{{jsxref("RangeError")}}</code></dt>
+ <dd>Выкидывается если <code>byteOffset</code>  и <code>byteLength</code> заходит за пределы буфера.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<h3 id="Порядок_байтов">Порядок байтов</h3>
+
+<p>Многобайтовые числовые форматы представлены в памяти по разному в зависимости от архитектуры машины, см {{Glossary("Endianness")}} для объяснения. Аксессоры DataView предоставляют явный контроль над обращением к данным вне зависимости от порядка байтов архитектуры платформы.</p>
+
+<pre class="brush: js">var littleEndian = (function() {
+ var buffer = new ArrayBuffer(2);
+ new DataView(buffer).setInt16(0, 256, true /* littleEndian */);
+ // Int16Array uses the platform's endianness.
+ return new Int16Array(buffer)[0] === 256;
+})();
+console.log(littleEndian); // true or false
+</pre>
+
+<h2 id="Свойства">Свойства</h2>
+
+<p>All <code>DataView</code> instances inherit from {{jsxref("DataView.prototype")}} and allows the addition of properties to all DataView objects.</p>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/DataView/prototype','Properties')}}</p>
+
+<h2 id="Методы">Методы</h2>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/DataView/prototype','Methods')}}</p>
+
+<h2 id="Пример">Пример</h2>
+
+<pre class="brush: js">var buffer = new ArrayBuffer(16);
+var dv = new DataView(buffer, 0);
+
+dv.setInt16(1, 42);
+dv.getInt16(1); //42
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 6</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-dataview-constructor', 'DataView')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-dataview-constructor', 'DataView')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Таблица_совместимости">Таблица совместимости</h2>
+
+
+
+<p>{{Compat("javascript.builtins.DataView")}}</p>
+
+<h2 id="Замечания_совместимости">Замечания совместимости</h2>
+
+<p>Starting with Firefox 40, <code>DataView</code> requires to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling <code>DataView()</code> as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = DataView(buffer, 0);
+// TypeError: calling a builtin DataView constructor without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new DataView(buffer, 0);</pre>
+
+<h2 id="Также">Также</h2>
+
+<ul>
+ <li><a class="link-https" href="https://github.com/jDataView/jDataView">jDataView</a>: JavaScript library that polyfills and extends the <code>DataView</code> API to all browsers and Node.js.</li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("SharedArrayBuffer")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/dataview/setint16/index.html b/files/ru/web/javascript/reference/global_objects/dataview/setint16/index.html
new file mode 100644
index 0000000000..22e53f475d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/dataview/setint16/index.html
@@ -0,0 +1,80 @@
+---
+title: DataView.prototype.setInt16()
+slug: Web/JavaScript/Reference/Global_Objects/DataView/setInt16
+tags:
+ - DataView
+ - JavaScript
+ - TypedArrays
+ - метод
+ - прототип
+translation_of: Web/JavaScript/Reference/Global_Objects/DataView/setInt16
+---
+<div>{{JSRef}}</div>
+
+<div>Метод <strong><code>setInt16()</code></strong> содержит 16-битное целое (short) значение в байте, смещённым по указанному числу от начала {{jsxref("DataView")}}.</div>
+
+<div>{{EmbedInteractiveExample("pages/js/dataview-setint16.html")}}</div>
+
+<p class="hidden">Исходный код для этого интерактивного примера содержится на репозитории в GitHub. Если вы хотите внести вклад в проект интерактивных примеров, пожалуйста, зайдите на <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/interactive-examples</a> и отправьте нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>dataview</var>.setInt16(byteOffset, value [, littleEndian])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>byteOffset</dt>
+ <dd>Смещение в байтах от старта до этого значения, где будут храниться данные.</dd>
+ <dt>value</dt>
+ <dd>Устанавливаемое значение.</dd>
+ <dt>littleEndian</dt>
+ <dd>{{optional_inline}} Указывает, сохранять ли 16-bit целое в {{Glossary("Endianness", "little- or big-endian")}} формате. Если значение false или undefined, записывает значение big-endian.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h3 id="Возвращаемые_ошибки">Возвращаемые ошибки</h3>
+
+<dl>
+ <dt>{{jsxref("RangeError")}}</dt>
+ <dd>Выдана, если <code>byteOffset</code> установлен так, что целое бы хранилось после конца.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_setInt16">Использование метода <code>setInt16</code></h3>
+
+<pre class="brush:js">var buffer = new ArrayBuffer(8);
+var dataview = new DataView(buffer);
+dataview.setInt16(1, 3);
+dataview.getInt16(1); // 3
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-dataview.prototype.setint16', 'DataView.prototype.setInt16')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице сгенерирована из структурированных данных. Если вы хотите внести вклад в данные, пожалуйста, зайдите на <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.DataView.setInt16")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также </h2>
+
+<ul>
+ <li>{{jsxref("DataView")}}</li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getdate/index.html b/files/ru/web/javascript/reference/global_objects/date/getdate/index.html
new file mode 100644
index 0000000000..06c43d7b14
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getdate/index.html
@@ -0,0 +1,81 @@
+---
+title: Date.prototype.getDate()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getDate
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getDate()</code></strong> возвращает день месяца указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getDate()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getDate()</code>, является целым числом от 1 до 31.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getDate" name="Example:_Using_getDate">Пример: использование метода <code>getDate()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 25 переменной <code>day</code> из значения объекта {{jsxref("Global_Objects/Date", "Date")}} <code>date</code>.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let day = date.getDate();
+
+console.log(day); // 25
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.14', 'Date.prototype.getDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.getDate")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCDate()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCDay()")}}</li>
+ <li>{{jsxref("Date.prototype.setDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getday/index.html b/files/ru/web/javascript/reference/global_objects/date/getday/index.html
new file mode 100644
index 0000000000..628d921793
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getday/index.html
@@ -0,0 +1,94 @@
+---
+title: Date.prototype.getDay()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getDay
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDay
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getDay()</code></strong> возвращает порядковый номер дня недели указанной даты по местному времени, где 0 соответствует воскресенью.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getDay()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getDay()</code>, является целым числом, соответствующим дню недели: 0 соответствует воскресенью, 1 — понедельнику, 2 — вторнику и так далее.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getDay" name="Example:_Using_getDay">Пример: использование метода <code>getDay()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 1 переменной <code>weekday</code> из значения объекта {{jsxref("Global_Objects/Date", "Date")}} <code>date</code>. 25 декабря 1995 года было понедельником.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let weekday = date.getDay();
+
+console.log(weekday); // 1
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> При необходимости полное название дня (например, "<code>Понедельник</code>") можно получить, используя {{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} с параметром <code>options</code> parameter. С помощью этого метода упрощается интернационализация:</p>
+
+<pre class="brush: js notranslate">let options = { weekday: 'long'};
+
+console.log(new Intl.DateTimeFormat('en-US', options).format(date));
+// Monday
+
+console.log(new Intl.DateTimeFormat('ru-RU', options).format(date));
+// понедельник
+</pre>
+</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.16', 'Date.prototype.getDay')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getday', 'Date.prototype.getDay')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.getDay")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCDate()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCDay()")}}</li>
+ <li>{{jsxref("Date.prototype.setDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getfullyear/index.html b/files/ru/web/javascript/reference/global_objects/date/getfullyear/index.html
new file mode 100644
index 0000000000..594410c0a3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getfullyear/index.html
@@ -0,0 +1,81 @@
+---
+title: Date.prototype.getFullYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getFullYear
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getFullYear
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getFullYear()</code></strong> возвращает год указанной даты по местному времени.</p>
+
+<p>Используйте этот метод вместо метода {{jsxref("Date.prototype.getYear()", "getYear()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getFullYear()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getFullYear()</code> является абсолютным числом. Для дат между 1000 и 9999 годом метод <code>getFullYear()</code> возвращает четырёхзначный номер, например, 1995. Используйте эту функцию, чтобы быть уверенным, что год будет правильным после 2000 года.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getFullYear" name="Example:_Using_getFullYear">Пример: использование метода <code>getFullYear()</code></h3>
+
+<p>В следующем примере переменной <code>year</code> присваивается четырёхзначное значение текущего года.</p>
+
+<pre class="brush: js notranslate">let today = new Date(); // Mon Nov 23 2020 15:23:46 GMT+0300 (Москва, стандартное время)
+let year = today.getFullYear(); // 2020
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.10', 'Date.prototype.getFullYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getfullyear', 'Date.prototype.getFullYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.getFullYear")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.getYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/gethours/index.html b/files/ru/web/javascript/reference/global_objects/date/gethours/index.html
new file mode 100644
index 0000000000..b5ecd79d22
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/gethours/index.html
@@ -0,0 +1,103 @@
+---
+title: Date.prototype.getHours()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getHours
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getHours
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getHours()</code></strong> возвращает часы указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getHours()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getHours()</code>, является целым числом от 0 до 23.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getHours" name="Example:_Using_getHours">Пример: использование метода <code>getHours()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 23 переменной <code>hours</code> из значения объекта {{jsxref("Global_Objects/Date", "Date")}} <code>date</code>.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let hours = date.getHours();
+
+console.log(hours); // 23
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.18', 'Date.prototype.getHours')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.prototype.gethours', 'Date.prototype.getHours')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.getHours")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCHours()")}}</li>
+ <li>{{jsxref("Date.prototype.setHours()")}}</li>
+</ul>
+
+<div id="simple-translate">
+<div>
+<div class="simple-translate-button isShow" style="height: 22px; width: 22px; top: 1012px; left: 179px;"></div>
+
+<div class="simple-translate-panel " style="width: 300px; height: 200px; top: 0px; left: 0px; font-size: 13px; background-color: rgb(255, 255, 255);">
+<div class="simple-translate-result-wrapper" style="overflow: hidden;">
+<div class="simple-translate-move"></div>
+
+<div class="simple-translate-result-contents">
+<p class="simple-translate-result" style="color: rgb(0, 0, 0);"></p>
+
+<p class="simple-translate-candidate" style="color: rgb(115, 115, 115);"></p>
+</div>
+</div>
+</div>
+</div>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getmilliseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/getmilliseconds/index.html
new file mode 100644
index 0000000000..71257f95c1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getmilliseconds/index.html
@@ -0,0 +1,126 @@
+---
+title: Date.prototype.getMilliseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMilliseconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getMilliseconds()</code></strong> возвращает миллисекунды указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getMilliseconds()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getMilliseconds()</code>, является целым числом от 0 до 999.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getMilliseconds" name="Example:_Using_getMilliseconds">Пример: использование метода <code>getMilliseconds()</code></h3>
+
+<p>В следующем примере переменной <code>milliseconds</code> присваиваются миллисекунды текущего времени:</p>
+
+<pre class="brush: js notranslate">let today = new Date();
+let milliseconds = today.getMilliseconds();
+
+console.log(milliseconds); // 709
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.24', 'Date.prototype.getMilliseconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getmilliseconds', 'Date.prototype.getMilliseconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMilliseconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setMilliseconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getminutes/index.html b/files/ru/web/javascript/reference/global_objects/date/getminutes/index.html
new file mode 100644
index 0000000000..88db42fe6f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getminutes/index.html
@@ -0,0 +1,126 @@
+---
+title: Date.prototype.getMinutes()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getMinutes
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMinutes
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getMinutes()</code></strong> возвращает минуты указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getMinutes()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getMinutes()</code>, является целым числом от 0 до 59.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getMinutes" name="Example:_Using_getMinutes">Пример: использование метода <code>getMinutes()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 15 переменной <code>minutes</code> из значения объекта {{jsxref("Global_Objects/Date", "Date")}} <code>date</code>.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let minutes = date.getMinutes();
+
+console.log(minutes); // 15
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.20', 'Date.prototype.getMinutes')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getminutes', 'Date.prototype.getMinutes')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMinutes()")}}</li>
+ <li>{{jsxref("Date.prototype.setMinutes()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getmonth/index.html b/files/ru/web/javascript/reference/global_objects/date/getmonth/index.html
new file mode 100644
index 0000000000..5d8c1af47e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getmonth/index.html
@@ -0,0 +1,126 @@
+---
+title: Date.prototype.getMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getMonth
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getMonth
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getMonth()</code></strong> возвращает месяц указанной даты по местному времени, нумерация месяцев начинается с нуля для первого месяца в году.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getMonth()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getMonth()</code>, является целым числом от 0 до 11. 0 соответствует январю, 1 — февралю и так далее.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getMonth" name="Example:_Using_getMonth">Пример: использование метода <code>getMonth()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 11 переменной <code>month</code> из значения переменной <code>date</code> объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let month = date.getMonth();
+
+console.log(month); // 11
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.12', 'Date.prototype.getMonth')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getmonth', 'Date.prototype.getMonth')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMonth()")}}</li>
+ <li>{{jsxref("Date.prototype.setMonth()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/getseconds/index.html
new file mode 100644
index 0000000000..4332bf9b01
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getseconds/index.html
@@ -0,0 +1,126 @@
+---
+title: Date.prototype.getSeconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getSeconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getSeconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getSeconds()</code></strong> возвращает секунды указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getSeconds()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getSeconds()</code>, является целым числом от 0 до 59.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getSeconds" name="Example:_Using_getSeconds">Пример: использование метода <code>getSeconds()</code></h3>
+
+<p>Вторая инструкция в примере ниже присваивает значение 30 переменной <code>seconds</code> из значения переменной <code>date</code> объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<pre class="brush: js notranslate">let date = new Date('December 25, 1995 23:15:30');
+let seconds = date.getSeconds();
+
+console.log(seconds); // 30
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.22', 'Date.prototype.getSeconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getseconds', 'Date.prototype.getSeconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCSeconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setSeconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/gettime/index.html b/files/ru/web/javascript/reference/global_objects/date/gettime/index.html
new file mode 100644
index 0000000000..407d054fa7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/gettime/index.html
@@ -0,0 +1,100 @@
+---
+title: Date.prototype.getTime()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getTime
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTime
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<div></div>
+
+<p>Метод <strong><code>getTime()</code></strong> возвращает числовое значение, соответствующее указанной дате по всемирному координированному времени.</p>
+
+<p>Вы можете использовать этот метод для того, чтобы присвоить дату и время другому объекту {{jsxref("Global_Objects/Date", "Date")}}. Этот метод функционально эквивалентен методу {{jsxref("Date.prototype.valueof", "valueOf()")}}.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/date-gettime.html")}}</p>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на перенос.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>dateObj</var>.getTime()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Значение, возвращённое методом <code>getTime()</code>, является количеством миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_getTime_for_copying_dates" name="Example:_Using_getTime_for_copying_dates">Пример: использование метода <code>getTime()</code> для копирования дат</h3>
+
+<p>Конструирует новый объект даты с идентичным значением времени.</p>
+
+<pre class="brush: js notranslate">let birthday = new Date(2020, 12, 20);
+let copy = new Date();
+copy.setTime(birthday.getTime());
+
+console.log(copy.setTime(birthday.getTime())); // 1611090000000
+</pre>
+
+<h3 id="Example_Measuring_execution_time" name="Example:_Measuring_execution_time">Пример: замер времени выполнения</h3>
+
+<p>Вычитанием двух последовательных вызовов метода <code>getTime()</code> на заново сконструированных объектах {{jsxref("Global_Objects/Date", "Date")}} можно замерить промежуток времени, произошедший между двумя этими вызовами. Это можно использовать для вычисления времени выполнения неких операций.</p>
+
+<pre class="brush: js notranslate">let end, start;
+
+start = new Date();
+for (let i = 0; i &lt; 1000; i++) {
+ Math.sqrt(i);
+}
+end = new Date();
+
+console.log('Операция заняла ' + (end.getTime() - start.getTime()) + ' мсек');
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.9', 'Date.prototype.getTime')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.gettime', 'Date.prototype.getTime')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Date.getTime")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.setTime()")}}</li>
+ <li>{{jsxref("Date.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html b/files/ru/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html
new file mode 100644
index 0000000000..9c564f3139
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/gettimezoneoffset/index.html
@@ -0,0 +1,106 @@
+---
+title: Date.prototype.getTimezoneOffset()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getTimezoneOffset()</code></strong> возвращает смещение часового пояса относительно часового пояса UTC в минутах для текущей локали.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getTimezoneOffset()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Возвращает смещение часового пояса, являющееся разностью в минутах между временем UTC и местным временем. Обратите внимание, что это значит, что смещение будет положительным для местного часового пояса, находящегося западнее часового пояса UTC и отрицательным — восточнее. Например, если ваш часовой пояс равен UTC+10 (австралийское восточное поясное время), будет возвращено значение -600. Наличие летнего и зимнего времени не даёт этому смещению быть постоянным, даже в пределах одного часового пояса.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getTimezoneOffset" name="Example:_Using_getTimezoneOffset">Пример: использование метода <code>getTimezoneOffset()</code></h3>
+<pre class="brush: js">var x = new Date();
+var currentTimeZoneOffsetInHours = x.getTimezoneOffset() / 60;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.26', 'Date.prototype.getTimezoneOffset')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.gettimezoneoffset', 'Date.prototype.getTimezoneOffset')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcdate/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcdate/index.html
new file mode 100644
index 0000000000..ed5a5368f0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcdate/index.html
@@ -0,0 +1,114 @@
+---
+title: Date.prototype.getUTCDate()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDate
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCDate()</code></strong> возвращает день месяца указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><var>dateObj</var>.getUTCDate()</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCDate()</code>, является целым числом от 1 до 31.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCDate" name="Example:_Using_getUTCDate">Пример: использование метода <code>getUTCDate()</code></h3>
+<p>В следующем примере переменной <code>day</code> присваивается значение дня из текущей даты.</p>
+<pre class="brush: js">var today = new Date();
+var day = today.getUTCDate();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.15', 'Date.prototype.getUTCDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcdate', 'Date.prototype.getUTCDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getDate()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCDay()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcday/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcday/index.html
new file mode 100644
index 0000000000..4a82c3b080
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcday/index.html
@@ -0,0 +1,114 @@
+---
+title: Date.prototype.getUTCDay()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCDay
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCDay()</code></strong> возвращает день недели указанной даты по всемирному координированному времени, где 0 соответствует воскресенью.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCDay()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getDay()</code>, является целым числом, соответствующим дню недели: 0 соответствует воскресенью, 1 — понедельнику, 2 — вторнику и так далее.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCDay" name="Example:_Using_getUTCDay">Пример: использование метода <code>getUTCDay()</code></h3>
+<p>В следующем примере переменной <code>weekday</code> присваивается номер дня недели из текущей даты.</p>
+<pre class="brush: js">var today = new Date();
+var weekday = today.getUTCDay();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.17', 'Date.prototype.getUTCDay')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcday', 'Date.prototype.getUTCDay')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCDate()")}}</li>
+ <li>{{jsxref("Date.prototype.getDay()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcfullyear/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcfullyear/index.html
new file mode 100644
index 0000000000..628a0301b0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcfullyear/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCFullYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCFullYear
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCFullYear()</code></strong> возвращает год указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCFullYear()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCFullYear()</code> является абсолютным числом, совместимым с проблемой 2000 года, например, 1995.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCFullYear" name="Example:_Using_getUTCFullYear">Пример: использование метода <code>getUTCFullYear()</code></h3>
+<p>В следующем примере переменной <code>year</code> присваивается четырёхзначное значение текущего года.</p>
+<pre class="brush: js">var today = new Date();
+var year = today.getUTCFullYear();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.11', 'Date.prototype.getUTCFullYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcfullyear', 'Date.prototype.getUTCFullYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setFullYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutchours/index.html b/files/ru/web/javascript/reference/global_objects/date/getutchours/index.html
new file mode 100644
index 0000000000..3fcc362cea
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutchours/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCHours()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCHours
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCHours()</code></strong> возвращает часы указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCHours()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCHours()</code>, является целым числом от 0 до 23.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCHours" name="Example:_Using_getUTCHours">Пример: использование метода <code>getUTCHours()</code></h3>
+<p>В следующем примере переменной <code>hours</code> присваивается количество часов из текущего времени.</p>
+<pre class="brush: js">var today = new Date();
+var hours = today.getUTCHours();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.19', 'Date.prototype.getUTCHours')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutchours', 'Date.prototype.getUTCHours')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getHours()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCHours()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html
new file mode 100644
index 0000000000..da9cf2090b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcmilliseconds/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCMilliseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMilliseconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCMilliseconds()</code></strong> возвращает миллисекунды указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCMilliseconds()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCMilliseconds()</code>, является целым числом от 0 до 999.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCMilliseconds" name="Example:_Using_getUTCMilliseconds">Пример: использование метода <code>getUTCMilliseconds()</code></h3>
+<p>В следующем примере переменной <code>milliseconds</code> присваивается количество миллисекунд из текущего времени.</p>
+<pre class="brush: js">var today = new Date();
+var milliseconds = today.getUTCMilliseconds();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.25', 'Date.prototype.getUTCMilliseconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcmilliseconds', 'Date.prototype.getUTCMilliseconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getMilliseconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMilliseconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcminutes/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcminutes/index.html
new file mode 100644
index 0000000000..8f15413ccd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcminutes/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCMinutes()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMinutes
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCMinutes()</code></strong> возвращает минуты указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCMinutes()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCMinutes()</code>, является целым числом от 0 до 59.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCMinutes" name="Example:_Using_getUTCMinutes">Пример: использование метода <code>getUTCMinutes()</code></h3>
+<p>В следующем примере переменной <code>minutes</code> присваивается количество минут из текущего времени.</p>
+<pre class="brush: js">var today = new Date();
+var minutes = today.getUTCMinutes();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.21', 'Date.prototype.getUTCMinutes')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcminutes', 'Date.prototype.getUTCMinutes')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getMinutes()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMinutes()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcmonth/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcmonth/index.html
new file mode 100644
index 0000000000..f7e3f3ccb9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcmonth/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCMonth
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCMonth()</code></strong> возвращает месяц указанной даты по всемирному координированному времени, нумерация месяцев начинается с нуля для первого месяца в году.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCMonth()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCMonth()</code>, является целым числом от 0 до 11. 0 соответствует январю, 1 — февралю и так далее.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCMonth" name="Example:_Using_getUTCMonth">Пример: использование метода <code>getUTCMonth()</code></h3>
+<p>В следующем примере переменной <code>month</code> присваивается значение месяца из текущей даты.</p>
+<pre class="brush: js">var today = new Date();
+var month = today.getUTCMonth();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.13', 'Date.prototype.getUTCMonth')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcmonth', 'Date.prototype.getUTCMonth')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getMonth()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMonth()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getutcseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/getutcseconds/index.html
new file mode 100644
index 0000000000..68916e4551
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getutcseconds/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.getUTCSeconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getUTCSeconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>getUTCSeconds()</code></strong> возвращает секунды указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.getUTCSeconds()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Значение, возвращённое методом <code>getUTCSeconds()</code>, является целым числом от 0 до 59.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_getUTCSeconds" name="Example:_Using_getUTCSeconds">Пример: использование метода <code>getUTCSeconds()</code></h3>
+<p>В следующем примере переменной <code>seconds</code> присваивается количество секунд из текущего времени.</p>
+<pre class="brush: js">var today = new Date();
+var seconds = today.getUTCSeconds();
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.23', 'Date.prototype.getUTCSeconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getutcseconds', 'Date.prototype.getUTCSeconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getSeconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCSeconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/getyear/index.html b/files/ru/web/javascript/reference/global_objects/date/getyear/index.html
new file mode 100644
index 0000000000..e7c7b42782
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/getyear/index.html
@@ -0,0 +1,123 @@
+---
+title: Date.prototype.getYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getYear
+tags:
+ - Date
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getYear
+---
+<div>{{JSRef("Global_Objects", "Date")}} {{deprecated_header("")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>getYear()</code></strong> возвращает год указанной даты по местному времени. Поскольку метод <code>getYear()</code> не возвращает полный год («проблема 2000 года»), он больше не используется и был заменён методом {{jsxref("Date.prototype.getFullYear", "getFullYear()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.getYear()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Метод <code>getYear()</code> возвращает год минус 1900; таким образом:</p>
+
+<ul>
+ <li>Для годов, больших, либо равных 2000, значение, возвращённое методом <code>getYear()</code>, будет равно 100 или выше. Например, если год равен 2026, метод <code>getYear()</code> вернёт 126.</li>
+ <li>Для годов между 1900 и 1999 включительно, значение, возвращённое методом <code>getYear()</code>, лежит между 0 и 99. Например, если год равен 1976, метод <code>getYear()</code> вернёт 76.</li>
+ <li>Для годов, меньших 1900, значение, возвращённое методом <code>getYear()</code>, будем меньше 0. Например, если год равен 1800, метод <code>getYear()</code> вернёт -100.</li>
+</ul>
+
+<p>Чтобы учесть года до и после 2000, вы должны вместо метода <code>getYear()</code> использовать метод {{jsxref("Date.prototype.getFullYear", "getFullYear()")}}, который возвращает полный год.</p>
+
+<h2 id="Backward_compatibility" name="Backward_compatibility">Обратная совместимость</h2>
+
+<h3 id="JavaScript_1.2_and_earlier" name="JavaScript_1.2_and_earlier">Поведение в JavaScript 1.2 и ранее</h3>
+
+<p>Метод <code>getYear()</code> возвращал 2-х или 4-х значный год:</p>
+
+<ul>
+ <li>Для годов между 1900 и 1999 включительно, значение, возвращаемое методом <code>getYear()</code>, было годом минус 1900. Например, если год равнялся 1976, возвращаемое значение равнялось 76.</li>
+ <li>Для годов, меньших 1900, либо больших 1999, значение, возвращаемое методом <code>getYear()</code> было четырёхзначным годом. Например, если год равнялся 1856, возвращаемое значение равнялось 1856. Если год равнялся 2026, возвращаемое значение равнялось 2026.</li>
+</ul>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Years_between_1900_and_1999" name="Example:_Years_between_1900_and_1999">Пример: года между 1900 и 1999</h3>
+
+<p>Вторая инструкция присваивает значение 95 переменной <code>year</code>.</p>
+
+<pre class="brush: js">var Xmas = new Date('December 25, 1995 23:15:00');
+var year = Xmas.getYear(); // вернёт 95
+</pre>
+
+<h3 id="Example:_Years_above_1999" name="Example:_Years_above_1999">Пример: года после 1999</h3>
+
+<p>Вторая инструкция присваивает значение 100 переменной <code>year</code>.</p>
+
+<pre class="brush: js">var Xmas = new Date('December 25, 2000 23:15:00');
+var year = Xmas.getYear(); // вернёт 100
+</pre>
+
+<h3 id="Example:_Years_below_1900" name="Example:_Years_below_1900">Пример: года до 1900</h3>
+
+<p>Вторая инструкция присваивает значение -100 переменной <code>year</code>.</p>
+
+<pre class="brush: js">var Xmas = new Date('December 25, 1800 23:15:00');
+var year = Xmas.getYear(); // вернёт -100
+</pre>
+
+<h3 id="Example:_Setting_and_getting_a_year_between_1900_and_1999" name="Example:_Setting_and_getting_a_year_between_1900_and_1999">Пример: установка и получение года между 1900 и 1999</h3>
+
+<p>Вторая инструкция присваивает значение 95 переменной <code>year</code>, которое представляет 1995 год.</p>
+
+<pre class="brush: js">var Xmas.setYear(95);
+var year = Xmas.getYear(); // вернёт 95
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-B.2.4', 'Date.prototype.getYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определён в (информативном) приложении по совместимости.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getyear', 'Date.prototype.getYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определён в (нормативном) приложении по дополнительным возможностям веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div> </div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.getYear")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/index.html b/files/ru/web/javascript/reference/global_objects/date/index.html
new file mode 100644
index 0000000000..5979d471f2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/index.html
@@ -0,0 +1,232 @@
+---
+title: Дата
+slug: Web/JavaScript/Reference/Global_Objects/Date
+tags:
+ - Date
+ - JavaScript
+ - Reference
+ - время
+translation_of: Web/JavaScript/Reference/Global_Objects/Date
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Создаёт экземпляр объекта <strong><code>Date</code></strong>, представляющего собой момент времени. Обьект Дата содержит число милисекунд прошедших с 1 января 1970 г. UTC</p>
+
+
+
+<p>{{EmbedInteractiveExample("pages/js/date-constructor.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>new Date();
+new Date(<var>value</var>);
+new Date(<var>dateString</var>);
+new Date(<var>year</var>, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minute</var>[, <var>second</var>[, <var>millisecond</var>]]]]]);
+</code></pre>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> объекты <code>Date</code> могут быть созданы только путём вызова функции <code>Date</code> в качестве конструктора: обычный вызов функции (то есть, без использования оператора {{jsxref("Operators/new", "new")}}) вернёт строку вместо объекта <code>Date</code>; в отличие от других объектных типов JavaScript, объекты <code>Date</code> не имеют литерального синтаксиса.</p>
+</div>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> если функция <code>Date</code> вызывается в качестве конструктора с более, чем одним аргументом, значения, большие логического диапазона (например, 13 в качестве номера месяца или 70 для значения минут) «переметнутся» на соседние значения. Например, вызов <code>new Date(2013, 13, 1)</code> эквивалентен вызову <code>new Date(2014, 1, 1)</code>, оба создадут дату <code>2014-02-01</code> (нумерация месяцев начинается с нуля). Тоже самое действует и для других значений: вызов <code>new Date(2013, 2, 1, 0, 70)</code> эквивалентен вызову <code>new Date(2013, 2, 1, 1, 10)</code> — оба вызова создадут дату <code>2013-03-01T01:10:00</code>.</p>
+</div>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> если функция Date вызывается в качестве конструктора с более чем одним аргументом, то указанные аргументы интерпретируются как локальное время. Если аргументы указывают время в UTC, используйте <code>new Date({{jsxref("Date.UTC()", "Date.UTC(...)")}})</code> с теми же аргументами.</p>
+</div>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Целое значение, представляющее количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC (эпохи Unix).</dd>
+ <dt><code>dateString</code></dt>
+ <dd>Строковое значение, представляющее дату. Строка должна быть в одном из форматов, распознаваемых методом {{jsxref("Date.parse()")}} (совместимые с IETF RFC 2822 временные метки [<a href="http://tools.ietf.org/html/rfc2822#page-14">на английском</a>, <a href="http://rfc2.ru/5322.rfc/print#p3.3">на русском</a>], а также версия ISO8601 [<a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15">на английском</a>, <a href="http://es5.javascript.ru/x15.9.html#x15.9.1.15">на русском</a>]).</dd>
+ <dt><code>year</code></dt>
+ <dd>Целое значение, представляющее год. Значения с 0 по 99 отображаются на года с 1900 по 1999. Смотрите {{anch("Example:_Two_digit_years_map_to_1900_-_1999", "пример ниже")}}.</dd>
+ <dt><code>month</code></dt>
+ <dd>Целое значение, представляющее месяц, начинается с 0 для января и кончается 11 для декабря.</dd>
+ <dt><code>day</code></dt>
+ <dd>Необязательный параметр. Целое значение, представляющее день месяца.</dd>
+ <dt><code>hour</code></dt>
+ <dd>Необязательный параметр. Целое значение, представляющее часы дня.</dd>
+ <dt><code>minute</code></dt>
+ <dd>Необязательный параметр. Целое значение, представляющее минуты времени.</dd>
+ <dt><code>second</code></dt>
+ <dd>Необязательный параметр. Целое значение, представляющее секунды времени.</dd>
+ <dt><code>millisecond</code></dt>
+ <dd>Необязательный параметр. Целое значение, представляющее миллисекунды времени.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<ul>
+ <li>Если никаких аргументов передано не было, конструктор создаёт объект <code>Date</code>  для текущих даты и времени, согласно системным настройкам.</li>
+ <li>Если передано как минимум два аргумента, отсутствующие аргументы устанавливаются в стартовые значения - день месяца 1 и время полуночи.</li>
+ <li>Дата в JavaScript измеряется в миллисекундах, прошедших с полуночи 1 января 1970 года по UTC. День содержит 86 400 000 миллисекунд. Диапазон дат объекта <code>Date</code> варьируется от -100 000 000 до 100 000 000 дней относительно 1 января 1970 года по UTC.</li>
+ <li>Объект <code>Date</code> обеспечивает универсальное поведение на всех платформах. Значение времени может передаваться между системами для представления одинакового момента во времени и, если оно используется для создания локального объекта даты, будет отражать местный эквивалент времени.</li>
+ <li>Объект <code>Date</code> поддерживает несколько методов для работы с UTC (всемирным координированным временем), наряду с методами работы с местным временем. UTC, также известное как среднее время по Гринвичу (GMT), ссылается на время, установленное Всемирным стандартом времени. Местное время — это время на компьютере, на котором выполняется JavaScript.</li>
+ <li>Вызов объекта <code>Date</code> в качестве функции (то есть, без использования оператора {{jsxref("Operators/new", "new")}}) вернёт строку, представляющую текущие дату и время.</li>
+</ul>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Date.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства к объекту <code>Date</code>.</dd>
+ <dt><code>Date.length</code></dt>
+ <dd>Значение свойства <code>Date.length</code> равно 7. Это количество аргументов, обрабатываемых конструктором.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "properties", "prototype")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Date.now()")}}</dt>
+ <dd>Возвращает числовое значение, соответствующее текущему времени — количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</dd>
+ <dt>{{jsxref("Date.parse()")}}</dt>
+ <dd>Разбирает строковое представление даты и возвращает количество миллисекунд с 1 января 1970 года 00:00:00 по местному времени.</dd>
+ <dt>{{jsxref("Date.UTC()")}}</dt>
+ <dd>Принимает те же самые параметры, что и самый длиный вариант конструктора (то есть, от 2 до 7) и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "Methods", "now", "parse", "UTC")}}</div>
+
+<h2 id="Date_instances" name="Date_instances">Экземпляры объекта <code>Date</code></h2>
+
+<p>Все экземпляры объекта <code>Date</code> наследуются от {{jsxref("Date.prototype")}}. Объект прототипа конструктора <code>Date</code> может быть изменён, чтобы затронуть все экземпляры объекта <code>Date</code>.</p>
+
+<h3 id="Методы">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Date/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Several_ways_to_assign_dates" name="Example:_Several_ways_to_assign_dates">Пример: несколько способов создания объекта <code>Date</code></h3>
+
+<p>Следующие примеры показывают несколько способов создания дат в JavaScript:</p>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> разбор строкового представления дат с помощью конструктора <code>Date</code> (так же как эквивалентный ему метод <code>Date.parse</code>) может иметь различия и несоответствия в браузерах.</p>
+</div>
+
+<pre class="brush: js notranslate">var today = new Date();
+var birthday = new Date('December 17, 1995 03:24:00');
+var birthday = new Date('1995-12-17T03:24:00');
+var birthday = new Date(1995, 11, 17);
+var birthday = new Date(1995, 11, 17, 3, 24, 0);
+</pre>
+
+<h3 id="Example_Two_digit_years_map_to_1900_-_1999" name="Example:_Two_digit_years_map_to_1900_-_1999">Пример: двухциферный год отображается на 1900 - 1999 года</h3>
+
+<p>Для того, чтобы создать и получить даты между 0 и 99 годом, нужно использовать методы {{jsxref("Date.prototype.setFullYear()")}} и {{jsxref("Date.prototype.getFullYear()")}}.</p>
+
+<pre class="brush: js notranslate">var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+// Устаревший метод, 98 отображается на 1998 год
+date.setYear(98); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+date.setFullYear(98); // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
+</pre>
+
+<h3 id="Example_Calculating_elapsed_time" name="Example:_Calculating_elapsed_time">Пример: вычисление затраченного времени</h3>
+
+<p>Следующие примеры показывают, как определить разницу во времени между двумя датами в JavaScript:</p>
+
+<pre class="brush: js notranslate">// Используя объекты Date
+var start = Date.now();
+
+// Событие, для которого замеряется время, происходит тут:
+doSomethingForALongTime();
+var end = Date.now();
+var elapsed = end - start; // затраченное время в миллисекундах
+</pre>
+
+<pre class="brush: js notranslate">// Используя встроенные методы
+var start = new Date();
+
+// Событие, для которого замеряется время, происходит тут:
+doSomethingForALongTime();
+var end = new Date();
+var elapsed = end.getTime() - start.getTime(); // затраченное время в миллисекундах
+</pre>
+
+<pre class="brush: js notranslate">// Проверяет функцию и возвращает её возвращаемое значение
+function printElapsedTime(fTest) {
+ var nStartTime = Date.now(),
+ vReturn = fTest(),
+ nEndTime = Date.now();
+
+ console.log('Затраченное время: ' + String(nEndTime - nStartTime) + ' миллисекунд');
+ return vReturn;
+}
+
+yourFunctionReturn = printElapsedTime(yourFunction);
+
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Обратите внимание:</strong> в браузерах, поддерживающих высокое временное разрешение с помощью {{domxref("window.performance", "API замера производительности", "", 1)}}, метод {{domxref("Performance.now()")}} может обеспечить более надёжные и точные замеры затраченного времени, нежели метод {{jsxref("Date.now()")}}.</p>
+</div>
+
+<h3 id="Получить_количество_секунд_с_начало_эпохи_Unix">Получить количество секунд с начало эпохи Unix</h3>
+
+<pre class="notranslate"><code>var seconds = Math.floor(Date.now() / 1000);</code></pre>
+
+<p>В этом случае важно возвращать только целое число (так что простое деление не подойдет), а также возвращать только фактически прошедшие секунды (поэтому этот код использует {{jsxref ("Math.floor ()")}} а не {{jsxref ("Math.round ()")}}).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>
+ <table>
+ <tbody>
+ <tr>
+ <td>{{Spec2('ES1')}}</td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9', 'Date')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date-objects', 'Date')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Date", 3)}}</p>
diff --git a/files/ru/web/javascript/reference/global_objects/date/now/index.html b/files/ru/web/javascript/reference/global_objects/date/now/index.html
new file mode 100644
index 0000000000..f8e9276067
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/now/index.html
@@ -0,0 +1,78 @@
+---
+title: Date.now()
+slug: Web/JavaScript/Reference/Global_Objects/Date/now
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/now
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Date.now()</code></strong> возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>var timeInMs = Date.now();</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>now()</code> возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC по текущий момент времени в качестве {{jsxref("Global_Objects/Number", "числа", "", 1)}}.</p>
+
+<p>Поскольку метод <code>now()</code> является статическим методом объекта {{jsxref("Global_Objects/Date", "Date")}}, вы всегда должны использовать его как <code>Date.now()</code>.</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был стандартизирован в ECMA-262 5-го издания. Отсутствие этого метода в движках, которые не были обновлены для его поддержки, можно обойти следующей прокладкой:</p>
+
+<pre class="brush: js">if (!Date.now) {
+ Date.now = function now() {
+ return new Date().getTime();
+ };
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.4.4', 'Date.now')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.now', 'Date.now')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.now")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{domxref("Performance.now()")}} — предоставляет временные метки с разрешением в доли миллисекунд для использования при измерении производительности веб-страницы</li>
+ <li>{{domxref("console.time()")}} / {{domxref("console.timeEnd()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/parse/index.html b/files/ru/web/javascript/reference/global_objects/date/parse/index.html
new file mode 100644
index 0000000000..ce223350ef
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/parse/index.html
@@ -0,0 +1,217 @@
+---
+title: Date.parse()
+slug: Web/JavaScript/Reference/Global_Objects/Date/parse
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Date.parse()</code></strong> разбирает строковое представление даты и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<p>Прямой вызов:</p>
+
+<pre class="syntaxbox"><code>Date.parse(<var>dateString</var>)</code></pre>
+
+<p>Неявный вызов:</p>
+
+<pre class="syntaxbox"><code>new Date(<var>dateString</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>dateString</code></dt>
+ <dd>Строковое представление даты из RFC2822 (<a href="http://tools.ietf.org/html/rfc2822#page-14">на английском</a>, <a href="http://rfc2.ru/5322.rfc/print#p3.3">на русском</a>) или ISO 8601. Могут использоваться и другие форматы, но результаты в таком случае будут непредсказуемые.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>parse()</code> принимает строку с датой (например, <code>"Dec 25, 1995"</code>) и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC. Этот метод полезен для установки значения даты из строкового значения, например, в сочетании с методом {{jsxref("Date.prototype.setTime()", "setTime()")}} о объектом {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<p>По данному строковому представлению времени метод <code>parse()</code> возвращает значение времени. Он принимает синтаксис даты из RFC2822 / IETF (RFC2822 раздел 3.3 — <a href="http://tools.ietf.org/html/rfc2822#page-14">на английском</a>, <a href="http://rfc2.ru/5322.rfc/print#p3.3">на русском</a>), например, <code>"Mon, 25 Dec 1995 13:30:00 GMT"</code>. Он понимает аббревиатуры континентальных часовых поясов США, но для общего пользования используйте смещение часовых поясов, например, <code>"Mon, 25 Dec 1995 13:30:00 +0430"</code> (4 часа 30 минут к востоку от Гринвичского меридиана). Если часовой пояс не определён и строка является форматом ISO, распозначаемым ES5, предполагается, что часовым поясом является UTC. GMT и UTC считаются эквивалентными. Местный часовой пояс используется для интерпретации аргумента в формате RFC2822 из раздела 3.3 (<a href="http://tools.ietf.org/html/rfc2822#page-14">на английском</a>, <a href="http://rfc2.ru/5322.rfc/print#p3.3">на русском</a>) (или в любом другом формате, не распознаваемым как ISO 8601 в ES5), если он не содержит информации о часовом поясе.</p>
+
+<h3 id="ECMAScript_5_ISO-8601_format_support" name="ECMAScript_5_ISO-8601_format_support">Поддержка формата ISO-8601 в ECMAScript 5</h3>
+
+<p>Строка с датой и временем может быть в формате <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a>. Например, могут быть переданы и разобраны строки <code>"2011-10-10"</code> (только дата) или <code>"2011-10-10T14:48:00"</code> (дата и время). Для интерпретации аргументов в формате <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a>, не содержащих информацию о часовом поясе, используется часовой пояс UTC.</p>
+
+<p>Хотя во время разбора строки с датой и используется спецификатор часового пояса, возвращаемое значение всегда содержит количество миллисекунд между 1 января 1970 года 00:00:00 по UTC и моментом времени, представленым аргументом.</p>
+
+<p>Поскольку метод <code>parse()</code> является статическим методом объекта {{jsxref("Global_Objects/Date", "Date")}}, вы всегда должны использовать его как <code>Date.parse()</code>.</p>
+
+<h3 id="Differences_in_assumed_time-zone" name="Differences_in_assumed_time-zone">Различия в предполагаемом часовом поясе</h3>
+
+<p>Для строки даты <code>"March 7, 2014"</code>, метод <code>parse()</code> будет предполагать местный часовой пояс, но если строка дана в формате ISO, например <code>"2014-03-07"</code>, он будет предполагать, что часовой пояс равен UTC. Поэтому объекты {{jsxref("Global_Objects/Date", "Date")}}, созданные из этих строк, если в системе местный часовой пояс не равен UTC, будут представлять разные моменты времени. Это значит, что две строки с датами, которые выглядят одинаковыми, могут дать два разных значения в зависимости от формата преобразуемой строки.</p>
+
+<h3 id="Fall-back_to_implementation-specific_date_formats" name="Fall-back_to_implementation-specific_date_formats">Откат к зависимым от реализации форматам даты</h3>
+
+<p>В спецификации ECMAScript говорится: если строка не соответствует стандартному формату, функция может откатиться к любой зависимой от реализации эвристике, либо к зависимому от реализции алгоритму разбора. Нераспознанные строки, либо даты, содержащие недопустимые значения элементов в строках формата ISO, должны при вызове <code>Date.parse()</code> возвращать {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<p>Однако, недопустимые значения в строке даты, не распознанные как формат ISO, как определено ES5 могут возвращать, а могут и не возвращать {{jsxref("Global_Objects/NaN", "NaN")}} в качестве результата, в зависимости от браузера и предоставленных значений, например:</p>
+
+<pre class="brush: js">// Строка не в формате ISO с недопустимыми значениями даты
+new Date('23/25/2014');
+</pre>
+
+<p>будет рассматриваться как местная дата 25 ноября 2015 года в Firefox 30 и как недопустимая дата в Safari 7. Однако, если строка распознана как строка в формате ISO и она содержит недопустимые значения, метод вернёт {{jsxref("Global_Objects/NaN", "NaN")}} во всех браузерах, совместимых с ES5:</p>
+
+<pre class="brush: js">// Строка в формате ISO с недопустимыми значениями даты
+new Date('2014-25-23').toISOString();
+// вернёт "RangeError: invalid date" во всех браузерах, совместимых с ES5
+</pre>
+
+<p>Реализация эвристики SpiderMonkey может быть найдена в файле <a href="http://mxr.mozilla.org/mozilla-central/source/js/src/jsdate.cpp?rev=64553c483cd1#889"><code>jsdate.cpp</code></a>. Строка <code>"10 06 2014"</code> является примером не подходящей под формат ISO и поэтому её разбор откатывается на пользовательскую подпрограмму. Так же смотрите эту <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1023155#c6">грубую схему</a> работы разбора строки.</p>
+
+<pre class="brush: js">new Date('10 06 2014');
+</pre>
+
+<p>будет рассматриваться как местная дата 6 октября 2014 года, а не 10 июня 2014 года. Другие примеры:</p>
+
+<pre class="brush: js">new Date('foo-bar 2014').toString();
+// вернёт: "Invalid Date"
+
+Date.parse('foo-bar 2014');
+// вернёт: NaN
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_parse" name="Example:_Using_parse">Пример: использование метода <code>Date.parse()</code></h3>
+
+<p>Если переменная <code>IPOdate</code> содержит существующий объект {{jsxref("Global_Objects/Date", "Date")}}, она может быть установлена в 9 августа 1995 года (по местному времени) следующим способом:</p>
+
+<pre class="brush: js">IPOdate.setTime(Date.parse('Aug 9, 1995'));</pre>
+
+<p>Ещё несколько примеров разбора нестандартных строк с датами:</p>
+
+<pre class="brush: js">Date.parse('Aug 9, 1995');</pre>
+
+<p>Вернёт <code>807937200000</code> в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.</p>
+
+<pre class="brush: js">Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');</pre>
+
+<p>Вернёт <code>807926400000</code> вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).</p>
+
+<pre class="brush: js">Date.parse('Wed, 09 Aug 1995 00:00:00');</pre>
+
+<p>Вернёт <code>807937200000</code> в часовом поясе GMT-0300, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то часовой пояс по умолчанию равен местному часовому поясу.</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');</pre>
+
+<p>Вернёт <code>0</code> вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00');</pre>
+
+<p>Вернёт <code>14400000</code> в часовом поясе GMT-0400, и другие значения в других часовых поясах, так как поскольку строка не определяет часовой пояс и не находится в формате ISO, то используется местный часовой пояс.</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');</pre>
+
+<p>Вернёт <code>14400000</code> вне зависимости от местного часового пояса, поскольку предоставлен спецификатор GMT (всемирное координированное время).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.4.2', 'Date.parse')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Добавлен формат ISO 8601.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.parse', 'Date.parse')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Формат ISO 8601</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckodesktop("2.0")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Формат ISO 8601</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.UTC()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/prototype/index.html b/files/ru/web/javascript/reference/global_objects/date/prototype/index.html
new file mode 100644
index 0000000000..6a3bb3c62b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/prototype/index.html
@@ -0,0 +1,228 @@
+---
+title: Date.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Date/prototype
+tags:
+ - Date
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Date
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>Date.prototype</code></strong> представляет прототип конструктора {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 1)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Все экземпляры {{jsxref("Global_Objects/Date", "Date")}} наследуются от <code>Date.prototype</code>. Объект прототипа конструктора {{jsxref("Global_Objects/Date", "Date")}} может быть изменён для затрагивания всех экземпляров объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<p>Для совместимости с вычислениями тысячелетия (другими словами, для учёта 2000 года), вы всегда должны указывать полный год; например, использовать число 1998, а не 98. Чтобы помочь вам определить полный год, JavaScript включает методы {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}}, {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}}, {{jsxref("Date.prototype.getUTCFullYear()", "getUTCFullYear()")}} и {{jsxref("Date.prototype.setUTCFullYear()", "setUTCFullYear()")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>Date.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создавшую этот экземпляр объекта. По умолчанию ей является объект {{jsxref("Global_Objects/Date", "Date")}}.</dd>
+</dl>
+
+<div>{{jsOverrides("Object", "properties", "constructor")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<h3 id="Getter" name="Getter">Получения значения</h3>
+
+<dl>
+ <dt>{{jsxref("Date.prototype.getDate()")}}</dt>
+ <dd>Возвращает день месяца (1-31) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getDay()")}}</dt>
+ <dd>Возвращает день недели (0-6) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getFullYear()")}}</dt>
+ <dd>Возвращает год (4 цифры для 4-х значного года) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getHours()")}}</dt>
+ <dd>Возвращает часы (0-23) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getMilliseconds()")}}</dt>
+ <dd>Возвращает миллисекунды (0-999) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getMinutes()")}}</dt>
+ <dd>Возвращает минуты (0-59) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getMonth()")}}</dt>
+ <dd>Возвращает месяц (0-11) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getSeconds()")}}</dt>
+ <dd>Возвращает секунды (0-59) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getTime()")}}</dt>
+ <dd>Возвращает числовое значение указанной даты как количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC (отрицательное значение для даты до этого момента).</dd>
+ <dt>{{jsxref("Date.prototype.getTimezoneOffset()")}}</dt>
+ <dd>Возвращает смещение часового пояса в минутах для текущей локали.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCDate()")}}</dt>
+ <dd>Возвращает день месяца (1-31) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCDay()")}}</dt>
+ <dd>Возвращает день недели (0-6) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCFullYear()")}}</dt>
+ <dd>Возвращает год (4 цифры для 4-х значного года) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCHours()")}}</dt>
+ <dd>Возвращает часы (0-23) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCMilliseconds()")}}</dt>
+ <dd>Возвращает миллисекунды (0-999) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCMinutes()")}}</dt>
+ <dd>Возвращает минуты (0-59) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCMonth()")}}</dt>
+ <dd>Возвращает месяц (0-11) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getUTCSeconds()")}}</dt>
+ <dd>Возвращает секунды (0-59) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.getYear()")}} {{deprecated_inline}}</dt>
+ <dd>Возвращает год (обычно 2-3 цифры) указанной даты по всемирному координированному времени. Вместо него используйте метод {{jsxref("Date.prototype.getFullYear()", "getFullYear()")}}.</dd>
+</dl>
+
+<h3 id="Setter" name="Setter">Установки значения</h3>
+
+<dl>
+ <dt>{{jsxref("Date.prototype.setDate()")}}</dt>
+ <dd>Устанавливает день месяца указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setFullYear()")}}</dt>
+ <dd>Устанавливает полный год (4 цифры для 4-х значного года) указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setHours()")}}</dt>
+ <dd>Устанавливает часы указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setMilliseconds()")}}</dt>
+ <dd>Устанавливает миллисекунды указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setMinutes()")}}</dt>
+ <dd>Устанавливает минуты указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setMonth()")}}</dt>
+ <dd>Устанавливает месяц указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setSeconds()")}}</dt>
+ <dd>Устанавливает секунды указанной даты по местному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setTime()")}}</dt>
+ <dd>Устанавливает объект {{jsxref("Global_Objects/Date", "Date")}} во время, представляемое количеством миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC (отрицательное значение устанавливает даты до этого момента).</dd>
+ <dt>{{jsxref("Date.prototype.setUTCDate()")}}</dt>
+ <dd>Устанавливает день месяца указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCFullYear()")}}</dt>
+ <dd>Устанавливает полный год (4 цифры для 4-х значного года) указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCHours()")}}</dt>
+ <dd>Устанавливает часы указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCMilliseconds()")}}</dt>
+ <dd>Устанавливает миллисекунды указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCMinutes()")}}</dt>
+ <dd>Устанавливает минуты указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCMonth()")}}</dt>
+ <dd>Устанавливает месяц указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setUTCSeconds()")}}</dt>
+ <dd>Устанавливает секунды указанной даты по всемирному координированному времени.</dd>
+ <dt>{{jsxref("Date.prototype.setYear()")}} {{deprecated_inline}}</dt>
+ <dd>Устанавливает год (обычно 2-3 цифры) указанной даты по всемирному координированному времени. Вместо него используйте метод {{jsxref("Date.prototype.setFullYear()", "setFullYear()")}}.</dd>
+</dl>
+
+<h3 id="Conversion_getter" name="Conversion_getter">Получения преобразованного значения</h3>
+
+<dl>
+ <dt>{{jsxref("Date.prototype.toDateString()")}}</dt>
+ <dd>Возвращает часть, содержащую только дату объекта {{jsxref("Global_Objects/Date", "Date")}} в качестве человеко-читаемой строки.</dd>
+ <dt>{{jsxref("Date.prototype.toISOString()")}}</dt>
+ <dd>Преобразует дату в строку, следуя расширенному формату ISO 8601.</dd>
+ <dt>{{jsxref("Date.prototype.toJSON()")}}</dt>
+ <dd>Возвращает строку, представляющую объект {{jsxref("Global_Objects/Date", "Date")}}, используя метод {{jsxref("Date.prototype.toISOString()", "toISOString()")}}. Предназначен для использования методом {{jsxref("JSON.stringify()")}}.</dd>
+ <dt>{{jsxref("Date.prototype.toGMTString()")}} {{deprecated_inline}}</dt>
+ <dd>Возвращает строку, представляющую объект {{jsxref("Global_Objects/Date", "Date")}}, на основе часового пояса GMT (всемирное время). Вместо него используйте метод {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}}.</dd>
+ <dt>{{jsxref("Date.prototype.toLocaleDateString()")}}</dt>
+ <dd>Возвращает строку с датой, чьё представление зависит от системных настроек локали.</dd>
+ <dt>{{jsxref("Date.prototype.toLocaleFormat()")}} {{non-standard_inline}}</dt>
+ <dd>Преобразует дату в строку, используя строку форматирования.</dd>
+ <dt>{{jsxref("Date.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает строку, чьё представление зависит от настроек локали. Переопределяет метод {{jsxref("Object.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("Date.prototype.toLocaleTimeString()")}}</dt>
+ <dd>Возвращает строку со временем, чьё представление зависит от системных настроек локали.</dd>
+ <dt>{{jsxref("Date.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает строковое представление исходного кода эквивалентного объекта {{jsxref("Global_Objects/Date", "Date")}}; вы можете использовать это значение для создания нового объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Date.prototype.toString()")}}</dt>
+ <dd>Возвращает строковое представление указанного объекта {{jsxref("Global_Objects/Date", "Date")}}. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("Date.prototype.toTimeString()")}}</dt>
+ <dd>Возвращает часть, содержащую только время объекта {{jsxref("Global_Objects/Date", "Date")}} в качестве человеко-читаемой строки.</dd>
+ <dt>{{jsxref("Date.prototype.toUTCString()")}}</dt>
+ <dd>Преобразует дату в строку, используя часовой пояс UTC.</dd>
+ <dt>{{jsxref("Date.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение объекта {{jsxref("Global_Objects/Date", "Date")}}. Переопределяет метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
+</dl>
+
+<div>{{jsOverrides("Object", "methods", "getDate", "getDay", "getFullYear", "getHours", "getMilliseconds", "getMinutes", "getMonth", "getSeconds", "getTime", "getTimezoneOffset", "getUTCDate", "getUTCDay", "getUTCFullYear", "getUTCHours", "getUTCMilliseconds", "getUTCMinutes", "getUTCMonth", "getUTCSeconds", "getYear", "setdate", "setFullYear", "setHours", "setMilliseconds", "setMinutes", "setMontth", "setSeconds", "setTime", "setUTCDate", "setUTCFullYear", "setUTCHours", "setUTCMilliseconds", "setUTCMinutes", "setUTCMonth", "setUTCSeconds", "setYear", "toDateString", "toGMTString", "toLocaleDateString", "toLocaleFormat", "toLocaleString", "toLocaleTimeString", "toSource", "toString", "toTimeString", "toUTCString", "valueOf")}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5', 'Date.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-the-date-prototype-object', 'Date.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setdate/index.html b/files/ru/web/javascript/reference/global_objects/date/setdate/index.html
new file mode 100644
index 0000000000..0fd3f1c9b0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setdate/index.html
@@ -0,0 +1,84 @@
+---
+title: Date.prototype.setDate()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setDate
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setDate
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>setDate()</code></strong> устанавливает день месяца указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setDate(<var>dayValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>dayValue</code></dt>
+ <dd>Целое число, представляющее номер дня в месяце.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>В результате выполнения функция setDate() изменяет текущий объект ({{jsxref("Date")}}) и возвращает количество миллисекунд от начала эпохи (1 января 1970 00:00:00 UTC) для полученного значения объекта.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если значение параметра <code>dayValue</code> будет выходить за пределы количества дней для месяца, метод <code>setDate()</code> соответственно обновит объект {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>dayValue</code> передать значение 0, дата будет установлена в последний день предыдущего месяца.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setDate" name="Example:_Using_setDate">Пример: использование метода <code>setDate()</code></h3>
+
+<pre class="brush: js">var theBigDay = new Date(1962, 6, 7); // 1962-07-07
+theBigDay.setDate(24); // 1962-07-24
+theBigDay.setDate(32); // 1962-08-01
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.36', 'Date.prototype.setDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div> </div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Date.setDate")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getDate()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setfullyear/index.html b/files/ru/web/javascript/reference/global_objects/date/setfullyear/index.html
new file mode 100644
index 0000000000..a0022b73cc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setfullyear/index.html
@@ -0,0 +1,136 @@
+---
+title: Date.prototype.setFullYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setFullYear
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setFullYear
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>setFullYear()</code></strong> устанавливает полный год указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setFullYear(<var>yearValue</var>[, <var>monthValue</var>[, <var>dayValue</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>yearValue</code></dt>
+ <dd>Целое число, определяющее значение года, например, 1995.</dd>
+ <dt><code>monthValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 11, представляющее месяцы от января до декабря.</dd>
+ <dt><code>dayValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 1 до 31, представляющее день месяца. Если вы определите параметр <code>dayValue</code>, вы также должны определить параметр <code>monthValue</code>.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns" style="line-height: 24px; font-size: 1.71428571428571rem;">Возвращаемое значение</h3>
+
+<p>Текущее время в милисекундах для нового значения даты — такое же значение как и у метода {{jsxref("Date.prototype.getTime()", "getTime()")}} для текущего объекта <strong>после</strong> вызова <code style="font-style: normal;">setFullYear()</code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если вы не определите значения параметров <code>monthValue</code> и <code>dayValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getMonth()", "getMonth()")}} и {{jsxref("Date.prototype.getDate()", "getDate()")}}.</p>
+
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setFullYear()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>monthValue</code> передать значение 15, год увеличится на 1 (<code>yearValue + 1</code>), а в качестве месяца будет использоваться значение 3.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setFullYear" name="Example:_Using_setFullYear">Пример: использование метода <code>setFullYear()</code></h3>
+
+<pre class="brush:js">var theBigDay = new Date();
+theBigDay.setFullYear(1997);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.40', 'Date.prototype.setFullYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setfullyear', 'Date.prototype.setFullYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/sethours/index.html b/files/ru/web/javascript/reference/global_objects/date/sethours/index.html
new file mode 100644
index 0000000000..8112970d7b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/sethours/index.html
@@ -0,0 +1,125 @@
+---
+title: Date.prototype.setHours()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setHours
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setHours
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setHours()</code></strong> устанавливает часы указанной даты по местному времени и возвращает количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC до времени, представляемого обновлённым экземпляром {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setHours(<var>hoursValue</var>[, <var>minutesValue</var>[, <var>secondsValue</var>[, <var>msValue</var>]]])</code></pre>
+
+<h3 id="Версия_до_JavaScript_1.3">Версия до JavaScript 1.3</h3>
+<pre class="syntaxbox"><code><var>dateObj</var>.setHours(<var>hoursValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>hoursValue</code></dt>
+ <dd>Целое число от 0 до 23, представляющее часы.</dd>
+ <dt><code>minutesValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее минуты.</dd>
+ <dt><code>secondsValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр <code>secondsValue</code>, вы также должны определить параметр <code>minutesValue</code>.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр <code>msValue</code>, вы также должны определить параметры <code>minutesValue</code> и <code>secondsValue</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметров <code>minutesValue</code>, <code>secondsValue</code> и <code>msValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getMinutes()", "getMinutes()")}}, {{jsxref("Date.prototype.getSeconds()", "getSeconds()")}} и {{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setHours()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1 (<code>minutesValue + 1</code>), а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setHours" name="Example:_Using_setHours">Пример: использование метода <code>setHours()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setHours(7);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.34', 'Date.prototype.setHours')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.sethours', 'Date.prototype.setHours')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getHours()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCHours()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setmilliseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/setmilliseconds/index.html
new file mode 100644
index 0000000000..fb380ec0c8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setmilliseconds/index.html
@@ -0,0 +1,115 @@
+---
+title: Date.prototype.setMilliseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMilliseconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setMilliseconds()</code></strong> устанавливает миллисекунды указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setMilliseconds(<var>millisecondsValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>millisecondsValue</code></dt>
+ <dd>Целое число от 0 до 999, представляющее миллисекунды.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если значение параметра <code>millisecondsValue</code> будет выходить за пределы ожидаемого диапазона, метод <code>setMilliseconds()</code> соответственно обновит объект {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>millisecondsValue</code> передать значение 1005, количество секунд увеличится на 1, а в качестве миллисекунд будет использоваться значение 5.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setMilliseconds" name="Example:_Using_setMilliseconds">Пример: использование метода <code>setMilliseconds()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setMilliseconds(100);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.28', 'Date.prototype.setMilliseconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setmilliseconds', 'Date.prototype.setMilliseconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getMilliseconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMilliseconds()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..3cf8647e14
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setminutes/index.html
@@ -0,0 +1,139 @@
+---
+title: Date.prototype.setMinutes()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setMinutes
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMinutes
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>setMinutes()</code></strong> устанавливает минуты указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setMinutes(<var>minutesValue</var>[, <var>secondsValue</var>[, <var>msValue</var>]])</code></pre>
+
+<h3 id="Версия_до_JavaScript_1.3">Версия до JavaScript 1.3</h3>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setMinutes(<var>minutesValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>minutesValue</code></dt>
+ <dd>Целое число от 0 до 59, представляющее минуты.</dd>
+ <dt><code>secondsValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр <code>secondsValue</code>, вы также должны определить параметр <code>minutesValue</code>.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр <code>msValue</code>, вы также должны определить параметры <code>minutesValue</code> и <code>secondsValue</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Количество миллисекунд между 1 января 1970 00:00:00 UTC и обновленной датой.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если вы не определите значения параметров <code>secondsValue</code> и <code>msValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getSeconds()", "getSeconds()")}} и {{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}}.</p>
+
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setMinutes()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1 (<code>minutesValue + 1</code>), а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setMinutes" name="Example:_Using_setMinutes">Пример: использование метода <code>setMinutes()</code></h3>
+
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setMinutes(45);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.32', 'Date.prototype.setMinutes')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setminutes', 'Date.prototype.setMinutes')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getMinutes()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMinutes()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setmonth/index.html b/files/ru/web/javascript/reference/global_objects/date/setmonth/index.html
new file mode 100644
index 0000000000..439476b7cc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setmonth/index.html
@@ -0,0 +1,121 @@
+---
+title: Date.prototype.setMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setMonth
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setMonth
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setMonth()</code></strong> устанавливает месяц указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setMonth(<var>monthValue</var>[, <var>dayValue</var>])</code></pre>
+
+<h3 id="Версия_до_JavaScript_1.3">Версия до JavaScript 1.3</h3>
+<pre class="syntaxbox"><code><var>dateObj</var>.setMonth(<var>monthValue</var>)</code></pre>
+
+<h3 id="Parameter" name="Parameter">Parameter</h3>
+<dl>
+ <dt><code>monthValue</code></dt>
+ <dd>Целое число от 0 до 11, представляющее месяцы от января до декабря.</dd>
+ <dt><code>dayValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 1 до 31, представляющее день месяца.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметра <code>dayValue</code>, будет использоваться значение, возвращаемое методом {{jsxref("Date.prototype.getDate()", "getDate()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setMonth()</code> попытается соответственно обновить другой параметр и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>monthValue</code> передать значение 15, год увеличится на 1, а в качестве месяца будет использоваться значение 3.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setMonth" name="Example:_Using_setMonth">Пример: использование метода <code>setMonth()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setMonth(6);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.38', 'Date.prototype.setMonth')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setmonth', 'Date.prototype.setMonth')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getMonth()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCMonth()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/setseconds/index.html
new file mode 100644
index 0000000000..789eb9d7e1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setseconds/index.html
@@ -0,0 +1,121 @@
+---
+title: Date.prototype.setSeconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setSeconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setSeconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setSeconds()</code></strong> устанавливает секунды указанной даты по местному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setSeconds(<var>secondsValue</var>[, <var>msValue</var>])</code></pre>
+
+<h3 id="Версия_до_JavaScript_1.3">Версия до JavaScript 1.3</h3>
+<pre class="syntaxbox"><code><var>dateObj</var>.setSeconds(<var>secondsValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>secondsValue</code></dt>
+ <dd>Целое число от 0 до 59, представляющее количество секунд.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Число от 0 до 999, представляющее количество миллисекунд.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметра <code>msValue</code>, будет использоваться значение, возвращаемое методом {{jsxref("Date.prototype.getMilliseconds()", "getMilliseconds()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setSeconds()</code> попытается соответственно обновить другой параметр и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1, а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setSeconds" name="Example:_Using_setSeconds">Пример: использование метода <code>setSeconds()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setSeconds(30);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.30', 'Date.prototype.setSeconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setseconds', 'Date.prototype.setSeconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getSeconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCSeconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/settime/index.html b/files/ru/web/javascript/reference/global_objects/date/settime/index.html
new file mode 100644
index 0000000000..ed30f8c6d5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/settime/index.html
@@ -0,0 +1,116 @@
+---
+title: Date.prototype.setTime()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setTime
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setTime
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setTime()</code></strong> устанавливает время объекта {{jsxref("Global_Objects/Date", "Date")}} в значение, представляемое количеством миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setTime(<var>timeValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>timeValue</code></dt>
+ <dd>Целое число, представляющее количеством миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Используя метод <code>setTime()</code>, можно присвоить дату и время другому объекту {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setTime" name="Example:_Using_setTime">Пример: использование метода <code>setTime()</code></h3>
+<pre class="brush: js">var theBigDay = new Date('July 1, 1999');
+var sameAsBigDay = new Date();
+sameAsBigDay.setTime(theBigDay.getTime());
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.27', 'Date.prototype.setTime')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.settime', 'Date.prototype.setTime')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getTime()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCHours()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcdate/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcdate/index.html
new file mode 100644
index 0000000000..7f42960c13
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcdate/index.html
@@ -0,0 +1,115 @@
+---
+title: Date.prototype.setUTCDate()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCDate
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCDate()</code></strong> устанавливает день месяца указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCDate(<var>dayValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>dayValue</code></dt>
+ <dd>Целое число от 1 до 31, представляющее номер дня в месяце.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если значение параметра <code>dayValue</code> будет выходить за пределы количества дней для месяца, метод <code>setUTCDate()</code> попытается соответственно обновить объект {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>dayValue</code> передать значение 40, а текущий сохранённый в объекте {{jsxref("Global_Objects/Date", "Date")}} месяц равен июню, день будет изменён на 10, а месяц увеличится до июля.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCDate" name="Example:_Using_setUTCDate">Пример: использование метода <code>setUTCDate()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCDate(20);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.37', 'Date.prototype.setUTCDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcdate', 'Date.prototype.setUTCDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCDate()")}}</li>
+ <li>{{jsxref("Date.prototype.setDate()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcfullyear/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcfullyear/index.html
new file mode 100644
index 0000000000..4dbcfe0c7a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcfullyear/index.html
@@ -0,0 +1,120 @@
+---
+title: Date.prototype.setUTCFullYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCFullYear
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCFullYear()</code></strong> устанавливает полный год указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCFullYear(<var>yearValue</var>[, <var>monthValue</var>[, <var>dayValue</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>yearValue</code></dt>
+ <dd>Целое число, определяющее значение года, например, 1995.</dd>
+ <dt><code>monthValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 11, представляющее месяцы от января до декабря.</dd>
+ <dt><code>dayValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 1 до 31, представляющее день месяца. Если вы определите параметр <code>dayValue</code>, вы также должны определить параметр <code>monthValue</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметров <code>monthValue</code> и <code>dayValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getUTCMonth()", "getUTCMonth()")}} и {{jsxref("Date.prototype.getUTCDate()", "getUTCDate()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setUTCFullYear()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>monthValue</code> передать значение 15, год увеличится на 1 (<code>yearValue + 1</code>), а в качестве месяца будет использоваться значение 3.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCFullYear" name="Example:_Using_setUTCFullYear">Пример: использование метода <code>setUTCFullYear()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCFullYear(1997);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.41', 'Date.prototype.setUTCFullYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcfullyear', 'Date.prototype.setUTCFullYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setFullYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutchours/index.html b/files/ru/web/javascript/reference/global_objects/date/setutchours/index.html
new file mode 100644
index 0000000000..333120ab9b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutchours/index.html
@@ -0,0 +1,122 @@
+---
+title: Date.prototype.setUTCHours()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCHours
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCHours()</code></strong> устанавливает часы указанной даты по всемирному координированному времени и возвращает количество миллисекунд, прошедших с 1 января 1970 00:00:00 по UTC до времени, представляемого обновлённым экземпляром {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCHours(<var>hoursValue</var>[, <var>minutesValue</var>[, <var>secondsValue</var>[, <var>msValue</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>hoursValue</code></dt>
+ <dd>Целое число от 0 до 23, представляющее часы.</dd>
+ <dt><code>minutesValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее минуты.</dd>
+ <dt><code>secondsValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр <code>secondsValue</code>, вы также должны определить параметр <code>minutesValue</code>.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр <code>msValue</code>, вы также должны определить параметры <code>minutesValue</code> и <code>secondsValue</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметров <code>minutesValue</code>, <code>secondsValue</code> и <code>msValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getUTCMinutes()", "getUTCMinutes()")}}, {{jsxref("Date.prototype.getUTCSeconds()", "getUTCSeconds()")}} и {{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setUTCHours()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1 (<code>minutesValue + 1</code>), а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCHours" name="Example:_Using_setUTCHours">Пример: использование метода <code>setUTCHours()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCHours(8);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.35', 'Date.prototype.setUTCHours')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutchours', 'Date.prototype.setUTCHours')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCHours()")}}</li>
+ <li>{{jsxref("Date.prototype.setHours()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html
new file mode 100644
index 0000000000..ce32739425
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcmilliseconds/index.html
@@ -0,0 +1,115 @@
+---
+title: Date.prototype.setUTCMilliseconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMilliseconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCMilliseconds()</code></strong> устанавливает миллисекунды указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCMilliseconds(<var>millisecondsValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>millisecondsValue</code></dt>
+ <dd>Целое число от 0 до 999, представляющее миллисекунды.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если значение параметра <code>millisecondsValue</code> будет выходить за пределы ожидаемого диапазона, метод <code>setUTCMilliseconds()</code> попытается соответственно обновить объект {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>millisecondsValue</code> передать значение 1100, количество секунд увеличится на 1, а в качестве миллисекунд будет использоваться значение 100.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCMilliseconds" name="Example:_Using_setUTCMilliseconds">Пример: использование метода <code>setUTCMilliseconds()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCMilliseconds(500);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.29', 'Date.prototype.setUTCMilliseconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcmilliseconds', 'Date.prototype.setUTCMilliseconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMilliseconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setMilliseconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcminutes/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcminutes/index.html
new file mode 100644
index 0000000000..ab55814ccd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcminutes/index.html
@@ -0,0 +1,120 @@
+---
+title: Date.prototype.setUTCMinutes()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMinutes
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCMinutes()</code></strong> устанавливает минуты указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCMinutes(<var>minutesValue</var>[, <var>secondsValue</var>[, <var>msValue</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>minutesValue</code></dt>
+ <dd>Целое число от 0 до 59, представляющее минуты.</dd>
+ <dt><code>secondsValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 59, представляющее секунды. Если вы определите параметр <code>secondsValue</code>, вы также должны определить параметр <code>minutesValue</code>.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 0 до 999, представляющее миллисекунды. Если вы определите параметр <code>msValue</code>, вы также должны определить параметры <code>minutesValue</code> и <code>secondsValue</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметров <code>secondsValue</code> и <code>msValue</code>, будут использоваться значения, возвращаемые методами {{jsxref("Date.prototype.getUTCSeconds()", "getUTCSeconds()")}} и {{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setUTCMinutes()</code> попытается соответственно обновить другие параметры и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1 (<code>minutesValue + 1</code>), а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCMinutes" name="Example:_Using_setUTCMinutes">Пример: использование метода <code>setUTCMinutes()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCMinutes(43);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.33', 'Date.prototype.setUTCMinutes')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcminutes', 'Date.prototype.setUTCMinutes')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMinutes()")}}</li>
+ <li>{{jsxref("Date.prototype.setMinutes()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcmonth/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcmonth/index.html
new file mode 100644
index 0000000000..5dae100c2d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcmonth/index.html
@@ -0,0 +1,118 @@
+---
+title: Date.prototype.setUTCMonth()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCMonth
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCMonth()</code></strong> устанавливает месяц указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCMonth(<var>monthValue</var>[, <var>dayValue</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>monthValue</code></dt>
+ <dd>Целое число от 0 до 11, представляющее месяцы от января до декабря.</dd>
+ <dt><code>dayValue</code></dt>
+ <dd>Необязательный параметр. Целое число от 1 до 31, представляющее день месяца.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметра <code>dayValue</code>, будет использоваться значение, возвращаемое методом {{jsxref("Date.prototype.getUTCDate()", "getUTCDate()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setUTCMonth()</code> попытается соответственно обновить другой параметр и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>monthValue</code> передать значение 15, год увеличится на 1, а в качестве месяца будет использоваться значение 3.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCMonth" name="Example:_Using_setUTCMonth">Пример: использование метода <code>setUTCMonth()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCMonth(11);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.39', 'Date.prototype.setUTCMonth')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcmonth', 'Date.prototype.setUTCMonth')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCMonth()")}}</li>
+ <li>{{jsxref("Date.prototype.setMonth()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setutcseconds/index.html b/files/ru/web/javascript/reference/global_objects/date/setutcseconds/index.html
new file mode 100644
index 0000000000..8fe93a7d8d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setutcseconds/index.html
@@ -0,0 +1,118 @@
+---
+title: Date.prototype.setUTCSeconds()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setUTCSeconds
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>setUTCSeconds()</code></strong> устанавливает секунды указанной даты по всемирному координированному времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.setUTCSeconds(<var>secondsValue</var>[, <var>msValue</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>secondsValue</code></dt>
+ <dd>Целое число от 0 до 59, представляющее количество секунд.</dd>
+ <dt><code>msValue</code></dt>
+ <dd>Необязательный параметр. Число от 0 до 999, представляющее количество миллисекунд.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если вы не определите значения параметра <code>msValue</code>, будет использоваться значение, возвращаемое методом {{jsxref("Date.prototype.getUTCMilliseconds()", "getUTCMilliseconds()")}}.</p>
+<p>Если значение определяемого параметра будет выходить за пределы ожидаемого диапазона, метод <code>setUTCSeconds()</code> попытается соответственно обновить другой параметр и информацию о дате в объекте {{jsxref("Global_Objects/Date", "Date")}}. Например, если в качестве <code>secondsValue</code> передать значение 100, минуты увеличатся на 1, а в качестве секунд будет использоваться значение 40.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setUTCSeconds" name="Example:_Using_setUTCSeconds">Пример: использование метода <code>setUTCSeconds()</code></h3>
+<pre class="brush: js">var theBigDay = new Date();
+theBigDay.setUTCSeconds(20);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.31', 'Date.prototype.setUTCSeconds')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setutcseconds', 'Date.prototype.setUTCSeconds')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCSeconds()")}}</li>
+ <li>{{jsxref("Date.prototype.setSeconds()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/setyear/index.html b/files/ru/web/javascript/reference/global_objects/date/setyear/index.html
new file mode 100644
index 0000000000..d3127e4bf0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/setyear/index.html
@@ -0,0 +1,87 @@
+---
+title: Date.prototype.setYear()
+slug: Web/JavaScript/Reference/Global_Objects/Date/setYear
+tags:
+ - Date
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setYear
+---
+<div>{{JSRef("Global_Objects", "Date")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>setYear()</code></strong> устанавливает год указанной даты по местному времени. Поскольку метод <code>setYear()</code> не устанавливает полный год («проблема 2000 года»), он больше не используется и был заменён методом {{jsxref("Date.prototype.setFullYear", "setFullYear()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setYear(<var>yearValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>yearValue</code></dt>
+ <dd>Целое число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если параметр <code>yearValue</code> является числом в диапазоне от 0 до 99 (включительно), год объекта <code>dateObj</code> устанавливается в <code>1900 + yearValue</code>. В противном случае год объекта <code>dateObj</code> устанавливается в <code>yearValue</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_setYear" name="Example:_Using_setYear">Пример: использование метода <code>setYear()</code></h3>
+
+<p>Первые две строки устанавливают год в 1996. Третья строка устанавливает год в 2000.</p>
+
+<pre class="brush: js">var theBigDay = new Date();
+
+theBigDay.setYear(96);
+theBigDay.setYear(1996);
+theBigDay.setYear(2000);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-B.2.5', 'Date.prototype.getYear')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определён в (информативном) приложении по совместимости.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setyear', 'Date.prototype.getYear')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определён в (нормативном) приложении по дополнительным возможностям веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Date.setYear")}}</div>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setFullYear()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCFullYear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/todatestring/index.html b/files/ru/web/javascript/reference/global_objects/date/todatestring/index.html
new file mode 100644
index 0000000000..c36b9f6929
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/todatestring/index.html
@@ -0,0 +1,113 @@
+---
+title: Date.prototype.toDateString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toDateString
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toDateString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toDateString()</code></strong> возвращает часть, содержащую только дату объекта {{jsxref("Global_Objects/Date", "Date")}} в виде человеко-читаемой строки на американском английском.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toDateString()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Экземпляры объекта {{jsxref("Global_Objects/Date", "Date")}} ссылаются на определённый момент времени. Вызов метода {{jsxref("Date.prototype.toString()", "toString()")}} вернёт дату, отформатированную в виде человеко-читаемой строки на американском английском. В <a href="/ru/docs/SpiderMonkey">SpiderMonkey</a> она состоит из части, содержищей дату (день, месяц и год) и следующей за ней части, содержащей время (часы, минуты, секунды и часовой пояс). Иногда желательно получить строку, содержащую только часть с датой; этого можно достигнуть использованием метода <code>toDateString()</code>.</p>
+<p>Метод <code>toDateString()</code> полезен тем, что совместимые движки, реализующие <a href="/ru/docs/ECMAScript">ECMA-262</a> могут давать разные строки с помощью метода {{jsxref("Date.prototype.toString()", "toString()")}} объекта {{jsxref("Global_Objects/Date", "Date")}}, поскольку формат строки зависит от реализации и простой подход с разрезанием строки на дату и время может не всегда сработать.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_A_basic_usage_of_toDateString" name="Example:_A_basic_usage_of_toDateString">Пример: базовое использование метода <code>toDateString()</code></h3>
+<pre class="brush: js">var d = new Date(1993, 6, 28, 14, 39, 7);
+
+console.log(d.toString()); // напечатает Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
+console.log(d.toDateString()); // напечатает Wed Jul 28 1993
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.3', 'Date.prototype.toDateString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.todatestring', 'Date.prototype.toDateString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/togmtstring/index.html b/files/ru/web/javascript/reference/global_objects/date/togmtstring/index.html
new file mode 100644
index 0000000000..b10fb90ceb
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/togmtstring/index.html
@@ -0,0 +1,114 @@
+---
+title: Date.prototype.toGMTString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toGMTString
+tags:
+ - Date
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toGMTString
+---
+<div>{{JSRef("Global_Objects", "Date")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toGMTString()</code></strong> преобразует дату в строку, используя соглашения Среднего времени по Гринвичу (GMT) в Интернет. Точный формат значения, возвращаемого методом <code>toGMTString()</code> различается на разных платформах и браузерах, можно лишь сказать, что он представляет собой человеко-читаемую строку с датой.</p>
+<div class="note">
+ <p><strong>Примечание:</strong> метод <code>toGMTString()</code> устарел и не должен использоваться. Он оставлен только для обратной совместимости; пожалуйста, используйте вместо него метод {{jsxref("Date.prototype.toUTCString()", "toUTCString()")}}.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toGMTString()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toGMTString" name="Example:_Using_toGMTString">Пример: использование метода <code>toGMTString()</code></h3>
+<p>В этом примере метод <code>toGMTString()</code> преобразует дату в формат GMT (UTC), используя часовой пояс операционной системы и возвращает подобную строку. Точный формат зависит от платформы.</p>
+<pre class="brush: js">var today = new Date();
+var str = today.toGMTString(); // устарел! используйте метод toUTCString()
+
+console.log(str); // Mon, 18 Dec 1995 17:28:35 GMT
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение, но уже определён как устаревший. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-B.2.6', 'Date.prototype.toGMTString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определён в (информативном) приложении по совместимости.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.togmtstring', 'Date.prototype.toGMTString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определён в (нормативном) приложении по дополнительным возможностям веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toUTCString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/toisostring/index.html b/files/ru/web/javascript/reference/global_objects/date/toisostring/index.html
new file mode 100644
index 0000000000..347f326d0b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/toisostring/index.html
@@ -0,0 +1,143 @@
+---
+title: Date.prototype.toISOString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toISOString
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toISOString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toISOString()</code></strong> возвращает строку в формате ISO (<a href="https://ru.wikipedia.org/wiki/ISO_8601">расширенный формат ISO 8601</a>), который можно описать следующим образом: <strong><code>YYYY-MM-DDTHH:mm:ss.sssZ</code></strong>. Часовой пояс всегда равен UTC, что обозначено суффиксом <code>"Z"</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.toISOString()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toISOString" name="Example:_Using_toISOString">Пример: использование метода <code>toISOString()</code></h3>
+
+<pre class="brush: js">var today = new Date('05 October 2011 14:48 UTC');
+
+console.log(today.toISOString()); // вернёт 2011-10-05T14:48:00.000Z
+</pre>
+
+<p>Пример выше использует разбор нестандартного строкового значения, которое может разобраться некорректно в браузерах, отличных от Firefox.</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был стандартизирован в ECMA-262 5-го издания. Отсутствие этого метода в движках, которые не были обновлены для его поддержки, можно обойти следующей прокладкой:</p>
+
+<pre class="brush: js">if (!Date.prototype.toISOString) {
+ (function() {
+
+ function pad(number) {
+ if (number &lt; 10) {
+ return '0' + number;
+ }
+ return number;
+ }
+
+ Date.prototype.toISOString = function() {
+ return this.getUTCFullYear() +
+ '-' + pad(this.getUTCMonth() + 1) +
+ '-' + pad(this.getUTCDate()) +
+ 'T' + pad(this.getUTCHours()) +
+ ':' + pad(this.getUTCMinutes()) +
+ ':' + pad(this.getUTCSeconds()) +
+ '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) +
+ 'Z';
+ };
+
+ }());
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.43', 'Date.prototype.toISOString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.toisostring', 'Date.prototype.toISOString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toUTCString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tojson/index.html b/files/ru/web/javascript/reference/global_objects/date/tojson/index.html
new file mode 100644
index 0000000000..75ba90a661
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tojson/index.html
@@ -0,0 +1,107 @@
+---
+title: Date.prototype.toJSON()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toJSON
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toJSON
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toJSON()</code></strong> возвращает представление объекта {{jsxref("Global_Objects/Date", "Date")}} в виде {{Glossary("JSON")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toJSON()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Экземпляры объекта {{jsxref("Global_Objects/Date", "Date")}} ссылаются на определённый момент времени. Вызов метода <code>toJSON()</code> вернёт строку, отформатированную в JSON (при помощи метода {{jsxref("Date.prototype.toISOString()", "toISOString()")}}), представляющую значение объекта {{jsxref("Global_Objects/Date", "Date")}}. Этот метод, как правило, предназначен для сериализации объектов {{jsxref("Global_Objects/Date", "Date")}} в JSON.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toJSON" name="Example:_Using_toJSON">Пример: использование метода <code>toJSON()</code></h3>
+<pre class="brush:js">var jsonDate = (new Date()).toJSON();
+var backToDate = new Date(jsonDate);
+
+console.log('Сериализованный объект даты: ' + jsonDate);
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.44', 'Date.prototype.toJSON')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.tojson', 'Date.prototype.toJSON')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toUTCString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tolocaledatestring/index.html b/files/ru/web/javascript/reference/global_objects/date/tolocaledatestring/index.html
new file mode 100644
index 0000000000..86c6dd4d0d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tolocaledatestring/index.html
@@ -0,0 +1,226 @@
+---
+title: Date.prototype.toLocaleDateString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
+tags:
+ - Date
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toLocaleDateString()</code></strong> возвращает строку с языко-зависимым представлением части с датой в этой дате. Новые аргументы <code>locales</code> и <code>options</code> позволяют приложениям определять язык, чьи соглашения по форматированию должны использоваться, а также менять поведение этого метода. В старых реализациях, игнорирующих аргументы <code>locales</code> и <code>options</code>, используемая локаль и форма возвращённой строки целиком зависит от реализации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.toLocaleDateString([<var>locales</var> [, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Проверьте раздел <a href="#Browser_compatibility">Совместимость с браузерами</a>, чтобы увидеть, какие браузеры поддерживают аргументы <code>locales</code> и <code>options</code>, и <a href="#Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></a> для определения этой возможности.</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat', 'Parameters')}}</div>
+
+<p>Значением по умолчанию для каждой компоненты даты-времени является {{jsxref("Global_Objects/undefined", "undefined")}}, однако, если все свойства <code>weekday</code>, <code>year</code>, <code>month</code> и <code>day</code> равны {{jsxref("Global_Objects/undefined", "undefined")}}, то их значения предполагаются равными <code>"numeric"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleDateString" name="Example:_Using_toLocaleDateString">Пример: использование метода <code>toLocaleDateString()</code></h3>
+
+<p>При базовом использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// Вывод toLocaleDateString() без аргументов зависит от реализации,
+// локали по умолчанию и часового пояса по умолчанию
+console.log(date.toLocaleDateString());
+// → "12/11/2012", если код запущен с локалью en-US и часовым поясом America/Los_Angeles
+</pre>
+
+<h3 id="Example:_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></h3>
+
+<p>Аргументы <code>locales</code> и <code>options</code> поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:</p>
+
+<pre class="brush: js">function toLocaleDateStringSupportsLocales() {
+ try {
+ new Date().toLocaleDateString('i');
+ } catch (e) {
+ return e​.name === 'RangeError';
+ }
+ return false;
+}
+</pre>
+
+<h3 id="Example:_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Этот пример показывает некоторые локализованные форматы даты. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Форматирование ниже предполагает, что местный часовой пояс равен
+// America/Los_Angeles для локали США
+
+// В америкаском английском используется порядок месяц-день-год
+console.log(date.toLocaleDateString('en-US'));
+// → "12/19/2012"
+
+// В британском английском используется порядок день-месяц-год
+console.log(date.toLocaleDateString('en-GB'));
+// → "20/12/2012"
+
+// В корейском используется порядок год-месяц-день
+console.log(date.toLocaleDateString('ko-KR'));
+// → "2012. 12. 20."
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(date.toLocaleDateString('ar-EG'));
+// → "<span dir="rtl">٢٠‏/١٢‏/٢٠١٢</span>"
+
+// В Японии приложения могут захотеть использовать японский календарь,
+// в котором 2012 год являеся 24-м годом эры Хейсей
+console.log(date.toLocaleDateString('ja-JP-u-ca-japanese'));
+// → "24/12/20"
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(date.toLocaleDateString(['ban', 'id']));
+// → "20/12/2012"
+</pre>
+
+<h3 id="Example:_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Результат, предоставляемый методом <code>toLocaleDateString()</code>, может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Запрашиваем день недели вместе с длинным форматом даты
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(date.toLocaleDateString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// Приложение может захотеть использовать UTC и показать это
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(date.toLocaleDateString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+
+<p>При форматировании большого количества дат лучшим вариантом будет создание объекта {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} и использование функции, предоставляемой его свойством {{jsxref("DateTimeFormat.prototype.format", "format")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', 'sec-15.9.5.6', 'Date.prototype.toLocaleDateString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.tolocaledatestring', 'Date.prototype.toLocaleDateString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-13.3.2', 'Date.prototype.toLocaleDateString')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Определяет аргументы <code>locales</code> и <code>options</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatChrome("24")}} + поддержка временных зон, отличных от UTC</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>{{CompatNo}}<br>
+ {{bug(864843)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tolocaleformat/index.html b/files/ru/web/javascript/reference/global_objects/date/tolocaleformat/index.html
new file mode 100644
index 0000000000..af33b9da2f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tolocaleformat/index.html
@@ -0,0 +1,73 @@
+---
+title: Date.prototype.toLocaleFormat()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleFormat
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+translation_of: Archive/Web/JavaScript/Date.toLocaleFormat
+---
+<div>{{JSRef}} {{non-standard_header}}</div>
+
+<p>Нестандартный метод <strong><code>toLocaleFormat()</code></strong> преобразует дату в строку, используя указанное форматирование. Объект {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} является совместимой со стандартами альтернативой при форматировании дат. Так же смотрите новую версию метода {{jsxref("Date.prototype.toLocaleDateString()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.toLocaleFormat(<var>formatString</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>formatString</code></dt>
+ <dd>Строка формата в той же форме, что ожидается функцией C <a class="external" href="http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html"><code>strftime()</code></a>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>toLocaleFormat()</code> обеспечивает больший контроль программного обеспечения над форматированием генерируемых даты и/или времени. Названия месяцев и дней недели локализуются с помощью локали операционной системы. Однако, порядок дней и месяцев и другие задачи локализации автоматически не обрабатываются, так как эти аспекты контролируете вы. Вы должны позаботиться о том, что строка формата была правильно локализована в соответствии с настройками системы пользователя. Знайте, что используемая локаль не обязательно совпадает с локалью браузера.</p>
+
+<p>Разработчики расширений и XULRunner должны знать, что загрузку строки формата их файлов <code>.dtd</code> или <code>.properties</code> через URI <code>chrome://<em>somedomain</em>/locale/<em>somefile.ext</em></code> нужно <strong>избегать</strong>, поскольку файлы <code>.dtd</code>/<code>.properties</code> и метод <code>toLocaleFormat()</code> не обязательно используют одну и ту же локаль, из-за чего результат может выглядеть странно, неоднозначно или даже нечитаемо.</p>
+
+<p>Также обратите внимание, что поведение локали зависит от платформы и пользователь может настроить эту локаль, так что использование системной локали для выбора строки формата в некоторых случаях может быть даже неадекватным. Вы можете рассмотреть возможность использования более общих методов <code>toLocale*</code> объекта {{jsxref("Global_Objects/Date", "Date")}}, либо написать свою собственную локализацию даты, используя для её отображения методы <code>get*</code> объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_toLocaleFormat" name="Example:_Using_toLocaleFormat">Пример: использование метода <code>toLocaleFormat()</code></h3>
+
+<pre class="brush: js">var today = new Date();
+var date = today.toLocaleFormat('%A, %B %e, %Y'); // плохой пример
+</pre>
+
+<p>В примере выше метод <code>toLocaleFormat()</code> возвращает строку вида "Wednesday, October 3, 2007". обратите внимание, что строка формата в данном примере не локализуется должным образом, что приводит к проблемам, описанным выше.</p>
+
+<h2 id="Specifications" name="Specifications">Библиотеки</h2>
+
+<p>Вы можете использовать библиотеку <a href="https://github.com/abritinthebay/datejs/wiki/Format-Specifiers">DateJS</a>, если {{jsxref("Date.prototype.toLocaleDateString","Date.prototype.toLocaleDateString()")}} недоступен:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">if</span> <span class="punctuation token">(</span><span class="operator token">!</span><span class="class-name token">Date</span><span class="punctuation token">.</span>prototype<span class="punctuation token">.</span>toLocaleFormat<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="punctuation token">(</span><span class="keyword token">function</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="class-name token">Date</span><span class="punctuation token">.</span>prototype<span class="punctuation token">.</span><span class="function function-variable token">toLocaleFormat</span> <span class="operator token">=</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="parameter token">formatString</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> <span class="keyword token">this</span><span class="punctuation token">.</span><span class="function token">format</span><span class="punctuation token">(</span>formatString<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span></code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какой-либо спецификации. Реализована в JavaScript 1.6.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Date.toLocaleFormat")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tolocalestring/index.html b/files/ru/web/javascript/reference/global_objects/date/tolocalestring/index.html
new file mode 100644
index 0000000000..aff9e18a0a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tolocalestring/index.html
@@ -0,0 +1,233 @@
+---
+title: Date.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
+tags:
+ - Date
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toLocaleString()</code></strong> возвращает строку с языко-зависимым представлением даты. Новые аргументы <code>locales</code> и <code>options</code> позволяют приложениям определять язык, чьи соглашения по форматированию должны использоваться, а также менять поведение этого метода. В старых реализациях, игнорирующих аргументы <code>locales</code> и <code>options</code>, используемая локаль и форма возвращённой строки целиком зависит от реализации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.toLocaleString([<var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Проверьте раздел <a href="#Browser_compatibility">Совместимость с браузерами</a>, чтобы увидеть, какие браузеры поддерживают аргументы <code>locales</code> и <code>options</code>, и <a href="#Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></a> для определения этой возможности.</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat', 'Parameters')}}</div>
+
+<p>Значением по умолчанию для каждой компоненты даты-времени является {{jsxref("Global_Objects/undefined", "undefined")}}, однако, если все свойства <code>weekday</code>, <code>year</code>, <code>month</code>, <code>day</code>, <code>hour</code>, <code>minute</code> и <code>second</code> равны {{jsxref("Global_Objects/undefined", "undefined")}}, то их значения предполагаются равными <code>"numeric"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleString" name="Example:_Using_toLocaleString">Пример: использование метода <code>toLocaleString()</code></h3>
+
+<p>При базовом использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// Вывод toLocaleString() без аргументов зависит от реализации,
+// локали по умолчанию и часового пояса по умолчанию
+console.log(date.toLocaleString());
+// → "12/11/2012, 7:00:00 PM", если код запущен с локалью en-US и часовым поясом America/Los_Angeles
+</pre>
+
+<h3 id="Example:_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></h3>
+
+<p>Аргументы <code>locales</code> и <code>options</code> поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:</p>
+
+<pre class="brush: js">function toLocaleStringSupportsLocales() {
+ try {
+ new Date().toLocaleString('i');
+ } catch (e) {
+ return e​.name === 'RangeError';
+ }
+ return false;
+}
+</pre>
+
+<h3 id="Example:_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Этот пример показывает некоторые локализованные форматы даты и времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Форматирование ниже предполагает, что местный часовой пояс равен
+// America/Los_Angeles для локали США
+
+// В американском английском используется порядок месяц-день-год
+// и 12-часовой формат времени
+console.log(date.toLocaleString('en-US'));
+// → "12/19/2012, 7:00:00 PM"
+
+// В британском английском используется порядок день-месяц-год
+// и 24-часовой формат времени
+console.log(date.toLocaleString('en-GB'));
+// → "20/12/2012 03:00:00"
+
+// В корейском используется порядок год-месяц-день
+// и 12-часовой формат времени
+console.log(date.toLocaleString('ko-KR'));
+// → "2012. 12. 20. 오후 12:00:00"
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(date.toLocaleString('ar-EG'));
+// → "<span dir="rtl">٢٠‏/١٢‏/٢٠١٢ ٥:٠٠:٠٠ ص</span>"
+
+// В Японии приложения могут захотеть использовать японский календарь,
+// в котором 2012 год являеся 24-м годом эры Хейсей
+console.log(date.toLocaleString('ja-JP-u-ca-japanese'));
+// → "24/12/20 12:00:00"
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(date.toLocaleString(['ban', 'id']));
+// → "20/12/2012 11.00.00"
+</pre>
+
+<h3 id="Example:_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Результат, предоставляемый методом <code>toLocaleString()</code>, может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Запрашиваем день недели вместе с длинным форматом даты
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(date.toLocaleString('de-DE', options));
+// → "Donnerstag, 20. Dezember 2012"
+
+// Приложение может захотеть использовать UTC и показать это
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(date.toLocaleString('en-US', options));
+// → "Thursday, December 20, 2012, GMT"
+
+// Иногда даже в США нужен 24-х часовой формат времени
+console.log(date.toLocaleString('en-US', { hour12: false }));
+// → "12/19/2012, 19:00:00"
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+
+<p>При форматировании большого количества дат лучшим вариантом будет создание объекта {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} и использование функции, предоставляемой его свойством {{jsxref("DateTimeFormat.prototype.format", "format")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', 'sec-15.9.5.5', 'Date.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-13.3.1', 'Date.prototype.toLocaleDateString')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Определяет аргументы <code>locales</code> и <code>options</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>{{CompatNo}}<br>
+ {{bug(864843)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tolocaletimestring/index.html b/files/ru/web/javascript/reference/global_objects/date/tolocaletimestring/index.html
new file mode 100644
index 0000000000..733b0fb49c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tolocaletimestring/index.html
@@ -0,0 +1,203 @@
+---
+title: Date.prototype.toLocaleTimeString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString
+tags:
+ - Date
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toLocaleTimeString()</code></strong> возвращает строку с языко-зависимым представлением части со временем в этой дате. Новые аргументы <code>locales</code> и <code>options</code> позволяют приложениям определять язык, чьи соглашения по форматированию должны использоваться, а также менять поведение этого метода. В старых реализациях, игнорирующих аргументы <code>locales</code> и <code>options</code>, используемая локаль и форма возвращённой строки целиком зависит от реализации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toLocaleTimeString([<var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Проверьте раздел <a href="#Browser_compatibility">Совместимость с браузерами</a>, чтобы увидеть, какие браузеры поддерживают аргументы <code>locales</code> и <code>options</code>, и <a href="#Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></a> для определения этой возможности.</p>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat', 'Parameters')}}</div>
+<p>Значением по умолчанию для каждой компоненты даты-времени является {{jsxref("Global_Objects/undefined", "undefined")}}, однако, если все свойства <code>hour</code>, <code>minute</code> и <code>second</code> равны {{jsxref("Global_Objects/undefined", "undefined")}}, то их значения предполагаются равными <code>"numeric"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleTimeString" name="Example:_Using_toLocaleTimeString">Пример: использование метода <code>toLocaleTimeString()</code></h3>
+<p>При базовом использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.</p>
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 12, 3, 0, 0));
+
+// Вывод toLocaleTimeString() без аргументов зависит от реализации,
+// локали по умолчанию и часового пояса по умолчанию
+console.log(date.toLocaleTimeString());
+// → "7:00:00 PM", если код запущен с локалью en-US и часовым поясом America/Los_Angeles
+</pre>
+
+<h3 id="Example:_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></h3>
+<p>Аргументы <code>locales</code> и <code>options</code> поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:</p>
+<pre class="brush: js">function toLocaleTimeStringSupportsLocales() {
+ try {
+ new Date().toLocaleTimeString('i');
+ } catch (e) {
+ return e​.name === 'RangeError';
+ }
+ return false;
+}
+</pre>
+
+<h3 id="Example:_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+<p>Этот пример показывает некоторые локализованные форматы времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Форматирование ниже предполагает, что местный часовой пояс равен
+// America/Los_Angeles для локали США
+
+// В америкаском английском используется 12-часовой формат времени
+console.log(date.toLocaleTimeString('en-US'));
+// → "7:00:00 PM"
+
+// В британском английском используется 24-часовой формат времени
+console.log(date.toLocaleTimeString('en-GB'));
+// → "03:00:00"
+
+// В корейском используется 12-часовой формат времени
+console.log(date.toLocaleTimeString('ko-KR'));
+// → "오후 12:00:00"
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(date.toLocaleTimeString('ar-EG'));
+// → "<span dir="rtl">٧:٠٠:٠٠ م</span>"
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(date.toLocaleTimeString(['ban', 'id']));
+// → "11.00.00"
+</pre>
+
+<h3 id="Example:_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+<p>Результат, предоставляемый методом <code>toLocaleTimeString()</code>, может быть настроен с помощью аргумента <code>options</code>:</p>
+<pre class="brush: js">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Приложение может захотеть использовать UTC и показать это
+var options = { timeZone: 'UTC', timeZoneName: 'short' };
+console.log(date.toLocaleTimeString('en-US', options));
+// → "3:00:00 AM GMT"
+
+// Иногда даже в США нужен 24-х часовой формат времени
+console.log(date.toLocaleTimeString('en-US', { hour12: false }));
+// → "19:00:00"
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+<p>При форматировании большого количества дат лучшим вариантом будет создание объекта {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} и использование функции, предоставляемой его свойством {{jsxref("DateTimeFormat.prototype.format", "format")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.7', 'Date.prototype.toLocaleTimeString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.tolocalestring', 'Date.prototype.toLocaleTimeString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-13.3.3', 'Date.prototype.toLocaleDateString')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Определяет аргументы <code>locales</code> и <code>options</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug(864843)}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tosource/index.html b/files/ru/web/javascript/reference/global_objects/date/tosource/index.html
new file mode 100644
index 0000000000..34f9182296
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tosource/index.html
@@ -0,0 +1,93 @@
+---
+title: Date.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toSource
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toSource
+---
+<div>{{JSRef("Global_Objects", "Date")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toSource()</code></strong> возвращает строковое представление исходного кода объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toSource()
+Date.toSource()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toSource()</code> возвращает следующие значения:</p>
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Date", "Date")}} метод <code>toSource()</code> возвращает следующую строку, указывающую, что исходный код объекта недоступен:
+<pre class="brush: js">function Date() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров {{jsxref("Global_Objects/Date", "Date")}}, метод <code>toSource()</code> возвращает строку, представляющую их исходный код.</li>
+</ul>
+<p>Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/tostring/index.html b/files/ru/web/javascript/reference/global_objects/date/tostring/index.html
new file mode 100644
index 0000000000..321a941ea9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/tostring/index.html
@@ -0,0 +1,118 @@
+---
+title: Date.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toString
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toString()</code></strong> возвращает строковое представление указанного объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toString()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Global_Objects/Date", "Date")}} переопределяет метод <code>toString()</code>, унаследованный из объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString()")}}. Для объектов {{jsxref("Global_Objects/Date", "Date")}} метод <code>toString()</code> возвращает строковое представление объекта.</p>
+<p>Метод <code>toString()</code> всегда возвращает строковое представление даты на американском английском.</p>
+<p>JavaScript вызывает метод <code>toString()</code> автоматически, когда дата представляется как текст, или когда дата участвует в конкатенации строк.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toString" name="Example:_Using_toString">Пример: использование метода <code>toString()</code></h3>
+<p>В следующем примере переменной <code>myVar</code> присваевается значение, возвращённое методом <code>toString()</code> объекта {{jsxref("Global_Objects/Date", "Date")}}:</p>
+<pre class="brush: js">var x = new Date();
+myVar = x.toString(); // присваивает переменной myVar значение вроде:
+// Mon Sep 28 1998 14:36:22 GMT-0700 (Pacific Daylight Time)
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.2', 'Date.prototype.toLocaleTimeString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.tostring', 'Date.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+ <li>{{jsxref("Date.prototype.toDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toTimeString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/totimestring/index.html b/files/ru/web/javascript/reference/global_objects/date/totimestring/index.html
new file mode 100644
index 0000000000..f101bc29dc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/totimestring/index.html
@@ -0,0 +1,77 @@
+---
+title: Date.prototype.toTimeString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toTimeString
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toTimeString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toTimeString()</code></strong> возвращает часть, содержащую только время объекта {{jsxref("Global_Objects/Date", "Date")}} в виде человеко-читаемой строки на американском английском.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.toTimeString()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Экземпляры объекта {{jsxref("Global_Objects/Date", "Date")}} ссылаются на определённый момент времени. Вызов метода {{jsxref("Date.prototype.toString()", "toString()")}} вернёт дату, отформатированную в виде человеко-читаемой строки на американском английском. В <a href="/ru/docs/SpiderMonkey">SpiderMonkey</a> она состоит из части, содержищей дату (день, месяц и год) и следующей за ней части, содержащей время (часы, минуты, секунды и часовой пояс). Иногда желательно получить строку, содержащую только часть со временем; этого можно достигнуть использованием метода <code>toTimeString()</code>.</p>
+
+<p>Метод <code>toTimeString()</code> полезен тем, что совместимые движки, реализующие <a href="/ru/docs/ECMAScript">ECMA-262</a> могут давать разные строки с помощью метода {{jsxref("Date.prototype.toString()", "toString()")}} объекта {{jsxref("Global_Objects/Date", "Date")}}, поскольку формат строки зависит от реализации и простой подход с разрезанием строки на дату и время может не всегда сработать.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_A_basic_usage_of_toTimeString" name="Example:_A_basic_usage_of_toTimeString">Пример: базовое использование метода <code>toTimeString()</code></h3>
+
+<pre class="brush: js">var d = new Date(1993, 6, 28, 14, 39, 7);
+
+console.log(d.toString()); // напечатает Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)
+console.log(d.toTimeString()); // напечатает 14:39:07 GMT-0600 (PDT)
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.4', 'Date.prototype.toTimeString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.totimestring', 'Date.prototype.toTimeString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.toTimeString")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+ <li>{{jsxref("Date.prototype.toDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toString()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..60aecd9ece
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/toutcstring/index.html
@@ -0,0 +1,114 @@
+---
+title: Date.prototype.toUTCString()
+slug: Web/JavaScript/Reference/Global_Objects/Date/toUTCString
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/toUTCString
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toUTCString()</code></strong> преобразует дату в строку, используя часовой пояс UTC.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.toUTCString()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение, возвращаемое методом <code>toUTCString()</code>, является человеко-читаемой строкой в часовом поясе <abbr title="Всемирное координированное время">UTC</abbr>. Формат возвращаемого значения зависит от платформы. Наиболее растпространённым значением является форматированная по RFC-1123 временная метка, которая является немного обновлённой версией временной метки RFC-822.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toUTCString" name="Example:_Using_toUTCString">Пример: использование метода <code>toUTCString()</code></h3>
+<pre class="brush: js">var today = new Date();
+var UTCstring = today.toUTCString();
+// Mon, 03 Jul 2006 21:44:38 GMT
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.42', 'Date.prototype.toUTCString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.toutcstring', 'Date.prototype.toUTCString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toISOString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/utc/index.html b/files/ru/web/javascript/reference/global_objects/date/utc/index.html
new file mode 100644
index 0000000000..e05d187b79
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/utc/index.html
@@ -0,0 +1,123 @@
+---
+title: Date.UTC()
+slug: Web/JavaScript/Reference/Global_Objects/Date/UTC
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<p>Метод <strong><code>Date.UTC()</code></strong> принимает те же самые параметры, что и самая длинная форма конструктора {{jsxref("Global_Objects/Date", "Date")}} и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/date-utc.html")}}</div>
+
+
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<p> <strong>Начиная с  ECMAScript 2017:</strong></p>
+
+<pre class="syntaxbox">Date.UTC(<var>year</var>[, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minute</var>[, <var>second</var>[, <var>millisecond</var>]]]]]])</pre>
+
+<p><strong>ECMAScript 2016 и ранее: </strong>(<em>использование <code>month</code> обязательно</em>)</p>
+
+<pre class="syntaxbox"><code>Date.UTC(<var>year</var>, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minute</var>[, <var>second</var>[, <var>millisecond</var>]]]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>year</code></dt>
+ <dd>Год, полностью.</dd>
+ <dt><code>month</code></dt>
+ <dd>Целое число между <code>0</code> и <code>11</code>, представляющее месяц. (начиная с ES2017 необязательный параметр)</dd>
+ <dt><code>day</code> {{optional_inline}}</dt>
+ <dd>Целое число между <code>1</code> и <code>31</code>, представляющее дни месяца.</dd>
+ <dt><code>hour</code> {{optional_inline}}</dt>
+ <dd>Целое число между <code>0</code> и <code>23</code>, представляющее часы.</dd>
+ <dt><code>minute</code> {{optional_inline}}</dt>
+ <dd>Целое число между <code>0</code> и <code>59</code>, представляющее минуты.</dd>
+ <dt><code>second</code> {{optional_inline}}</dt>
+ <dd>Целое число между <code>0</code> и <code>59</code>, представляющее секунды.</dd>
+ <dt><code>millisecond</code> {{optional_inline}}</dt>
+ <dd>Целое число между <code>0</code> и <code>999</code>, представляющее миллисекунды.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Число, представляющее собой количество миллисекунд, прошедших с 1-ого Января 1970 года 00:00:00 UTC.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>UTC()</code> принимает параметры даты, разделённые запятыми и возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC и указанным вами временем.</p>
+
+<p>Для параметра <code>year</code> вы должны указать полный год; например, 1998. Если указан год между <code>0</code> и <code>99</code>, метод преобразует год в год в 20-м веке <code>(1900 + year)</code>; например, если вы указали <code>95</code>, будет использоваться <code>1995</code> год.</p>
+
+<p>Метод <code>UTC()</code> отличается от конструктора {{jsxref("Global_Objects/Date", "Date")}} двумя вещами.</p>
+
+<ul>
+ <li>Метод <code>Date.UTC()</code> использует всемирное время вместо местного времени.</li>
+ <li>Метод <code>Date.UTC()</code> возвращает значение времени как число вместо создания объекта {{jsxref("Global_Objects/Date", "Date")}}.</li>
+</ul>
+
+<p>Если определённый вами параметр выходит за пределы ожидаемого диапазона, метод <code>UTC()</code> обновит другие параметры чтобы привести это число в ожидаемый диапазон. Например, если вы используете в качестве месяца число 15, год будет увеличен на 1 <code>(year + 1)</code>, и в качестве месяца будет использоваться значение 3.</p>
+
+<p>Поскольку метод <code>UTC()</code> является статическим методом объекта {{jsxref("Global_Objects/Date", "Date")}}, вы всегда должны использовать его как <code>Date.UTC()</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Date.UTC" name="Example:_Using_Date.UTC">Пример: использование <code>Date.UTC()</code></h3>
+
+<p>Следующее выражение создаёт объект {{jsxref("Global_Objects/Date", "Date")}}, используя всемирное время вместо местного:</p>
+
+<pre class="brush:js">var utcDate = new Date(Date.UTC(2018, 11, 1, 0, 0, 0));
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.utc', 'Date.UTC')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Date.UTC")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Заметка о совместимости</h2>
+
+<h3 id="Date.UTC_с_менее_чем_двумя_аргументами">Date.UTC() с менее чем двумя аргументами</h3>
+
+<p>Когда вы предоставляете функции <code>Date.UTC()</code> меньше, чем два аргумента, то по стандартам ECMAScript 2017, она должна вернуть {{jsxref("NaN")}}. Браузерные движки, не поддерживающие подобное поведение, были обновлены (смотрите <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1050755">bug 1050755</a>, <a href="https://github.com/tc39/ecma262/pull/642">ecma-262 #642</a>).</p>
+
+<pre class="brush: js">Date.UTC();
+Date.UTC(1);
+
+// Safari: NaN
+// Chrome/Opera/V8: NaN
+
+// Firefox &lt;54: non-NaN
+// Firefox 54+: NaN
+
+// IE: non-NaN
+// Edge: NaN
+</pre>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Date.parse()")}}</li>
+ <li>{{jsxref("Date")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/date/valueof/index.html b/files/ru/web/javascript/reference/global_objects/date/valueof/index.html
new file mode 100644
index 0000000000..d58f5412a6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/date/valueof/index.html
@@ -0,0 +1,114 @@
+---
+title: Date.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Date/valueOf
+tags:
+ - Date
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/valueOf
+---
+<div>{{JSRef("Global_Objects", "Date")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>valueOf()</code></strong> возвращает примитивное значение объекта {{jsxref("Global_Objects/Date", "Date")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateObj</var>.valueOf()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>valueOf()</code> возвращает примитивное значение объекта {{jsxref("Global_Objects/Date", "Date")}} в виде числового типа данных — количества миллисекунд, прошедших с полуночи 01 января 1970 по UTC.</p>
+<p>Этот метод полностью функционально эквивалентен методу {{jsxref("Date.prototype.getTime()")}}.</p>
+<p>Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование метода <code>valueOf()</code></h3>
+<pre class="brush: js">var x = new Date(56, 6, 17);
+var myVar = x.valueOf(); // присваивает -424713600000 переменной myVar
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.8', 'Date.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.valueof', 'Date.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+ <li>{{jsxref("Date.prototype.getTime()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/decodeuri/index.html b/files/ru/web/javascript/reference/global_objects/decodeuri/index.html
new file mode 100644
index 0000000000..5f500a65b5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/decodeuri/index.html
@@ -0,0 +1,124 @@
+---
+title: decodeURI()
+slug: Web/JavaScript/Reference/Global_Objects/decodeURI
+tags:
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/decodeURI
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<p>Метод <code><strong>decodeURI()</strong></code> декодирует <span class="st">унифицированный идентификатор ресурса</span> (URI), созданный при помощи метода {{jsxref("encodeURI")}} или другой подобной процедуры.</p>
+
+<p> </p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-decodeuri.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p> </p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>decodeURI(<em>encodedURI</em>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>encodedURI</code></dt>
+ <dd>Полный закодированный <span class="st">унифицированный идентификатор ресурса</span>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новая строка, представляющая собой незакодированную версию данного <span class="st">унифицированного идентификатора ресурса</span>.</p>
+
+<p> </p>
+
+<h3 id="Exceptions">Exceptions</h3>
+
+<p>Throws an {{jsxref("URIError")}} ("malformed URI sequence") exception when <code><em>encodedURI</em></code> contains invalid character sequences.</p>
+
+<p> </p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Заменяет каждую управляющую последовательность в закодированном URI соответствующим символом. Не декодирует последовательности, которые невозможно сформировать с помощью {{jsxref("encodeURI")}}. Символ "#" декодированию не подвергается.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Декодирование_кириллического_URL">Декодирование кириллического URL</h3>
+
+<pre class="brush: js">decodeURI("https://developer.mozilla.org/ru/docs/JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
+// "https://developer.mozilla.org/ru/docs/JavaScript_шеллы"
+</pre>
+
+<p> </p>
+
+<h3 id="Catching_errors">Catching errors</h3>
+
+<pre><code>try {
+ var a = decodeURI('%E0%A4%A');
+} catch(e) {
+ console.error(e);
+}
+
+// URIError: malformed URI sequence</code></pre>
+
+<p> </p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.3.1', 'decodeURI')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-decodeuri-encodeduri', 'decodeURI')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-decodeuri-encodeduri', 'decodeURI')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.decodeURI")}}</p>
+
+<p> </p>
+
+<div id="compat-desktop"> </div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("decodeURIComponent")}}</li>
+ <li>{{jsxref("encodeURI")}}</li>
+ <li>{{jsxref("encodeURIComponent")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html b/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html
new file mode 100644
index 0000000000..8e7562ad05
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/decodeuricomponent/index.html
@@ -0,0 +1,107 @@
+---
+title: decodeURIComponent()
+slug: Web/JavaScript/Reference/Global_Objects/decodeURIComponent
+tags:
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/decodeURIComponent
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<p>Метод <code><strong>decodeURIComponent()</strong></code> декодирует управляющие последовательности символов в компоненте Uniform Resource Identifier (URI), созданные с помощью метода {{jsxref("encodeURIComponent")}} или другой подобной процедуры.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/globalprops-decodeuricomponent.html")}}</div>
+
+<div> </div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.
+
+<p> </p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>decodeURIComponent(<em>encodedURI</em>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>encodedURI</code></dt>
+ <dd>Строка, содержащая закодированный компонент Uniform Resource Identifier.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новая строка, представляющая собой декодированную версию компонента Uniform Resource Identifier (URI), переданного в качестве параметра.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>При неправильном использовании выдает исключение {{jsxref("URIError")}} ("неверный формат последовательности URI").</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Заменяет каждую управляющую последовательность в закодированном компоненте URI соответствующим ей символом.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Декодирование_компонента_кириллического_URL">Декодирование компонента кириллического URL</h3>
+
+<pre class="brush: js">decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
+// "JavaScript_шеллы"
+</pre>
+
+<h3 id="Перехват_ошибок">Перехват ошибок</h3>
+
+<pre class="brush: js">try {
+ var a = decodeURIComponent('%E0%A4%A');
+} catch(e) {
+ console.error(e);
+}
+
+// URIError: malformed URI sequence</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.3.2', 'decodeURIComponent')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-decodeuricomponent-encodeduricomponent', 'decodeURIComponent')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.decodeURIComponent")}}</p>
+
+<h2 id="See_Also" name="See_Also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("decodeURI")}}</li>
+ <li>{{jsxref("encodeURI")}}</li>
+ <li>{{jsxref("encodeURIComponent")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/encodeuri/index.html b/files/ru/web/javascript/reference/global_objects/encodeuri/index.html
new file mode 100644
index 0000000000..9b6c6d7382
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/encodeuri/index.html
@@ -0,0 +1,139 @@
+---
+title: encodeURI()
+slug: Web/JavaScript/Reference/Global_Objects/encodeURI
+tags:
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+ - URI
+translation_of: Web/JavaScript/Reference/Global_Objects/encodeURI
+---
+<div>
+<div>
+<div>{{jsSidebar("Objects")}}</div>
+</div>
+</div>
+
+<p>Метод <strong>encodeURI ()</strong> кодирует универсальный идентификатор ресурса (URI), замещая некоторые символы на одну, две, три или четыре управляющие последовательности, представляющие UTF-8 кодировку символа (четыре управляющие последовательности будут использованы только для символов, состоящих из двух «суррогатных» символов).</p>
+
+
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-encodeuri.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>encodeURI(<em>URI</em>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code><font face="Consolas, Liberation Mono, Courier, monospace">URI</font></code></dt>
+ <dd>Полный {{Glossary("URI")}}.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+ <p>Новая строка, представляющая собой строку-параметр, закодированную в виде универсального идентификатора ресурса (URI).</p>
+ </dt>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Предполагается, что URI является полным URI, поэтому метод не кодирует зарезервированные символы, имеющие особое значение в URI.</p>
+
+<p>encodeURI заменяет все символы, <strong>кроме</strong> следующих с соответствующими UTF-8 управляющими последовательностями:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Тип</td>
+ <td class="header">Включения</td>
+ </tr>
+ <tr>
+ <td>Зарезервированные символы</td>
+ <td><code>;</code> <code>,</code> <code>/</code> <code>?</code> <code>:</code> <code>@</code> <code>&amp;</code> <code>=</code> <code>+</code> <code>$</code></td>
+ </tr>
+ <tr>
+ <td>Неэкранируемые символы</td>
+ <td>латинские буквы, десятичные цифры, <code>-</code> <code>_</code> <code>.</code> <code>!</code> <code>~</code> <code>*</code> <code>'</code> <code>(</code> <code>)</code></td>
+ </tr>
+ <tr>
+ <td>Score</td>
+ <td><code>#</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Заметим, что <code>encodeURI</code> сам по себе не может сформировать правильные HTTP GET и POST запросы, такие как XMLHTTPRequests, потому, что "&amp;", "+", и "=" не закодированы, которые воспринимаются как специальные символы в GET и POST запросах. {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}}, однако, кодирует эти символы</p>
+
+<p>Замечание: {{jsxref("Global_Objects/URIError", "URIError")}} будет брошена, если попытаться закодировать суррогат, который не является частью высоко-низкой пары, например:</p>
+
+<pre class="brush: js"><code>// низко-высокая пара - нормально
+console.log(encodeURIComponent('\uD800\uDFFF'));
+
+// один высокий суррогат бросит "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uD800'));
+
+// один низкий суррогат бросит "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uDFFF'));</code></pre>
+
+<p>Также заметим, что следуя наиболее свежей <a href="http://tools.ietf.org/html/rfc3986">RFC3986</a> для URL, которая делает квадратные скобки защищенными (для IPv6) и таким образом не кодирует, когда формирование чего-либо, не являющегося частью URL (такое как домен), следующий сниппет поможет:</p>
+
+<pre class="brush: js">function fixedEncodeURI (str) {
+ return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
+}</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3rd Edition.</td>
+ <td>Standard</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.3.3', 'encodeURI')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-encodeuri-uri', 'encodeURI')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.encodeURI")}}</p>
+
+
+
+
+
+<h2 id="See_Also" name="See_Also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("decodeURI", "decodeURI()")}}</li>
+ <li>{{jsxref("encodeURIComponent", "encodeURIComponent()")}}</li>
+ <li>{{jsxref("decodeURIComponent", "decodeURIComponent()")}}</li>
+ <li>Base62x</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html b/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html
new file mode 100644
index 0000000000..73420f234c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/encodeuricomponent/index.html
@@ -0,0 +1,157 @@
+---
+title: encodeURIComponent()
+slug: Web/JavaScript/Reference/Global_Objects/encodeURIComponent
+translation_of: Web/JavaScript/Reference/Global_Objects/encodeURIComponent
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<p><code><strong>encodeURIComponent()</strong></code> - метод, кодирующий компонент универсального идентификатора ресурса (URI) заменой каждой определенной последовательности символов одной, двумя, тремя или четырьмя последовательностями символов, представленных в кодировке UTF-8  (будет только 4 управляющих последовательности для символов, состоящих из 2 "суррогатных" символов).</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">encodeURIComponent(str);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Строка. Компонент URI.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>encodeURIComponent</code> изменяет все символы, за исключением следующих: латинские буквы, десятичные цифры, <code>- _ . ! ~ * ' ( )</code></p>
+
+<p>Замечание: {{jsxref("URIError")}} будет брошена, если попытаться закодировать суррогат, который не является частью высоко-низкой пары, например:</p>
+
+<pre class="brush: js">// низко-высокая пара - нормально
+console.log(encodeURIComponent('\uD800\uDFFF'));
+
+// один высокий суррогат бросит "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uD800'));
+
+// один низкий суррогат бросит "URIError: malformed URI sequence"
+console.log(encodeURIComponent('\uDFFF'));
+</pre>
+
+<p>Чтоб избежать неожиданных запросов к серверу, вам следует вызывать <code>encodeURIComponent</code> для любых вводимых пользователем параметров, используемых как часть URI. Например, он мог написать "<code>Thyme &amp;time=again</code>" для переменной <code>comment</code>. Неиспользование <code>encodeURIComponent</code> для неё даст <code>comment=Thyme%20&amp;time=again</code>. Заметьте, что амперсанд и знак равно выделяют новую пару ключ-значение. Так что вместо комментария "<code>Thyme &amp;time=again</code>", вы получите два POST параметра, один -  "<code>Thyme </code>", а другой (<code>time</code>) равный "<code>again"</code>.</p>
+
+<p><code>Для <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#application/x-www-form-urlencoded-encoding-algorithm">application/x-www-form-urlencoded</a></code> пробелы должны быть заменены на "+", поэтому вам может понадобиться <code>encodeURIComponent</code> с дополнительной заменой "%20" на "+".</p>
+
+<p>Чтобы строго соблюдать <a class="external" href="http://tools.ietf.org/html/rfc3986">RFC 3986</a> (который резервирует !, ', (, ), и *), даже не смотря на то, что символы не используют сформированных URI разделителей, можно безопасно использовать следущее:</p>
+
+<pre class="brush: js">function fixedEncodeURIComponent (str) {
+ return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
+ return '%' + c.charCodeAt(0).toString(16);
+ });
+}
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Пример представляет специальное кодирование, требуемое для заголовков сервера в UTF-8: <code>Content-Disposition</code> и <code>Link </code>(к примеру, имена файлов в UTF-8):</p>
+
+<pre class="brush: js">var fileName = 'my file(2).txt';
+var header = "Content-Disposition: attachment; filename*=UTF-8''"
+ + encodeRFC5987ValueChars(fileName);
+
+console.log(header);
+// логирует "Content-Disposition: attachment; filename*=UTF-8''my%20file%282%29.txt"
+
+
+function encodeRFC5987ValueChars (str) {
+    return encodeURIComponent(str).
+        // Замечание: хотя RFC3986 резервирует "!", RFC5987 это не делает, так что нам не нужно избегать этого
+        replace(/['()]/g, escape). // i.e., %27 %28 %29
+        replace(/\*/g, '%2A').
+            // Следующее не требуется для кодирования процентов для RFC5987, так что мы можем разрешить немного больше читаемости через провод: |`^
+            replace(/%(?:7C|60|5E)/g, unescape);
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.3.4', 'encodeURIComponent')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-encodeuricomponent-uricomponent', 'encodeURIComponent')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("decodeURI")}}</li>
+ <li>{{jsxref("encodeURI")}}</li>
+ <li>{{jsxref("decodeURIComponent")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/columnnumber/index.html b/files/ru/web/javascript/reference/global_objects/error/columnnumber/index.html
new file mode 100644
index 0000000000..8138b26a29
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/columnnumber/index.html
@@ -0,0 +1,78 @@
+---
+title: Error.prototype.columnNumber
+slug: Web/JavaScript/Reference/Global_Objects/Error/columnNumber
+tags:
+ - Error
+ - JavaScript
+ - Non-standard
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/columnNumber
+---
+<div>
+ {{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>columnNumber</strong></code> содержит номер колонки в строке файла, в котором возникла эта ошибка.</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<h3 id="Example:_Throwing_a_custom_error" name="Example:_Throwing_a_custom_error">Пример: использование <code>columnNumber</code></h3>
+<pre class="brush: js">var e = new Error('Невозможно разобрать входные данные');
+throw e;
+console.log(e.columnNumber) // 0
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является чаcтью какой-либо спецификации. Не стандартно.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.stack")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.lineNumber")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.fileName")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/filename/index.html b/files/ru/web/javascript/reference/global_objects/error/filename/index.html
new file mode 100644
index 0000000000..c2f2affeb0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/filename/index.html
@@ -0,0 +1,80 @@
+---
+title: Error.prototype.fileName
+slug: Web/JavaScript/Reference/Global_Objects/Error/fileName
+tags:
+ - Error
+ - JavaScript
+ - Non-standard
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/fileName
+---
+<div>
+ {{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>fileName</strong></code> содержит путь к файлу, в котором возникла эта ошибка.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Это нестандартное свойство содержит путь к файлу, в котором возникла эта ошибка. Если доступ к нему получен в контексте отладчика, например, Инструментов разработчика Firefox, вернётся строка «debugger eval code».</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<h3 id="Example:_Throwing_a_custom_error" name="Example:_Throwing_a_custom_error">Пример: использование <code>fileName</code></h3>
+<pre class="brush: js">var e = new Error('Невозможно разобрать входные данные');
+throw e;
+// e.fileName может выглядеть так "file:///C:/example.html"
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является чаcтью какой-либо спецификации. Не стандартно.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.stack")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.columnNumber")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.lineNumber")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/index.html b/files/ru/web/javascript/reference/global_objects/error/index.html
new file mode 100644
index 0000000000..95fd8918a1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/index.html
@@ -0,0 +1,208 @@
+---
+title: Error
+slug: Web/JavaScript/Reference/Global_Objects/Error
+tags:
+ - Error
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Error
+---
+<div>{{JSRef}}</div>
+
+<p>Конструктор <strong><code>Error</code></strong> создаёт объект ошибки. Экземпляры объекта <code>Error</code> выбрасываются при возникновении ошибок во время выполнения. Объект <code>Error</code> также может использоваться в качестве базового для пользовательских исключений. Смотрите ниже стандартные встроенные типы ошибок.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">new Error([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>message </code> <code>{{optional_inline()}}</code></dt>
+ <dd>Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}} <code>{{optional_inline()}}</code></dt>
+ <dd>Значение свойства <code>fileName</code> созданного объекта <code>Error</code>. Значением по умолчанию является имя файла, содержащего код, вызвавший конструктор <code>Error()</code>.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}} <code>{{optional_inline()}}</code></dt>
+ <dd>Значение свойства <code>lineNumber</code> созданного объекта <code>Error</code>. Значением по умолчанию является номер строки, содержащей вызов конструктора <code>Error()</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Во время выполения кода ошибки приводят к созданию и выбрасыванию новых объектов <code>Error</code>.</p>
+
+<p>Данная страница документирует использование объекта <code>Error</code> как самого по себе, так и при использовании в качестве функции-конструктора. Список свойств и методов, унаследованых экземплярами объекта <code>Error</code>, смотрите в разделе {{jsxref("Error.prototype")}}.</p>
+
+<p> </p>
+
+<h3 id="Использование_как_функции">Использование как функции</h3>
+
+<p>Когда <code>Error</code> используется как функции-- без {{jsxref("Operators/new", "new")}}, она возвращает <code>Error</code> объект. Следовательно простой вызов <code>Error</code> произведет тот же результат, что и конструктор <code>Error</code> объявленный через <code>new</code>.</p>
+
+<pre><code>// this:
+const x = Error('I was created using a function call!');
+​​​​// Такая же </code>функциональность<code>:
+const y = new Error('I was constructed via the "new" keyword!');</code></pre>
+
+<p> </p>
+
+<h3 id="Error_types" name="Error_types"><a id="Error_types" name="Error_types">Типы ошибок</a></h3>
+
+<p>Кроме общего конструктора <code>Error</code>, в JavaScript существует ещё семь других основных конструкторов ошибок. По обработке исключений смотрите раздел <a href="/ru/docs/Web/JavaScript/Guide/Statements#Exception_Handling_Statements">Выражения обработки исключений</a>.</p>
+
+<dl>
+ <dt>{{jsxref("EvalError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую в глобальной функции {{jsxref("Global_Objects/eval", "eval()")}}.</dd>
+ <dt>{{jsxref("InternalError")}} {{non-standard_inline}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую при выбрасывании внутренней ошибки в движке JavaScript. К примеру, ошибки «слишком глубокая рекурсия» («too much recursion»).</dd>
+ <dt>{{jsxref("RangeError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую при выходе числовой переменной или параметра за пределы допустимого диапазона.</dd>
+ <dt>{{jsxref("ReferenceError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую при разыменовывании недопустимой ссылки.</dd>
+ <dt>{{jsxref("SyntaxError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий синтаксическую ошибку, возникающую при разборе исходного кода в функции {{jsxref("Global_Objects/eval", "eval()")}}.</dd>
+ <dt>{{jsxref("TypeError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую при недопустимом типе для переменной или параметра.</dd>
+ <dt>{{jsxref("URIError")}}</dt>
+ <dd>Создаёт экземпляр, представляющий ошибку, возникающую при передаче в функции {{jsxref("Global_Objects/encodeURI", "encodeURI()")}} или {{jsxref("Global_Objects/decodeURI", "decodeURI()")}} недопустимых параметров.</dd>
+</dl>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Error.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в экземпляры объекта <code>Error</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<p>Глобальный объект <code>Error</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Error_instances" name="Error_instances">Экземпляры объекта <code>Error</code></h2>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Description')}}</div>
+
+<h3 id="Properties_2" name="Properties_2">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_2" name="Methods_2">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Error/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throwing_a_generic_error" name="Example:_Throwing_a_generic_error">Пример: выбрасывание обычной ошибки</h3>
+
+<p>Обычно, вы создаёте объект <code>Error</code> с намерением возбудить ошибку с помощью ключевого слова {{jsxref("Statements/throw", "throw")}}. Вы можете обработать ошибку с помощью конструкции {{jsxref("Statements/try...catch", "try...catch")}}:</p>
+
+<pre class="brush: js">try {
+ throw new Error('Уупс!');
+} catch (e) {
+ console.log(e.name + ': ' + e.message);
+}
+</pre>
+
+<h3 id="Example:_Handling_a_specific_error" name="Example:_Handling_a_specific_error">Пример: обработка ошибки конкретного типа</h3>
+
+<p><span class="comment">Возможно, это следует удалить</span> Вы можете обрабатывать только какой-то определённый вид ошибок, проверяя тип ошибки в свойстве {{jsxref("Object.prototype.constructor", "constructor")}} или, если вы пишете для современных движков JavaScript, с помощью ключевого слова {{jsxref("Operators/instanceof", "instanceof")}}:</p>
+
+<pre class="brush: js">try {
+ foo.bar();
+} catch (e) {
+ if (e instanceof EvalError) {
+ console.log(e.name + ': ' + e.message);
+ } else if (e instanceof RangeError) {
+ console.log(e.name + ': ' + e.message);
+ }
+ // ... и т.д.
+}
+</pre>
+
+<h3 id="Example:_Custom_Error_Types" name="Example:_Custom_Error_Types">Пример: пользовательские типы ошибок</h3>
+
+<p>Вы можете захотеть определить свои собственные типы ошибок, унаследованные от <code>Error</code>, что бы иметь возможноть писать <code>throw new MyError()</code> и использовать <code>instanceof MyError</code> для проверки вида ошибки в обработчике исключений. Ниже продемонстрирован общий подход к выполнению этой задачи.</p>
+
+<div class="warning">
+<p><strong>Предупреждение:</strong> обратите внимание, что выбрасывание <code>MyError</code> будет сообщать неправильные номер строки <code>lineNumber</code> и имя файла <code>fileName</code> как минимум, в Firefox.</p>
+</div>
+
+<p>Также смотрите <a href="http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript">обсуждение «Какой способ расширения Error в JavaScript более предпочтителен?» на Stackoverflow</a>.</p>
+
+<pre class="brush: js">// Создаём новый объект, затем через прототип делаем его наследником конструктора Error.
+function MyError(message) {
+ this.name = 'MyError';
+ this.message = message || 'Сообщение по умолчанию';
+ this.stack = (new Error()).stack;
+}
+MyError.prototype = Object.create(Error.prototype);
+MyError.prototype.constructor = MyError;
+
+try {
+ throw new MyError();
+} catch (e) {
+ console.log(e.name); // 'MyError'
+ console.log(e.message); // 'Сообщение по умолчанию'
+}
+
+try {
+ throw new MyError('пользовательское сообщение');
+} catch (e) {
+ console.log(e.name); // 'MyError'
+ console.log(e.message); // 'пользовательское сообщение'
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11', 'Error')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-error-objects', 'Error')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-error-objects', 'Error')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Error")}}</p>
+
+<p> </p>
+
+<div> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+ <li>{{jsxref("Statements/try...catch", "try...catch")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/linenumber/index.html b/files/ru/web/javascript/reference/global_objects/error/linenumber/index.html
new file mode 100644
index 0000000000..c9f2d5c33e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/linenumber/index.html
@@ -0,0 +1,92 @@
+---
+title: Error.prototype.lineNumber
+slug: Web/JavaScript/Reference/Global_Objects/Error/lineNumber
+tags:
+ - Error
+ - JavaScript
+ - Non-standard
+ - Property
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/lineNumber
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>lineNumber</strong></code> содержит номер строки в файле, в котором возникла эта ошибка.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throwing_a_custom_error" name="Example:_Throwing_a_custom_error">Пример: использование <code>lineNumber</code></h3>
+<pre class="brush: js">var e = new Error('Невозможно разобрать входные данные');
+throw e;
+console.log(e.lineNumber) // 2
+</pre>
+
+<h3 id="Example:_Alternative_example_using_error_event" name="Example:_Alternative_example_using_error_event">Пример: альтернативный пример с использованием события <code>error</code></h3>
+<pre class="brush: js">window.addEventListener('error', function(e) {
+ console.log(e.lineno); // 5
+});
+var e = new Error('Невозможно разобрать входные данные');
+throw e;
+</pre>
+<p>Это стандарт и он поддерживается в Chrome, Firefox и, вероятно, много где ещё.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является чаcтью какой-либо спецификации. Не стандартно.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>На объекте ошибки в обработчике события <code>error</code></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.stack")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.columnNumber")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Error.prototype.fileName")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/message/index.html b/files/ru/web/javascript/reference/global_objects/error/message/index.html
new file mode 100644
index 0000000000..655ce0924b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/message/index.html
@@ -0,0 +1,107 @@
+---
+title: Error.prototype.message
+slug: Web/JavaScript/Reference/Global_Objects/Error/message
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/message
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>message</strong></code> представляет человеко-читаемое описание ошибки.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Это свойство содержит краткое описание ошибки, если оно доступно или было установлено. <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> широко использует свойство <code>message</code> для исключений. Свойство <code>message</code> в сочетании со свойством {{jsxref("Error.prototype.name", "name")}} используется методом {{jsxref("Error.prototype.toString()")}} для создания строкового представления ошибки.</p>
+<p>По умолчанию, свойство <code>message</code> является пустой строкой, но это поведение может быть переопределено для экземпляра путём указания сообщения первым аргументом в конструкторе объекта {{jsxref("Global_Objects/Error", "Error")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throwing_a_custom_error" name="Example:_Throwing_a_custom_error">Пример: выбрасывание собственной ошибки</h3>
+<pre class="brush: js">var e = new Error('Невозможно разобрать входные данные');
+// e.message равно 'Невозможно разобрать входные данные'
+throw e;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.4.3', 'Error.prototype.message')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-error.prototype.message', 'Error.prototype.message')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.name")}}</li>
+ <li>{{jsxref("Error.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/name/index.html b/files/ru/web/javascript/reference/global_objects/error/name/index.html
new file mode 100644
index 0000000000..856ded3954
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/name/index.html
@@ -0,0 +1,108 @@
+---
+title: Error.prototype.name
+slug: Web/JavaScript/Reference/Global_Objects/Error/name
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/name
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>name</strong></code> представляет имя типа ошибки. Начальное значение равно строке <code>"Error"</code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>По умолчанию, экземпляры {{jsxref("Error")}} имеют имя <code>"Error"</code>. Свойство <code>name</code>, вместе со свойством {{jsxref("Error.prototype.message", "message")}}, используется методом {{jsxref("Error.prototype.toString()")}} для создания строкового представления ошибки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throwing_a_custom_error" name="Example:_Throwing_a_custom_error">Пример: выбрасывание собственной ошибки</h3>
+<pre class="brush: js">var e = new Error('Неверные входные данные'); // e.name равно 'Error'
+
+e.name = 'ParseError';
+throw e;
+// e.toString() вернёт 'ParseError: Неверные входные данные'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.4.2', 'Error.prototype.name')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-error.prototype.name', 'Error.prototype.name')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.message")}}</li>
+ <li>{{jsxref("Error.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/prototype/index.html b/files/ru/web/javascript/reference/global_objects/error/prototype/index.html
new file mode 100644
index 0000000000..a31d760836
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/prototype/index.html
@@ -0,0 +1,154 @@
+---
+title: Error.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Error/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Error
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <code><strong>Error.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("Global_Objects/Error", "Error")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Все экземпляры {{jsxref("Global_Objects/Error", "Error")}} и экземпляры {{jsxref("Global_Objects/Error", "неуниверсальных ошибок", "#Error_types", 1)}} наследуются от <code>Error.prototype</code>. Как и со всеми функциями-конструкторами, вы можете использовать прототип конструктора для добавления свойств и методов ко всем экземплярам, создаваемым этим конструктором.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<h3 id="Standard_properties" name="Standard_properties">Стандартные свойства</h3>
+
+<dl>
+ <dt><code>Error.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра ошибки.</dd>
+ <dt>{{jsxref("Error.prototype.message")}}</dt>
+ <dd>Сообщение ошибки.</dd>
+ <dt>{{jsxref("Error.prototype.name")}}</dt>
+ <dd>Название ошибки.</dd>
+</dl>
+
+<h3 id="Vendor-specific_extensions" name="Vendor-specific_extensions">Расширения вендоров</h3>
+
+<div>{{non-standard_header}}</div>
+
+<h4 id="Microsoft" name="Microsoft">Microsoft</h4>
+
+<dl>
+ <dt>{{jsxref("Error.prototype.description")}}</dt>
+ <dd>Описание ошибки. Аналогично свойству {{jsxref("Error.prototype.message", "message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.number")}}</dt>
+ <dd>Номер ошибки.</dd>
+</dl>
+
+<h4 id="Mozilla" name="Mozilla">Mozilla</h4>
+
+<dl>
+ <dt>{{jsxref("Error.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка.</dd>
+ <dt>{{jsxref("Error.prototype.stack")}}</dt>
+ <dd>Стек вызовов.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Error.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает строку, содержащую исходный код указанного объекта {{jsxref("Global_Objects/Error", "Error")}}; вы можете использовать это значение для создания нового объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Error.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, представляющую указанный объект. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.3.1', 'Error')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-error.prototype', 'Error')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("Object.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/stack/index.html b/files/ru/web/javascript/reference/global_objects/error/stack/index.html
new file mode 100644
index 0000000000..de0f95e041
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/stack/index.html
@@ -0,0 +1,147 @@
+---
+title: Error.prototype.stack
+slug: Web/JavaScript/Reference/Global_Objects/Error/Stack
+tags:
+ - Error
+ - JavaScript
+ - Non-standard
+ - Property
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/Stack
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Нестандартное свойство <strong><code>stack</code></strong> объекта {{jsxref("Error")}} возвращает трассировку стека вызываемых функций в порядке их выполнения, вместе с номерами строк, именами файлов и аргументами. Строка со стеком заполняется от самых недавних вызовов до вызова из глобальной области видимости.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Каждый шаг находится на отдельной строке; первая часть строки содержит имя функции (если это не вызов из глобальной области видимости), затем знак собаки (<code>@</code>), местоположение файла (кроме случая, когда функция является конструктором ошибки, которую она выбрасывает), двоеточие и, если есть местоположение файла, номер строки. Обратите внимание, что объект {{jsxref("Error")}} также обладает свойствами <code>fileName</code>, <code>lineNumber</code> и <code>columnNumber</code>, позволяющими извлечь имя файла, номер строки и столбца из выброшенной ошибки (но только самой ошибки, а не всего стека вызовов).</p>
+<p>Обратите внимание, что такой формат используется в Firefox. Нет никакого «стандартного формата». Однако, Safari 6+ и Opera 12- используют очень похожий формат. С другой стороны, браузеры, использующие движок JavaScript V8 (например, Chrome, Opera 15+, Браузер Android) и IE10+, используют другой формат (смотрите эту статью по <a class="external" href="http://msdn.microsoft.com/ru-ru/library/windows/apps/hh699850.aspx"><code>error.stack</code></a> в MSDN).</p>
+<p><strong>Значения аргументов в стеке</strong>: до Firefox 14 ({{bug("744842")}}) за именем функции и прямо перед знаком собаки (<code>@</code>) в круглых скобках следовали значения аргументов, преобразованные в строки. Хотя объекты (или массивы и прочее) преобразовывались в форму <code>"[object Object]"</code>, и, таким образом, невозможно было узнать их содержимое, скалярные значения могли быть извлечены (это всё ещё можно использовать в Firefox 14 — однако проще для получения аргументов использовать <code>arguments.callee.caller.arguments</code>, а для получения имени функции — <code>arguments.callee.caller.name</code>). Значение <code>"undefined"</code> показывалось как <code>"(void 0)"</code>. Обратите внимание, что если строковые аргументы содержали значения, включающие символы <code>"@"</code>, <code>"("</code>, <code>")"</code> (или если они включали имена файлов), вам не так то просто было разбить строку на составные части. Таким образом, в Firefox 14 и более поздних версиях это перестало быть проблемой.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<p>Следующая разметка HTML демонстрирует использование свойства <code>stack</code>.</p>
+<pre class="brush: html">&lt;!DOCTYPE HTML&gt;
+&lt;meta charset="UTF-8"&gt;
+&lt;title&gt;Пример трассировки стека&lt;/title&gt;
+&lt;body&gt;
+&lt;script&gt;
+function trace() {
+ try {
+ throw new Error('Моя ошибка');
+ }
+ catch(e) {
+ alert(e.stack);
+ }
+}
+function b() {
+ trace();
+}
+function a() {
+ b(3, 4, '\n\n', undefined, {});
+}
+a('первый вызов, первый аргумент');
+&lt;/script&gt;
+</pre>
+<p>Предполагается, что разметка выше сохранена как <code>C:\example.html</code> в файловой системе Windows. Она выводит следующий текст в диалоговом окне:</p>
+<p>Начиная с Firefox 30 и более поздних версий, вывод содержит номер колонки ({{bug("762556")}}):</p>
+<pre><samp>trace@file:///C:/example.html:9:17
+b@file:///C:/example.html:16:13
+a@file:///C:/example.html:19:13
+@file:///C:/example.html:21:9</samp></pre>
+<p>с Firefox 14 по Firefox 29:</p>
+<pre><samp>trace@file:///C:/example.html:9
+b@file:///C:/example.html:16
+a@file:///C:/example.html:19
+@file:///C:/example.html:21</samp></pre>
+<p>Firefox 13 и более ранние версии выводят следующий текст:</p>
+<pre><samp>Error("Моя ошибка")@:0
+trace()@file:///C:/example.html:9
+b(3,4,"\n\n",(void 0),[object Object])@file:///C:/example.html:16
+a("первый вызов, первый аргумент")@file:///C:/example.html:19
+@file:///C:/example.html:21</samp></pre>
+
+<h3 id="Stack_of_eval'ed_code" name="Stack_of_eval'ed_code">Стек кода в функции <code>eval()</code></h3>
+<p>Начиная с Firefox 30 {{geckoRelease("30")}}, стек вызовов кода в вызовах <code>Function()</code> и <code>eval()</code> даёт более подробную информацию о номере строки и колонки внутри этих вызовов. Вызовы <code>Function</code> обозначаются <code>"&gt; Function"</code>, а вызовы <code>eval()</code> обозначаются <code>"&gt; eval"</code>. Смотрите {{bug("332176")}}.</p>
+<pre class="brush: js">try {
+ new Function('throw new Error()')();
+} catch (e) {
+ console.log(e.stack);
+}
+
+// anonymous@file:///C:/example.html line 7 &gt; Function:1:1
+// @file:///C:/example.html:7:6
+
+
+try {
+ eval("eval('FAIL')");
+} catch (x) {
+ console.log(x.stack);
+}
+
+// @file:///C:/example.html line 7 &gt; eval line 1 &gt; eval:1:1
+// @file:///C:/example.html line 7 &gt; eval:1:1
+// @file:///C:/example.html:7:6
+</pre>
+<p>Также для именования исходного кода в функции <code>eval()</code> вы можете использовать директиву <code>//# sourceURL</code>. Смотрите раздел <a href="/ru/docs/Tools/Debugger/How_to/Debug_eval_sources">Отладка исходных кодов в функции <code>eval()</code></a> в документации по <a href="/ru/docs/Tools/Debugger">отладчику</a>, а также эту <a href="http://fitzgeraldnick.com/weblog/59/">запись в блоге</a> (на английском).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является чаcтью какой-либо спецификации. Не стандартно.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("10")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatSafari("6")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>Android 4 (возможно, Android 3, но не Android 2)</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatSafari("6")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a href="/ru/docs/Components.stack">Components.stack</a></li>
+ <li>Внешние проекты: <a class="link-https" href="https://github.com/csnover/TraceKit/">TraceKit</a> и <a class="link-https" href="https://github.com/eriwen/javascript-stacktrace">javascript-stacktrace</a></li>
+ <li>MSDN: документация по <a class="external" href="http://msdn.microsoft.com/en-us/library/windows/apps/hh699850.aspx">error.stack</a></li>
+ <li><a href="https://code.google.com/p/v8/wiki/JavaScriptStackTraceApi">Обзор API трассировки стека в движке JavaScript V8</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/tosource/index.html b/files/ru/web/javascript/reference/global_objects/error/tosource/index.html
new file mode 100644
index 0000000000..7cc274da14
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/tosource/index.html
@@ -0,0 +1,88 @@
+---
+title: Error.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Error/toSource
+tags:
+ - Error
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/toSource
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toSource()</strong></code> возвращает код, вычисление которого приведёт к этой же ошибке.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>e</var>.toSource()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Вызов метода <code>toSource</code> на экземпляре класса {{jsxref("Error")}} (включая <i><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types">родные ошибки</a></i>) вернёт строку, содержащую исходный код ошибки. Эта строка может быть выполнена для создания (приблизительно) эквивалентного объекта. Естественно, строка, содержащая исходный код, следует структуре конструктора объекта {{jsxref("Error")}}. Например:</p>
+<pre class="brush: js">(new <i>name</i>(<i>message</i>, <i>fileName</i>, <i>lineNumber</i>))
+</pre>
+<p>здесь атрибуты относятся к соответствующим свойствам экземпляра ошибки.</p>
+<div class="note">
+ <p><strong>Обратите внимание:</strong> имейте в виду, что свойства, используемые методом <code>toSource</code> при создании строки, изменяемы и могут неточно отражать функцию, с помощью которой создан экземпляр ошибки, или имя файла, или номер строки, где возникла ошибка.</p>
+</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является чаcтью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.fileName")}}</li>
+ <li>{{jsxref("Error.prototype.lineNumber")}}</li>
+ <li>{{jsxref("Error.prototype.message")}}</li>
+ <li>{{jsxref("Error.prototype.name")}}</li>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/error/tostring/index.html b/files/ru/web/javascript/reference/global_objects/error/tostring/index.html
new file mode 100644
index 0000000000..22d4157c81
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/error/tostring/index.html
@@ -0,0 +1,136 @@
+---
+title: Error.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Error/toString
+tags:
+ - Error
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Error/toString
+---
+<div>
+ {{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toString()</strong></code> возвращает строку, представляющую указанный объект {{jsxref("Error")}}.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>e</var>.toString()</code></pre>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Error")}} переопределяет метод {{jsxref("Object.prototype.toString()")}}, унаследованный всеми объектами. Его семантика следующая (предполагается, что объекты {{jsxref("Object")}} и {{jsxref("String")}} имеют свои изначальные значения):</p>
+<pre class="brush: js">Error.prototype.toString = function() {
+ 'use strict';
+
+ var obj = Object(this);
+ if (obj !== this) {
+ throw new TypeError();
+ }
+
+ var name = this.name;
+ name = (name === undefined) ? 'Error' : String(name);
+
+ var msg = this.message;
+ msg = (msg === undefined) ? '' : String(msg);
+
+ if (name === '') {
+ return msg;
+ }
+ if (msg === '') {
+ return name;
+ }
+
+ return name + ': ' + msg;
+};
+</pre>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">var e = new Error('непоправимая ошибка');
+print(e.toString()); // 'Error: непоправимая ошибка'
+
+e.name = undefined;
+print(e.toString()); // 'Error: непоправимая ошибка'
+
+e.name = '';
+print(e.toString()); // 'непоправимая ошибка'
+
+e.message = undefined;
+print(e.toString()); // 'Error'
+
+e.name = 'привет';
+print(e.toString()); // 'привет'
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.4.4', 'Error.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-error.prototype.tostring', 'Error.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/escape/index.html b/files/ru/web/javascript/reference/global_objects/escape/index.html
new file mode 100644
index 0000000000..faaef7049c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/escape/index.html
@@ -0,0 +1,120 @@
+---
+title: escape()
+slug: Web/JavaScript/Reference/Global_Objects/escape
+translation_of: Web/JavaScript/Reference/Global_Objects/escape
+---
+<div>{{jsSidebar("Objects")}} {{deprecated_header}}</div>
+
+<p>Устаревший метод <code><strong>escape()</strong></code> возвращает новую строку, в которой определенные символы заменены шестнадцаричной управляющей последовательностью.  Используйте методы {{jsxref("encodeURI")}} или {{jsxref("encodeURIComponent")}} вместо него.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>escape(str)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Строка для кодирования.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Функция <code>escape() является свойством </code><em>глобального объекта</em>, т.е. относится к глобальным функциям. <span>Эта функция</span> <span>кодирует</span> <span>специальные символы</span>, <span>за исключением</span>: @*_+-./</p>
+
+<p>The hexadecimal form for characters, whose code unit value is 0xFF or less, is a two-digit escape sequence: %xx. For characters with a greater code unit, the four-digit format %<strong>u</strong>xxxx is used.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">escape("abc123"); // "abc123"
+escape("текст"); // "%u0442%u0435%u043A%u0441%u0442"
+escape("ć"); // "%u0107"
+
+/* специальные символы */
+escape("@*_+-./"); // "@*_+-./"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-B.2.1', 'escape')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Defined in the (informative) Compatibility Annex B</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-escape-string', 'escape')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Defined in the (normative) Annex B for Additional ECMAScript Features for Web Browsers</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("encodeURI")}}</li>
+ <li>{{jsxref("encodeURIComponent")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/eval/index.html b/files/ru/web/javascript/reference/global_objects/eval/index.html
new file mode 100644
index 0000000000..ee90713bde
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/eval/index.html
@@ -0,0 +1,213 @@
+---
+title: eval()
+slug: Web/JavaScript/Reference/Global_Objects/eval
+tags:
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/eval
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<div class="blockIndicator warning">
+<p><strong>Warning:</strong> <font>Выполнение кода JavaScript с текстовой строки - это невероятный риск для безопасности. </font><font>Злоумышленнику слишком легко запустить какой угодно код, когда вы используете</font> <code>eval()</code>. Смотрите  <a href="#Не_используйте_eval_без_необходимости!">Никогда не изпользуте eval()!</a>, ниже.</p>
+</div>
+
+<p>Метод <code><strong>eval()</strong></code> выполняет JavaScript код, представленный строкой.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-eval.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>eval(<em>string</em>)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>string</code></dt>
+ <dd>Строка, представленная JavaScript выражением, оператором или последовательностью операторов. Выражение может содержать переменные и свойства существующих объектов.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+ </dt>
+ <dd>Возвращает значение выполнения кода, переданного в функцию в виде строки. Если код не возвращает ничего - будет возвращено значение {{jsxref("undefined")}}.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>eval()</code> - функция глобального объекта.</p>
+
+<p>Аргумент функции <code>eval()</code> - строка. <code>eval()</code> исполняет содержащееся в строке выражение, один или несколько операторов  JavaScript. Не стоит вызывать <code>eval()</code> для определения значения арифметического выражения; JavaScript вычисляет их автоматически.</p>
+
+<p><code>eval()</code> можно использовать для вычисления значения арифметического выражения, записанного в строковом виде, на более поздней стадии исполнения. Предположим, существует переменная <code>x</code>. Можно отложить вычисление выражения, в котором содержится <code>х</code>, если присвоить переменной это выражение в виде строки (допустим, "<code>3 * x + 2</code>"), а затем вызвать <code>eval()</code> в более поздней точке кода.</p>
+
+<p>Если аргумент, переданный <code>eval()</code>, не является строкой, <code>eval() </code>возвращает его неизменным. В следующем примере определен конструктор <code>String</code>, и <code>eval()</code> не вычисляет значение выражения, записанного в строковом виде, а возвращает объект типа <code>String</code>.</p>
+
+<pre class="brush:js notranslate">eval(new String("2 + 2")); // возвращает объект типа String, содержащий "2 + 2"
+eval("2 + 2"); // возвращает 4
+</pre>
+
+<p>Это ограничение легко обойти при помощи <code>toString()</code>.</p>
+
+<pre class="brush:js notranslate">var expression = new String("2 + 2");
+eval(expression.toString());
+</pre>
+
+<p>Если вы используете <code>eval</code> косвенно, вызовом его через ссылку, а не просто <code>eval</code>, в<a href="http://www.ecma-international.org/ecma-262/5.1/#sec-10.4.2"> ECMAScript 5</a> это работает в глобальной области видимости, а не в локальной; это значит, что <code>eval</code> будет вызван в глобальной области видимости, а код будет выполнен с отсутвием доступа к локальным переменным в пределах области видимости, где он был вызван.</p>
+
+<pre class="brush:js notranslate">function test() {
+ var x = 2, y = 4;
+ console.log(eval("x + y"));  // Прямой вызов, использует локальную области видимости, результат - 6
+ var geval = eval;
+ console.log(geval("x + y")); // Непрямой вызов, использует глобальную область видимости, бросит ReferenceError, т.к. `x` - не определен
+}
+</pre>
+
+<h2 id="Не_используйте_eval_без_необходимости!"><a name="dont-use-it"><code><font face="Open Sans, Arial, sans-serif">Н</font>е используйте eval без необходимости!</code></a></h2>
+
+<p><code>eval()</code> - опасная функция, которая выполняет код, проходящий со всеми привилегиями вызывателя. Если вы запускаете <code>eval()</code> со строкой, на которую могут влиять злоумышленники, то вы можете запустить вредоносный код на устройство пользователя с правами вашей веб-страницы/расширения. Наиболее важно, код третьей стороны может видеть область видимости, в которой был вызван <code>eval()</code>, что может может привести к атакам, похожим на {{jsxref("Global_Objects/Function", "Function")}}.</p>
+
+<p><code>Также eval(),</code>как правило, медленнее альтернатив, так как вызывает интерпретатор JS, тогда как многие другие конструкции оптимизированы современными JS движками.</p>
+
+<p>Есть безопасные (и быстрые!) альтернативы <code>eval()</code> для общих случаев использования.</p>
+
+<h3 id="Доступ_к_свойствам">Доступ к свойствам</h3>
+
+<p>Вам не следует использовать <code>eval()</code>, чтобы конвертировать имена свойств в свойства. Рассматривая следующий пример, где свойство объекта используемое для доступа неизвестно до выполнения кода. Это можно сделать с  eval:</p>
+
+<pre class="brush:js notranslate">var obj = { a: 20, b: 30 };
+var propname = getPropName(); // возвращает "a" или "b"
+
+eval( "var result = obj." + propname );
+</pre>
+
+<p>Однако, <code>eval()</code> здесь не нужен. По факту, использование здесь его удивляет. Вместо него используйте <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors" title="JavaScript/Reference/Operators/Member_Operators">доступ к свойствам</a>, который быстрее и безопаснее:</p>
+
+<pre class="brush:js notranslate">var obj = { a: 20, b: 30 };
+var propname = getPropName(); // возвращает "a" или "b"
+var result = obj[ propname ]; // obj[ "a" ] то же, что и obj.a
+</pre>
+
+<h3 id="Используйте_функции_вместо_исполнения_фрагментов_кода">Используйте функции вместо исполнения фрагментов кода</h3>
+
+<p>У JavaScript <a class="external" href="http://en.wikipedia.org/wiki/First-class_function" title="http://en.wikipedia.org/wiki/First-class_function">функции первого класса</a>, что значит, что вы можете передавать функции как аргументы, хранить их в переменных или свойвах объектах и так далее. Многие DOM API созданы с учетом этого, так что вы можете (и вам следует) писать:</p>
+
+<pre class="brush: js notranslate">// вместо setTimeout(" ... ", 1000) :
+setTimeout(function() { ... }, 1000);
+
+// вместо elt.setAttribute("onclick", "...") использовать:
+elt.addEventListener("click", function() { ... } , false); </pre>
+
+<p><a href="/en-US/docs/Web/JavaScript/Closures" title="JavaScript/Guide/Closures">Замыкания</a> также полезны как способ создания функций с параметрами без конкатенации строк.</p>
+
+<h3 id="Разбор_JSON_конвертирование_строк_в_JavaScript_объекты">Разбор JSON (конвертирование строк в JavaScript объекты)</h3>
+
+<p>Если строка, переданная в <code>eval()</code>, содержит данные (к примеру, массив: <code>"[1, 2, 3]"</code>), а не код, вам следует рассмотреть <a href="/en-US/docs/Glossary/JSON" title="JSON">JSON</a>, позволяющий строке использовать подмножество JavaScript синтаксиса для представления данных. Смотрите также: <a href="/en-US/docs/Downloading_JSON_and_JavaScript_in_extensions" title="Downloading_JSON_and_JavaScript_in_extensions">Загрузка JSON и JavaScript в расширениях</a>.</p>
+
+<p>Заметьте, что синтаксис JSON ограничен в сравнении с JavaScript синтаксисом, многие валидные JavaScript литералы не распарсятся в JSON. К примеру, лишние запятые в конце выражений не разрешены в JSON, а имена свойств (ключи) в объектах должны быть в двойных кавычках. Будьте уверены использовать серилизацию JSON для создания строк, которые потом будут разбираться как JSON.</p>
+
+<h3 id="Передавайте_данные_вместо_кода">Передавайте данные вместо кода</h3>
+
+<p>К примеру, расширение, созданное изменять содержимое веб-страниц, должно иметь правила, определенные в <a href="/en-US/docs/XPath" title="XPath">XPath</a>, а не JS коде.</p>
+
+<h3 id="Выполняйте_код_с_ограниченными_правами">Выполняйте код с ограниченными правами</h3>
+
+<p>Если выполнять код всё-таки необходимо, желательно это делать с уменьшенными привелегиями. Этот совет подходит, главным образом, к расширениям и XUL приложениям, которые могут использовать <a href="/en-US/docs/Components.utils.evalInSandbox" title="Components.utils.evalInSandbox">Components.utils.evalInSandbox</a>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_eval">Использование <code>eval</code></h3>
+
+<p>В следующем коде оба выражения содержат <code>eval()</code>, возвращающий 42. Первое определяется строкой "<code>x + y + 1</code>"; второе - строкой "<code>42</code>".</p>
+
+<pre class="brush:js notranslate">var x = 2;
+var y = 39;
+var z = "42";
+eval("x + y + 1"); // возвращает 42
+eval(z); // вернёт 42
+</pre>
+
+<h3 id="Использование_eval_для_исполнения_строки_содержащей_операторы_JavaScript">Использование <code>eval</code> для исполнения строки, содержащей операторы JavaScript</h3>
+
+<p>Следующий пример использует <code>eval()</code> для получения значения выражения <code>str</code>. Эта строка состоит из JavaScript выражений, печатающих в консоль, и, если x равен пяти, присвающих z значение 42, или 0 в противном случае. Когда второе выражение будет исполнено, <code>eval()</code> будет считать выражения выполненными, а также это установит значение выражению переменной z и вернет его.</p>
+
+<pre class="brush:js notranslate">var x = 5;
+var str = "if (x == 5) {console.log('z is 42'); z = 42;} else z = 0; ";
+
+console.log("z is ", eval(str));</pre>
+
+<h3 id="Последнее_выражение_выполняется">Последнее выражение выполняется</h3>
+
+<p><code>eval()</code> вернет значение последнего выполняемого выражения</p>
+
+<pre class="brush:js notranslate">var str = "if ( a ) { 1+1; } else { 1+2; }";
+var a = true;
+var b = eval(str); // вернёт 2
+
+console.log("b is : " + b);
+
+a = false;
+b = eval(str); // вернёт 3
+
+console.log("b is : " + b);</pre>
+
+<h3 id="eval_как_строковое_определение_функции_включающее_и_как_префикс_и_суффикс"><code>eval</code> как строковое определение функции, включающее "(" и ")" как префикс и суффикс</h3>
+
+<pre class="brush:js notranslate">var fctStr1 = "function a() {}"
+var fctStr2 = "(function a() {})"
+var fct1 = eval(fctStr1) // вернёт undefined
+var fct2 = eval(fctStr2) // вернёт функцию
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.2.1', 'eval')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-eval-x', 'eval')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div id="compat-mobile">
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.eval")}}</p>
+</div>
+
+<h3 id="Gecko-специфичные_замечания">Gecko-специфичные замечания</h3>
+
+<ul>
+ <li>Исторически <code>eval()</code> имел второй необязательный аргумент, указывающий на то, в контексте какого объекта будет выполняться выражение. Этот аргумент не был стандартизован и был удален из SpiderMonkey в Gecko 1.9.1 (Firefox 3.5). См. {{bug(442333)}}.</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/uneval", "uneval()")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Доступ к свойствам</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/evalerror/index.html b/files/ru/web/javascript/reference/global_objects/evalerror/index.html
new file mode 100644
index 0000000000..016930c2aa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/evalerror/index.html
@@ -0,0 +1,146 @@
+---
+title: EvalError
+slug: Web/JavaScript/Reference/Global_Objects/EvalError
+tags:
+ - Error
+ - EvalError
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/EvalError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Объект <strong><code>EvalError</code></strong> представляет ошибку, возникающую в глобальной функции {{jsxref("Global_objects/eval()", "eval()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>new EvalError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Исключение <code>EvalError</code> выбрасывается при неправильном использовании глобальной функции {{jsxref("Global_objects/eval()", "eval()")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt>{{jsxref("EvalError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>EvalError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Глобальный объект <code>EvalError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="EvalError_instances" name="EvalError_instances">Экземпляры объекта <code>EvalError</code></h2>
+
+<h3 id="Properties_2" name="Properties_2">Свойства</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/EvalError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_2" name="Methods_2">Методы</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/EvalError/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<p>Объект <code>EvalError</code> в настоящий момент не используется и он никогда не выбрасывается в процессе выполнения.</p>
+
+<h3 id="Example:_Create_an_EvalError" name="Example:_Create_an_EvalError">Пример: создание экземпляра объекта <code>EvalError</code></h3>
+<pre class="brush: js">try {
+ throw new EvalError('Привет', 'someFile.js', 10);
+} catch (e) {
+ console.log(e instanceof EvalError); // true
+ console.log(e.message); // "Привет"
+ console.log(e.name); // "EvalError"
+ console.log(e.fileName); // "someFile.js"
+ console.log(e.lineNumber); // 10
+ console.log(e.columnNumber); // 0
+ console.log(e.stack); // "@Scratchpad/2:2:9\n"
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.1', 'EvalError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Не используется в этой спецификаци. Присутствует для обратной совместимости.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-evalerror', 'EvalError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Не используется в этой спецификаци. Присутствует для обратной совместимости.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("EvalError.prototype")}}</li>
+ <li>{{jsxref("Global_objects/eval", "eval()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/evalerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/evalerror/prototype/index.html
new file mode 100644
index 0000000000..d8d02e3709
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/evalerror/prototype/index.html
@@ -0,0 +1,121 @@
+---
+title: EvalError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/EvalError/prototype
+tags:
+ - Error
+ - EvalError
+ - JavaScript
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/EvalError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>EvalError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("EvalError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("EvalError")}} наследуются от объекта <code>EvalError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>EvalError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "EvalError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("EvalError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "EvalError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "EvalError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "EvalError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "EvalError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "EvalError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("EvalError")}} не содержит собственных методов, экземпляры {{jsxref("EvalError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/float32array/index.html b/files/ru/web/javascript/reference/global_objects/float32array/index.html
new file mode 100644
index 0000000000..dec9a2b937
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/float32array/index.html
@@ -0,0 +1,202 @@
+---
+title: Float32Array
+slug: Web/JavaScript/Reference/Global_Objects/Float32Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Float32Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект<strong><code> Float32Array</code></strong> представляет типизированный массив 32-битных чисел с плавающей запятой (соответствует типу float в языке C)  с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте <a class="new" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/DataView" rel="nofollow" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Float32Array</code></strong>, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации - квадратные скобки).</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new Float32Array(); // new in ES2017
+new Float32Array(length);
+new Float32Array(typedArray);
+new Float32Array(object);
+new Float32Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>Для более подробной информации о синтаксисе конструктора и его параметрах смотрите <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float32Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Возвращает число, соответствующее размеру элемента массива в байтах. Для <code>Float32Array</code> это <code>4</code>.</dd>
+ <dt>Float32Array.length</dt>
+ <dd>Статическое свойство "длина" со значением 0. Если хотите получить актуальную длину массива (число элементов) используйте {{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Float32Array.name")}}</dt>
+ <dd>Возвращает строковое представление названия конструктора. В данном случае <code>Float32Array</code> вернёт <code>"Float32Array"</code>.</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Float32Array.prototype")}}</dt>
+ <dd>Прототип объекта <code>TypedArray</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Float32Array.from()")}}</dt>
+ <dd>Создаёт новый <code>Float32Array</code> из массивоподобного или итерируемого объекта. Смотрите также {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Float32Array.of()")}}</dt>
+ <dd>Создаёт новый <code>Float32Array</code> с заданным числом элементов. Смотрите также {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Float32Array_prototype"><code>Float32Array</code> prototype</h2>
+
+<p><code>  </code>Любые <code>Float32Array</code> объекты наследуются от {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<dl>
+ <dt><code>Float32Array.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создаёт экземпляр прототипа. В данном случае это конструктор <code>Float32Array</code>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Float32Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Возвращает {{jsxref("ArrayBuffer")}}, на который ссылается <code>Float32Array.</code> Автоматически изменяется при операциях над массивом и поэтому доступен <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Float32Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Возвращает длину в байтах для <code>Float32Array</code> с начала его {{jsxref("ArrayBuffer")}}. Автоматически изменяется при операциях над массивом и поэтому доступен <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Float32Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Возвращает смещение (в байтах) <code>Float32Array</code> относительно начала {{jsxref("ArrayBuffer")}}. Автоматически изменяется при операциях над массивом и поэтому доступен <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Float32Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Возвращает число элементов, хранящихся в <code>Float32Array</code>. Автоматически изменяется при операциях над массивом и поэтому доступен <strong>только для чтения</strong>.</dd>
+</dl>
+
+<h3 id="Методы_2">Методы</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}</dt>
+ <dd>Копирует последовательность элементов в массив. Смотрите также {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Float32Array.prototype.entries()")}}</dt>
+ <dd>Возвращает новый объект <code>Array Iterator</code>, который содержит пары ключ-значение для каждого элемента в массиве. Смотрите также {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Float32Array.prototype.every()")}}</dt>
+ <dd>Проверяет, что все элементы в массиве соответствуют условию. Смотрите также {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Float32Array.prototype.fill()")}}</dt>
+ <dd>Заполняет весь массив от начального до последнего индекса одинаковыми элементами. Смотрите также {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Float32Array.prototype.filter()")}}</dt>
+ <dd>Возвращает новый массив со всеми элементами удовлетворяющеми условию. Смотрите также {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Float32Array.prototype.find()")}}</dt>
+ <dd>Возвращает найденное значение в массиве, если найден элемент соответствуший условию, в противном случае возвращает <code>undefined</code>. Смотрите также {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Float32Array.prototype.findIndex()")}}</dt>
+ <dd>Возвращает индекс найденного значения в массиве, если найден элемент соответствуеший условию, в противном случае возвращает <font face="Consolas, Liberation Mono, Courier, monospace">-1</font>. Смотрите также {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Float32Array.prototype.forEach()")}}</dt>
+ <dd>Вызывает функцию для каждого элемента в массиве. Смотрите также {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Float32Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Проверяет что массив включает себя элемент, возвращает соответственно true или false. Смотрите также {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Float32Array.prototype.indexOf()")}}</dt>
+ <dd>Возвращает индекс элемента соответствующего условию (равен значению), в противном случае возвращает -1. Смотрите также {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Float32Array.prototype.join()")}}</dt>
+ <dd>Объединяет элементы массива в строку. Смотрите также {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Float32Array.prototype.keys()")}}</dt>
+ <dd>Возвращает новый <code>Array Iterator,</code> который содержит ключи элементов в массиве. Смотрите также {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Float32Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Возвращает последний найденный индекс соответствующий искомому значению, в противном случае возвращает - 1. Смотрите также {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Float32Array.prototype.map()")}}</dt>
+ <dd>Возвращает новый массив с результатом применения функции к каждому элементу в этом массиве. Смотрите также {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Float32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Нестандаризированная версия {{jsxref("TypedArray.copyWithin", "Float32Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Float32Array.prototype.reduce()")}}</dt>
+ <dd>Применяет функцию к каждому элементу в массиве (слева-направо) и накапливает результат в переменной. Смотрите также {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Float32Array.prototype.reduceRight()")}}</dt>
+ <dd>Применяет функцию к каждому элементу в массиве (справа-налево) и накапливает результат в переменной. Смотрите также {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Float32Array.prototype.reverse()")}}</dt>
+ <dd>Переставляет элементы массива в обратном порядке - первый становится последним и так далее. Смотрите также {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Float32Array.prototype.set()")}}</dt>
+ <dd>Сохраняет значения в массиве.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Float32Array.prototype.slice()")}}</dt>
+ <dd>Выделяет часть массива и возвращает новый с этими значениями. Смотрите также {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Float32Array.prototype.some()")}}</dt>
+ <dd>Возвращает true если хотя бы один элемент удовлетворяет условию. Смотрите также {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Float32Array.prototype.sort()")}}</dt>
+ <dd>Сортирует элементы массива по порядку и возвращает этот массив. Смотрите также {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Float32Array.prototype.subarray()")}}</dt>
+ <dd><code>Возваращает новый Float32Array</code> с заданного начального по конечный индекс.</dd>
+ <dt>{{jsxref("TypedArray.values", "Float32Array.prototype.values()")}}</dt>
+ <dd>Возвращает новый объект <code>Array Iterator</code> котрый содержит значения всех элементов в массиве. Смотрите также {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Float32Array.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает локализированную строку представляющую массив и его элементы. Смотрите также {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Float32Array.prototype.toString()")}}</dt>
+ <dd>Возвращает строку представляющую массив и его элементы. Смотрите также {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Float32Array.prototype[@@iterator]()")}}</dt>
+ <dd><code>Возвращает новый объект Array Iterator который содержит значения всех элементов в массиве.</code></dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Разные способы создания <code>Float32Array</code>:</p>
+
+<pre class="brush: js">// Используя указание длины
+var float32 = new Float32Array(2);
+float32[0] = 42;
+console.log(float32[0]); // 42
+console.log(float32.length); // 2
+console.log(float32.BYTES_PER_ELEMENT); // 4
+
+// Из массива
+var arr = new Float32Array([21,31]);
+console.log(arr[1]); // 31
+
+// Из другого TypedArray
+var x = new Float32Array([21, 31]);
+var y = new Float32Array(x);
+console.log(y[0]); // 21
+
+// Из другого ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Float32Array(buffer, 0, 4);
+
+<code class="language-js"><span class="comment token">// Из итератора </span>
+<span class="keyword token">var</span> iterable <span class="operator token">=</span> <span class="keyword token">function</span><span class="operator token">*</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">{</span> <span class="keyword token">yield</span><span class="operator token">*</span> <span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">,</span><span class="number token">2</span><span class="punctuation token">,</span><span class="number token">3</span><span class="punctuation token">]</span><span class="punctuation token">;</span> <span class="punctuation token">}</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> float32 <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">Float32Array</span><span class="punctuation token">(</span>iterable<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="comment token">// Float32Array[1, 2, 3]</span></code></pre>
+
+
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Заменены в ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальное появление в стандарте ECMA. Показывает что <code>new обязательно</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Float32Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Float32Array")}}</p>
+
+
+
+<h2 id="Заметки_по_совместимости">Заметки по совместимости</h2>
+
+<p>Начиная с ECMAScript 2015 (ES6), <code>Float32Array</code> конструктор обязательно должен вызываться с ключевым словом {{jsxref("Operators/new", "new")}}. Вызов <code>Float32Array</code> конструктора как функцию приведет к исключению {{jsxref("TypeError")}}.</p>
+
+<pre class="brush: js example-bad">var dv = Float32Array([1, 2, 3]);
+// TypeError: calling a builtin Float32Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Float32Array([1, 2, 3]);</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/float64array/index.html b/files/ru/web/javascript/reference/global_objects/float64array/index.html
new file mode 100644
index 0000000000..732a6a0667
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/float64array/index.html
@@ -0,0 +1,199 @@
+---
+title: Float64Array
+slug: Web/JavaScript/Reference/Global_Objects/Float64Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Float64Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект<strong><code> </code></strong><strong><code>Float64Array</code></strong> представляет типизированный массив 64-битных чисел с плавающей запятой (соответствует типу <code>double </code>в языке C)  с платформо-зависимым порядком байт.Если необходим контроль за порядком байт, то вместо этого объекта используйте <a class="new" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/DataView" rel="nofollow" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Float64Array</code></strong> , можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации - квадратные скобки).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Float64Array(); // new in ES2017
+new Float64Array(length);
+new Float64Array(typedArray);
+new Float64Array(object);
+new Float64Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>For more information about the constructor syntax and the parameters, see <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Float64Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Returns a number value of the element size. <code>8</code> in the case of an <code>Float64Array</code>.</dd>
+ <dt>Float64Array.length</dt>
+ <dd>Static length property whose value is 0. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Float64Array.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Float64Array</code> type: "Float64Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Float64Array.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Float64Array.from()")}}</dt>
+ <dd>Creates a new <code>Float64Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Float64Array.of()")}}</dt>
+ <dd>Creates a new <code>Float64Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Float64Array_prototype"><code>Float64Array</code> prototype</h2>
+
+<p>All <code>Float64Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Float64Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Float64Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Float64Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Float64Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Float64Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Float64Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Float64Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Float64Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Float64Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Float64Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Float64Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Float64Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Float64Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Float64Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Float64Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Float64Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Float64Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Float64Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Float64Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Float64Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Float64Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Float64Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Float64Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Float64Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Float64Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Float64Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Float64Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Float64Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Float64Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Float64Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Float64Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Float64Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Float64Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Float64Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Float64Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Float64Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Float64Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Float64Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create a <code>Float64Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var float64 = new Float64Array(2);
+float64[0] = 42;
+console.log(float64[0]); // 42
+console.log(float64.length); // 2
+console.log(float64.BYTES_PER_ELEMENT); // 8
+
+// From an array
+var arr = new Float64Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Float64Array([21, 31]);
+var y = new Float64Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(32);
+var z = new Float64Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var float64 = new Float64Array(iterable);
+// Float64Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Float64Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Float64Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Float64Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Float64Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Float64Array([1, 2, 3]);
+// TypeError: calling a builtin Float64Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Float64Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/apply/index.html b/files/ru/web/javascript/reference/global_objects/function/apply/index.html
new file mode 100644
index 0000000000..538c25a654
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/apply/index.html
@@ -0,0 +1,252 @@
+---
+title: Function.prototype.apply()
+slug: Web/JavaScript/Reference/Global_Objects/Function/apply
+tags:
+ - Function
+ - JavaScript
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/apply
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Общие сведения</h2>
+
+<p>Метод <strong><code>apply()</code></strong> вызывает функцию с указанным значением <code>this</code> и аргументами, предоставленными в виде массива (либо <a href="/ru/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Working_with_Array-like_objects">массивоподобного объекта</a>).</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> хотя синтаксис этой функции практически полностью идентичен функции {{jsxref("Function.prototype.call()", "call()")}}, фундаментальное различие между ними заключается в том, что функция <code>call()</code> принимает список аргументов, в то время как функция <code>apply()</code> принимает единичный массив аргументов.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>fun</var>.apply(<var>thisArg</var>, [<var>argsArray</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>thisArg</code></dt>
+ <dd>Опциональный параметр. Значение <code>this</code>, предоставляемое для вызова функции <em><code>fun</code></em>. Обратите внимание, что <code>this</code> может не быть реальным значением, видимым этим методом: если метод является функцией в {{jsxref("Functions_and_function_scope/Strict_mode", "нестрогом режиме", "", 1)}}, значения {{jsxref("Global_Objects/null", "null")}} и {{jsxref("Global_Objects/undefined", "undefined")}} будут заменены глобальным объектом, а примитивные значения будут упакованы в объекты.</dd>
+ <dt><code>argsArray</code></dt>
+ <dd>Опциональный параметр. Массивоподобный объект, определяющий аргументы, с которыми функция <em><code>fun</code></em> должна быть вызвана, либо {{jsxref("Global_Objects/null", "null")}} или {{jsxref("Global_Objects/undefined", "undefined")}}, если в функцию не надо передавать аргументы. Начиная с ECMAScript 5 эти аргументы могут быть обобщёнными массивоподобными объектами, а не только массивом. Смотрите ниже информацию по {{anch("Browser_compatibility", "совместимости с браузерами")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Вы можете присваивать различные объекты <code>this</code> при вызове существующей функции. <code>this</code> ссылается на текущий объект, вызывающий объект. С помощью <code>apply()</code> вы можете написать метод один раз, а затем наследовать его в других объектах без необходимости переписывать метод для каждого нового объекта.</p>
+
+<p>Метод <code>apply</code> очень похож на метод {{jsxref("Function.prototype.call()", "call()")}}, за исключением поддерживаемого типа аргументов. Вы можете использовать массив аргументов вместо набора именованных параметров. Вместе с <code>apply</code> вы можете использовать литерал массива, например, <code><em>fun</em>.apply(this, ['есть', 'бананы'])</code>, либо объект {{jsxref("Global_Objects/Array", "Array")}}, например, <code><em>fun</em>.apply(this, new Array('есть', 'бананы'))</code>.</p>
+
+<p>Также вы можете использовать в качестве параметра <code>argsArray</code> псевдомассив {{jsxref("Functions_and_function_scope/arguments", "arguments")}}. <code>arguments</code> является локальной переменной функции. Он может использоваться для всех неопределённых аргументов вызываемого объекта. Таким образом, вы не обязаны знать, сколько и какие аргументы требует вызываемый объект при использовании метода <code>apply()</code>. Вы можете использовать псевдомассив <code>arguments</code> для передачи всех аргументов в вызываемый объект. Вызываемый объект самостоятельно разберётся с обработкой аргументов.</p>
+
+<p>Начиная с 5-го издания ECMAScript, вы также можете использовать любой вид массивоподобного объекта, что на практике означает, что он должен иметь свойство <code>length</code> и целочисленные свойства в диапазоне <code>(0...length)</code>. В качестве примера, теперь вы можете использовать {{domxref("NodeList")}} или свой собственный объект вида <code>{ 'length': 2, '0': 'есть', '1': 'бананы' }</code>.</p>
+
+<p>{{note("Большинство браузеров, включая Chrome 14 и Internet Explorer 9, всё ещё не принимают массивоподобные объекты и будут выбрасывать исключение.")}}</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_apply_to_chain_constructors" name="Example:_Using_apply_to_chain_constructors">Пример: использование <code>apply()</code> для связи конструкторов объекта в цепочку</h3>
+
+<p>Вы можете использовать метод <code>apply()</code> для объединения в цепочку {{jsxref("Operators/new", "конструкторов", "", 1)}} объекта, как в Java. В следующем примере мы создадим в объекте {{jsxref("Global_Objects/Function", "Function")}} глобальный метод <code>construct()</code>, который позволит нам использовать массивоподобные объекты с конструктором вместо списка аргументов.</p>
+
+<pre class="brush: js">Function.prototype.construct = function (aArgs) {
+ var oNew = Object.create(this.prototype);
+ this.apply(oNew, aArgs);
+ return oNew;
+};
+</pre>
+
+<div class="note">
+<p><strong>Примечание:</strong> метод {{jsxref("Object.create()")}}, использованный в этом примере, относительно новый. В качестве альтернативного способа можно рассмотреть возможность использования замыкания:</p>
+
+<pre class="brush: js">Function.prototype.construct = function(aArgs) {
+ var fConstructor = this, fNewConstr = function() { fConstructor.apply(this, aArgs); };
+ fNewConstr.prototype = fConstructor.prototype;
+ return new fNewConstr();
+};
+</pre>
+</div>
+
+<p>Пример использования:</p>
+
+<pre class="brush: js">function MyConstructor() {
+ for (var nProp = 0; nProp &lt; arguments.length; nProp++) {
+ this['property' + nProp] = arguments[nProp];
+ }
+}
+
+var myArray = [4, 'Привет, мир!', false];
+var myInstance = MyConstructor.construct(myArray);
+
+alert(myInstance.property1); // выведет 'Привет, мир!'
+alert(myInstance instanceof MyConstructor); // выведет 'true'
+alert(myInstance.constructor); // выведет 'MyConstructor'
+</pre>
+
+<div class="note">
+<p><strong>Примечание:</strong> этот неродной метод <code>Function.construct()</code> не будет работать с некоторыми родными конструкторами (вроде конструктора {{jsxref("Global_Objects/Date", "Date")}}, к примеру). В этих случаях вы можете использовать метод {{jsxref("Function.prototype.bind()")}} (например, представьте, что вы имеете следующий массив, который можно использовать с конструктором {{jsxref("Global_Objects/Date", "Date")}}: <code>[2012, 11, 4]</code>; в этом случае вы напишите что-то вроде: <code>new (Function.prototype.bind.apply(Date, [null].concat([2012, 11, 4])))()</code> — так или иначе, это не самый изящный способ и, вероятно, его не стоит использовать в рабочем окружении).</p>
+</div>
+
+<h3 id="Example_Using_apply_and_built-in_functions" name="Example:_Using_apply_and_built-in_functions">Пример: использование <code>apply()</code> и встроенных функций</h3>
+
+<p>Умное использование метода <code>apply()</code> позволяет вам использовать встроенные функции для некоторых задач, для которых в противном случае пришлось бы писать цикл по массиву значений. В качестве примера давайте используем {{jsxref("Math.max()")}}/{{jsxref("Math.min()")}} для нахождения максимального/минимального значения в массиве.</p>
+
+<pre class="brush: js">/* мин/макс числа в массиве */
+var numbers = [5, 6, 2, 3, 7];
+
+/* используем apply к Math.min/Math.max */
+var max = Math.max.apply(null, numbers); /* Это эквивалентно Math.max(numbers[0], ...)
+ или Math.max(5, 6, ...) */
+var min = Math.min.apply(null, numbers);
+
+/* сравним с простым алгоритмом с циклом */
+max = -Infinity, min = +Infinity;
+
+for (var i = 0; i &lt; numbers.length; i++) {
+ if (numbers[i] &gt; max) {
+ max = numbers[i];
+ }
+ if (numbers[i] &lt; min) {
+ min = numbers[i];
+ }
+}
+</pre>
+
+<p>Но будьте осторожны: при использовании метода <code>apply()</code> таким образом вы рискуете выйти за пределы ограничения на количество аргументов в движке JavaScript. Последствия применения функции с очень большим количеством аргументов (думается, больше десяти тысяч аргументов) различаются от движка к движку (JavaScriptCore имеет жёстко зашитое <a class="link-https" href="https://bugs.webkit.org/show_bug.cgi?id=80797">ограничение на количество аргументов в 65536</a>), поскольку этот предел (на самом деле, это природа поведения любого чрезвычайно огромного стека) не определён. Некоторые движки будут выкидывать исключение. Хуже того, другие просто отбрасывают реально переданные функции аргументы сверх лимита. (Для иллюстрации последнего случая: если такой движок имеет ограничение в четыре элемента [реальное ограничение, конечно же, гораздо выше], это выглядело бы так, как если бы в примере выше в метод <code>apply()</code> были переданы аргументы <code>5, 6, 2, 3</code>, а не весь массив.) Если ваш масив значений может вырасти до десятков тысяч, используйте смешанный подход: применяйте вашу функцию к порциям массива:</p>
+
+<pre class="brush: js">function minOfArray(arr) {
+ var min = Infinity;
+ var QUANTUM = 32768;
+
+ for (var i = 0, len = arr.length; i &lt; len; i += QUANTUM) {
+ var submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len)));
+ min = Math.min(submin, min);
+ }
+
+ return min;
+}
+
+var min = minOfArray([5, 6, 2, 3, 7]);
+</pre>
+
+<h3 id="Example_Using_apply_in_monkey-patching" name="Example:_Using_apply_in_monkey-patching">Пример: использование <code>apply()</code> в «monkey-патчинге»</h3>
+
+<p>Метод <code>apply()</code> может быть лучшим вариантом для «monkey-патчинга» встроенных в Firefox функций, либо JS библиотек. Пусть у вас есть функция <code>someobject.foo()</code>, вы можете изменить её таким немного хакерским способом:</p>
+
+<pre class="brush: js">var originalfoo = someobject.foo;
+someobject.foo = function() {
+ // Делаем что-то до вызова функции
+ console.log(arguments);
+ // Вызываем функцию так, как будто бы она была вызвана обычным образом:
+ originalfoo.apply(this, arguments);
+ // Делаем что-то после вызова функции.
+}
+</pre>
+
+<p>Этот метод особенно удобен, когда вам нужно отладить события, либо интерфейс с чем-то, что не имеет API, вроде различных событий <code>.on([event]...</code>, например, тех что используются в <a href="/ru/docs/Tools/Page_Inspector#Developer_API">Инспекторе инструментов разработчика</a>).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.4.3', 'Function.prototype.apply')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype.apply', 'Function.prototype.apply')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Обобщённые массивоподобные объекты ES 5.1, вроде {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop("2.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Обобщённые массивоподобные объекты ES 5.1, вроде {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("2.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>объект {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</li>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и их область видимости", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/arguments/index.html b/files/ru/web/javascript/reference/global_objects/function/arguments/index.html
new file mode 100644
index 0000000000..7b089887c4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/arguments/index.html
@@ -0,0 +1,116 @@
+---
+title: Function.arguments
+slug: Web/JavaScript/Reference/Global_Objects/Function/arguments
+tags:
+ - Deprecated
+ - Function
+ - JavaScript
+ - Property
+ - arguments
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/arguments
+---
+<div>
+ {{JSRef("Global_Objects", "Function")}} {{deprecated_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong><em>function</em>.arguments</strong></code> ссылалось на массивоподобный объект, соответствующий аргументам, переданным в функцию. Используйте вместо него простую переменную {{jsxref("Functions_and_function_scope/arguments", "arguments")}}.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Синтаксис <code><em>function</em>.arguments</code> устарел. Рекомендуемым способом доступа к объекту {{jsxref("Functions_and_function_scope/arguments", "arguments")}}, доступному внутри функций, являеся простая ссылка на переменную {{jsxref("Functions_and_function_scope/arguments", "arguments")}}.</p>
+<p>В случае рекурсии, то есть, если функция <code>f</code> несколько раз появляется в стеке вызовов, значение <code>f.arguments</code> представляет аргументы, соответствующие самому последнему вызову функции.</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">function f(n) { g(n - 1); }
+
+function g(n) {
+ console.log('до: ' + g.arguments[0]);
+ if (n &gt; 0) { f(n); }
+ console.log('после: ' + g.arguments[0]);
+}
+
+f(2);
+
+
+// Вывод
+
+// до: 1
+// до: 0
+// после: 0
+// после: 1
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0. Устарело в связи с объектом {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.6', 'объект arguments')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Объект {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-arguments-object', 'объект arguments')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Объект {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>объект {{jsxref("Functions_and_function_scope/arguments", "arguments")}}</li>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и их область видимости", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/arity/index.html b/files/ru/web/javascript/reference/global_objects/function/arity/index.html
new file mode 100644
index 0000000000..8bcd00363b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/arity/index.html
@@ -0,0 +1,30 @@
+---
+title: Function.arity
+slug: Web/JavaScript/Reference/Global_Objects/Function/arity
+tags:
+ - Function
+ - JavaScript
+ - Obsolete
+ - Property
+ - Unimplemented
+translation_of: Archive/Web/JavaScript/Function.arity
+---
+<div>{{JSRef}}{{Obsolete_Header}}</div>
+
+<p class="note">Свойство <code><strong>arity</strong></code> использовалось для возврата количества ожидаемых функцией аргументов, однако, оно больше не существует и было заменено свойством {{JSxRef("Function.prototype.length")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Реализовано в JavaScript 1.2. Устарело в JavaScript 1.4.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на данной странице составлена из структурированных данных. Чтобы поучаствовать в работе над данными, пожалуйста, обратитесь к репозиторию <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на включение изменений.</div>
+
+<p>{{Compat("javascript.builtins.Function.arity")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("Function.prototype.length")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..325c24fa0b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/bind/index.html
@@ -0,0 +1,311 @@
+---
+title: Function.prototype.bind()
+slug: Web/JavaScript/Reference/Global_Objects/Function/bind
+tags:
+ - ECMAScript5
+ - ECMAScript6
+ - Function
+ - JavaScript
+ - Method
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/bind
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>bind()</strong></code> создаёт новую функцию, которая при вызове устанавливает в качестве контекста выполнения <code>this</code> предоставленное значение. В метод также передаётся набор аргументов, которые будут установлены перед переданными в привязанную функцию аргументами при её вызове.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>fun</var>.bind(<var>thisArg</var>[, <var>arg1</var>[, <var>arg2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>thisArg</code></dt>
+ <dd>Значение, передаваемое в качестве <code>this</code> в целевую функцию при вызове привязанной функции. Значение игнорируется, если привязанная функция конструируется с помощью оператора {{jsxref("Operators/new", "new")}}.</dd>
+ <dt><code>arg1, arg2, ...</code></dt>
+ <dd>Аргументы целевой функции, передаваемые перед аргументами привязанной функции при вызове целевой функции.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>bind()</code> создаёт новую "<strong>привязанную функцию</strong>" (<strong>ПФ</strong>).  <strong>ПФ</strong> <span class="translation-chunk">- это "необычный </span> <span class="translation-chunk">функциональный объект" ( термин из </span> <strong>ECMAScript 6</strong> <span class="translation-chunk"> ), который является оберткой над исходным </span> <span class="translation-chunk">функциональным объектом. Вызов </span> <strong>ПФ</strong> <span class="translation-chunk">  приводит к исполнению кода обернутой функции.</span></p>
+
+<p><strong>ПФ</strong> <span class="translation-chunk"> имеет следующие внутренние ( скрытые ) свойства:</span></p>
+
+<ul>
+ <li><span class="translation-chunk"><strong>[[BoundTargetFunction]]</strong> - оборачиваемый  (целевой ) </span> <span class="translation-chunk">функциональный </span><span class="translation-chunk">объект</span></li>
+ <li><span class="translation-chunk"><strong>[[BoundThis]]</strong> - значение, которое всегда передается в качестве значения   <strong>this </strong>при вызове обернутой функции.</span></li>
+ <li><span class="translation-chunk"><strong>[[BoundArguments]] </strong>- список значений, элементы которого используются в качестве первого аргумента при вызове оборачиваемой функции.</span></li>
+ <li><strong><span class="translation-chunk">[[</span>Call</strong><span class="translation-chunk"><strong>]] </strong>- внутренний метод. Выполняет код (функциональное выражение), связанный с функциональным объектом. </span></li>
+</ul>
+
+<p><span class="translation-chunk">Когда <strong>ПФ </strong>вызывается, исполняется ее внутренний метод </span> <strong>[[Call]]</strong> <span class="translation-chunk"> со следующими аргументами </span> <strong>Call(<em>target</em>, <em>boundThis</em>, <em>args</em>).</strong></p>
+
+<ul>
+ <li><strong><em>target</em></strong> <span class="translation-chunk">  -    <strong>[[BoundTargetFunction]]</strong>;</span></li>
+ <li><span class="translation-chunk"><em><strong>boundThis </strong></em></span><em><strong> <span class="translation-chunk"> </span> </strong></em><span class="translation-chunk"><em><strong>  </strong></em>-    </span><strong> </strong><span class="translation-chunk"><strong>[[BoundThis]]</strong>;</span></li>
+ <li><em><strong>args  </strong></em> -  <strong> <span class="translation-chunk">[[BoundArguments]].</span></strong></li>
+</ul>
+
+<p>Привязанная функция также может быть сконструирована с помощью оператора {{jsxref("Operators/new", "new")}}: это работает так, как если бы вместо неё конструировалась целевая функция. Предоставляемое значение <code>this</code> в этом случае игнорируется, хотя ведущие аргументы всё ещё передаются в эмулируемую функцию.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Creating_a_bound_function" name="Example:_Creating_a_bound_function">Пример: создание привязанной функции</h3>
+
+<p>Простейшим способом использования <code>bind()</code> является создание функции, которая, вне зависимости от способа её вызова, вызывается с определённым значением <code>this</code>. Обычным заблуждением для новичков в JavaScript является извлечение метода из объекта с целью его дальнейшего вызова в качестве функции и ожидание того, что он будет использовать оригинальный объект в качестве своего значения <code>this</code> (например, такое может случиться при использовании метода как функции обратного вызова). Однако, без специальной обработки, оригинальный объект зачастую теряется. Создание привязанной функции из функции, использующей оригинальный объект, изящно решает эту проблему:</p>
+
+<pre class="brush: js">this.x = 9;
+var module = {
+  x: 81,
+  getX: function() { return this.x; }
+};
+
+module.getX(); // 81
+
+var getX = module.getX;
+getX(); // 9, поскольку в этом случае this ссылается на глобальный объект
+
+// создаём новую функцию с this, привязанным к module
+var boundGetX = getX.bind(module);
+boundGetX(); // 81
+</pre>
+
+<h3 id="Example:_Partial_Functions" name="Example:_Partial_Functions">Пример: частичные функции</h3>
+
+<p>Следующим простейшим способом использования <code>bind()</code> является создание функции с предопределёнными аргументами. Эти аргументы (если они есть) передаются после значения <code>this</code> и вставляются перед аргументами, передаваемыми в целевую функцию при вызове привязанной функции.</p>
+
+<pre class="brush: js">function list() {
+ return Array.prototype.slice.call(arguments);
+}
+
+var list1 = list(1, 2, 3); // [1, 2, 3]
+
+// Создаём функцию с предустановленным ведущим аргументом
+var leadingThirtysevenList = list.bind(undefined, 37);
+
+var list2 = leadingThirtysevenList(); // [37]
+var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
+</pre>
+
+<h3 id="Example:_With_setTimeout" name="Example:_With_setTimeout">Пример: с <code>setTimeout</code></h3>
+
+<p>По умолчанию, внутри {{domxref("window.setTimeout()")}} контекст <code>this</code> устанавливается в объект {{domxref("window")}} (или <code>global</code>). При работе с методами класса, требующими <code>this</code> для ссылки на экземпляры класса, вы можете явно привязать <code>this</code> к функции обратного вызова для сохранения экземпляра.</p>
+
+<pre class="brush: js">function LateBloomer() {
+ this.petalCount = Math.ceil(Math.random() * 12) + 1;
+}
+
+// Объявляем цветение с задержкой в 1 секунду
+LateBloomer.prototype.bloom = function() {
+ window.setTimeout(this.declare.bind(this), 1000);
+};
+
+LateBloomer.prototype.declare = function() {
+ console.log('Я прекрасный цветок с ' +
+ this.petalCount + ' лепестками!');
+};
+</pre>
+
+<h3 id="Example:_Bound_functions_used_as_constructors" name="Example:_Bound_functions_used_as_constructors">Пример: привязывание функций, используемых в качестве конструкторов</h3>
+
+<div class="warning">
+<p><strong>Предупреждение:</strong> этот раздел демонстрирует возможности JavaScript и документирует некоторые граничные случаи использования метода <code>bind()</code>. Показанные ниже методы не являются лучшей практикой и, вероятно, их не следует использовать в рабочем окружении.</p>
+</div>
+
+<p>Привязанные функции автоматически подходят для использования вместе с оператором {{jsxref("Operators/new", "new")}} для конструирования новых экземпляров, создаваемых целевой функцией. Когда привязанная функция используется для конструирования значения, предоставляемое значение <code>this</code> игнорируется. Однако, предоставляемые аргументы всё так же вставляются перед аргументами конструктора:</p>
+
+<pre class="brush: js">function Point(x, y) {
+ this.x = x;
+ this.y = y;
+}
+
+Point.prototype.toString = function() {
+ return this.x + ',' + this.y;
+};
+
+var p = new Point(1, 2);
+p.toString(); // '1,2'
+
+
+var emptyObj = {};
+var YAxisPoint = Point.bind(emptyObj, 0/*x*/);
+// не поддерживается полифиллом, приведённым ниже,
+// но отлично работает с родным bind:
+var YAxisPoint = Point.bind(null, 0/*x*/);
+
+var axisPoint = new YAxisPoint(5);
+axisPoint.toString(); // '0,5'
+
+axisPoint instanceof Point; // true
+axisPoint instanceof YAxisPoint; // true
+new Point(17, 42) instanceof YAxisPoint; // true
+</pre>
+
+<p>Обратите внимание, что вам не нужно делать ничего особенного для создания привязанной функции, используемой с оператором {{jsxref("Operators/new", "new")}}. В итоге, для создания явно вызываемой привязанной функции, вам тоже не нужно делать ничего особенного, даже если вам требуется, чтобы привязанная функция вызывалась только с помощью оператора {{jsxref("Operators/new", "new")}}.</p>
+
+<pre class="brush: js">// Пример может быть запущен прямо в вашей консоли JavaScript
+// ...продолжение примера выше
+
+// Всё ещё можно вызывать как нормальную функцию
+// (хотя обычно это не предполагается)
+YAxisPoint(13);
+
+emptyObj.x + ',' + emptyObj.y;
+// &gt; '0,13'
+</pre>
+
+<p>Если вы хотите поддерживать использование привязанной функции только с помощью оператора {{jsxref("Operators/new", "new")}}, либо только с помощью прямого вызова, целевая функция должна предусматривать такие ограничения.</p>
+
+<h3 id="Example:_Creating_shortcuts" name="Example:_Creating_shortcuts">Пример: создание сокращений</h3>
+
+<p>Метод <code>bind()</code> также полезен в случаях, если вы хотите создать сокращение для функции, требующей определёное значение <code>this</code>.</p>
+
+<p>Возьмём, например, метод {{jsxref("Array.prototype.slice")}}, который вы можете использовать для преобразования массивоподобного объекта в настоящий массив. Вы можете создать подобное сокращение:</p>
+
+<pre class="brush: js">var slice = Array.prototype.slice;
+
+// ...
+
+slice.call(arguments);
+</pre>
+
+<p>С помощью метода <code>bind()</code>, это сокращение может быть упрощено. В следующем куске кода <code>slice</code> является функцией, привязанной к функции {{jsxref("Function.prototype.call()", "call()")}} объекта {{jsxref("Function.prototype")}}, со значением <code>this</code>, установленным в функцию {{jsxref("Array.prototype.slice()", "slice()")}} объекта {{jsxref("Array.prototype")}}. Это означает, что дополнительный вызов <code>call()</code> может быть устранён:</p>
+
+<pre class="brush: js">// Тоже самое, что и slice в предыдущем примере
+var unboundSlice = Array.prototype.slice;
+var slice = Function.prototype.call.bind(unboundSlice);
+
+// ...
+
+slice(arguments);
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Функция <code>bind</code> является дополнением к стандарту ECMA-262 5-го издания; поэтому она может присутствовать не во всех браузерах. Вы можете частично обойти это ограничение, вставив следующий код в начало ваших скриптов, он позволяет использовать большую часть возможностей <code>bind()</code> в реализациях, не имеющих его родной поддержки.</p>
+
+<pre class="brush: js">if (!Function.prototype.bind) {
+ Function.prototype.bind = function(oThis) {
+ if (typeof this !== 'function') {
+ // ближайший аналог внутренней функции
+ // IsCallable в ECMAScript 5
+ throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
+ }
+
+ var aArgs = Array.prototype.slice.call(arguments, 1),
+ fToBind = this,
+ fNOP = function() {},
+ fBound = function() {
+ return fToBind.apply(this instanceof fNOP &amp;&amp; oThis
+ ? this
+ : oThis,
+ aArgs.concat(Array.prototype.slice.call(arguments)));
+ };
+
+ fNOP.prototype = this.prototype;
+ fBound.prototype = new fNOP();
+
+ return fBound;
+ };
+}
+</pre>
+
+<p>Некоторые из многих отличий (так же могут быть и другие, данный список далеко не исчерпывающий) между этой реализацией и реализацией по умолчанию:</p>
+
+<ul>
+ <li>Частичная реализация предполагает, что методы {{jsxref("Array.prototype.slice()")}}, {{jsxref("Array.prototype.concat()")}}, {{jsxref("Function.prototype.call()")}} и {{jsxref("Function.prototype.apply()")}} являются встроенными, имеют своё первоначальное значение.</li>
+ <li>Частичная реализация создаёт функции, не имеющие неизменяемых свойств «отравленной пилюли» — {{jsxref("Function.caller", "caller")}} и <code>arguments</code> — которые выбрасывают исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} при попытке получить, установить или удалить эти свойства. (Такие свойства могут быть добавлены, если реализация поддерживает {{jsxref("Object.defineProperty")}}, либо частично реализованы [без поведения исключение-при-попытке-удаления], если реализация поддерживает расширения {{jsxref("Object.defineGetter", "__defineGetter__")}} и {{jsxref("Object.defineSetter", "__defineSetter__")}}.)</li>
+ <li>Частичная реализация создаёт функции, имеющие свойство <code>prototype</code>. (Правильная привязанная функция его не имеет.)</li>
+ <li>Частичная реализация создаёт привязанные функции, чьё свойство {{jsxref("Function.length", "length")}} не соответствует с определением в ECMA-262; оно равно 0, в то время, как полная реализация, в зависимости от значения свойства <code>length</code> целевой функции и количества предопределённых аргументов, может вернуть значение, отличное от нуля.</li>
+</ul>
+
+<p>Если вы решили использовать частичную реализацию, <strong>не рассчитывайте на корректную работу в тех случаях, когда реализация отклоняется от спецификации ECMA-262 5-го издания!</strong> Однако, в определённых случаях (и, возможно, с дополнительными модификациями для отдельных нужд), применение данной частичной реализации может быть вполне оправданным до тех пор, пока <code>bind()</code> не станет широко реализован в соответствии со спецификацией.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.4.5', 'Function.prototype.bind')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype.bind', 'Function.prototype.bind')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("7")}}</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("11.60")}}</td>
+ <td>{{CompatSafari("5.1.4")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatAndroid("4.0")}}</td>
+ <td>{{CompatChrome("0.16")}}</td>
+ <td>{{CompatGeckoMobile("2")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOperaMobile("11.50")}}</td>
+ <td>{{CompatSafari("6.0")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>На основе <a href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и их область видимости", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/call/index.html b/files/ru/web/javascript/reference/global_objects/function/call/index.html
new file mode 100644
index 0000000000..500c4af182
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/call/index.html
@@ -0,0 +1,175 @@
+---
+title: Function.prototype.call()
+slug: Web/JavaScript/Reference/Global_Objects/Function/call
+tags:
+ - Function
+ - JavaScript
+ - Method
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/call
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>call()</strong></code> вызывает функцию с указанным значением <code>this</code> и индивидуально предоставленными аргументами.</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> хотя синтаксис этой функции практически полностью идентичен функции {{jsxref("Function.prototype.apply", "apply()")}}, фундаментальное различие между ними заключается в том, что функция <code>call()</code> принимает <strong>список аргументов</strong>, в то время, как функция <code>apply()</code> <strong>- одиночный массив аргументов</strong>.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>fun</var>.call(<var>thisArg</var>[, <var>arg1</var>[, <var>arg2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>thisArg</code></dt>
+ <dd>Значение <code>this</code>, предоставляемое для вызова функции <em><code>fun</code></em>. Обратите внимание, что <code>this</code> может не быть реальным значением, видимым этим методом: если метод является функцией в {{jsxref("Functions_and_function_scope/Strict_mode", "нестрогом режиме", "", 1)}}, значения {{jsxref("Global_Objects/null", "null")}} и {{jsxref("Global_Objects/undefined", "undefined")}} будут заменены глобальным объектом, а примитивные значения будут упакованы в объекты.</dd>
+ <dt><code>arg1, arg2, ...</code></dt>
+ <dd>Аргументы для объекта.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Вы можете присваивать различные объекты <code>this</code> при вызове существующей функции. <code>this</code> ссылается на текущий объект, вызвавший объект. С помощью <code>call</code> вы можете написать метод один раз, а затем наследовать его в других объектах, без необходимости переписывать метод для каждого нового объекта.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_call_to_chain_constructors_for_an_object" name="Example:_Using_call_to_chain_constructors_for_an_object">Пример: использование <code>call</code> для связи конструкторов объекта в цепочку</h3>
+
+<p>Вы можете использовать метод <code>call</code> для объединения в цепочку {{jsxref("Operators/new", "конструкторов", "", 1)}} объекта, как в Java. В следующем примере для объекта продукта <code>Product</code> объявлен конструктор с двумя параметрами, названием <code>name</code> и ценой <code>price</code>. Продукт инициализирует свойства <code>name</code> и <code>price</code>, а специализированные функции определяют ещё категорию <code>category</code>.</p>
+
+<pre class="brush: js">function Product(name, price) {
+ this.name = name;
+ this.price = price;
+
+ if (price &lt; 0) {
+ throw RangeError('Нельзя создать продукт ' +
+ this.name + ' с отрицательной ценой');
+ }
+}
+
+function Food(name, price) {
+ Product.call(this, name, price);
+ this.category = 'еда';
+}
+
+Food.prototype = Object.create(Product.prototype);
+
+function Toy(name, price) {
+ Product.call(this, name, price);
+ this.category = 'игрушка';
+}
+
+Toy.prototype = Object.create(Product.prototype);
+
+var cheese = new Food('фета', 5);
+var fun = new Toy('робот', 40);
+</pre>
+
+<h3 id="Example_Using_call_to_invoke_an_anonymous_function" name="Example:_Using_call_to_invoke_an_anonymous_function">Пример: использование <code>call</code> для вызова анонимной функции</h3>
+
+<p>В этом чисто искусственном примере, мы создаём анонимную функцию и используем <code>call</code> для вызова её на каждом элементе массива. Главная задача анонимной функции здесь — добавить функцию печати в каждый объект, способную напечатать правильный индекс объекта в массиве. Передача объекта в качестве значения <code>this</code> не является острой необходимостью, но мы делаем это в целях объяснения.</p>
+
+<pre class="brush: js">var animals = [
+ { species: 'Лев', name: 'Король' },
+ { species: 'Кит', name: 'Фэйл' }
+];
+
+for (var i = 0; i &lt; animals.length; i++) {
+ (function(i) {
+ this.print = function() {
+ console.log('#' + i + ' ' + this.species
+ + ': ' + this.name);
+ }
+ this.print();
+ }).call(animals[i], i);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/caller/index.html b/files/ru/web/javascript/reference/global_objects/function/caller/index.html
new file mode 100644
index 0000000000..4055eaf092
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/caller/index.html
@@ -0,0 +1,131 @@
+---
+title: Function.caller
+slug: Web/JavaScript/Reference/Global_Objects/Function/caller
+tags:
+ - Function
+ - JavaScript
+ - Non-standard
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/caller
+---
+<div>{{JSRef("Global_Objects", "Function")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <code><strong><em>function</em>.caller</strong></code> возвращает функцию, которая вызвала указанную функцию.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если функция <code>f</code> была вызвана из кода самого верхнего уровня, значение <code>f.caller</code> будет равно {{jsxref("Global_Objects/null", "null")}}, в противном случае значение будет равно функции, вызвавшей <code>f</code>.</p>
+
+<p>Это свойство пришло на замену удалённого свойства {{jsxref("Functions_and_function_scope/arguments/caller", "arguments.caller")}} объекта {{jsxref("Functions_and_function_scope/arguments", "arguments")}}.</p>
+
+<p>Специальное свойство <code>__caller__</code>, возвращающее объект активации вызывающей функции и, таким образом, позволяющее восстанавливать стек вызовов, было удалено по соображениям безопасности.</p>
+
+<h3 id="Notes" name="Notes">Примечания</h3>
+
+<p>Обратите внимание, что в случае рекурсии, вы не сможете воссоздать стек вызовов, используя это свойство. Пусть у нас есть функции:</p>
+
+<pre class="brush: js">function f(n) { g(n - 1); }
+function g(n) { if (n &gt; 0) { f(n); } else { stop(); } }
+f(2);
+</pre>
+
+<p>В момент вызова функции <code>stop()</code>, стек вызовов имеет следующий вид:</p>
+
+<pre class="eval">f(2) -&gt; g(2) -&gt; f(2) -&gt; g(1) -&gt; f(1) -&gt; g(0) -&gt; stop()
+</pre>
+
+<p>Следующее условие верно:</p>
+
+<pre class="eval">stop.caller === g &amp;&amp; f.caller === g &amp;&amp; g.caller === f
+</pre>
+
+<p>так что если вы попытаетесь оттрассировать стек в функции <code>stop()</code> подобным образом:</p>
+
+<pre class="brush: js">var f = stop;
+var stack = 'Трассировка стека:';
+while (f) {
+ stack += '\n' + f.name;
+ f = f.caller;
+}
+</pre>
+
+<p>то этот цикл никогда не остановится.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Checking_the_value_of_a_function.27s_caller_property" name="Example:_Checking_the_value_of_a_function.27s_caller_property">Пример: проверка значения свойства <code>caller</code> функции</h3>
+
+<p>Следующий код проверяет значение свойства <code>caller</code> функции.</p>
+
+<pre class="brush: js">function myFunc() {
+ if (myFunc.caller == null) {
+ return 'Эта функция была вызвана из верхнего уровня!';
+ } else {
+ return 'Эта функция была вызвана из ' + myFunc.caller;
+ }
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какой-либо спецификации. Реализована в JavaScript 1.5.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Ошибка реализации в SpiderMonkey: {{bug(65683)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/displayname/index.html b/files/ru/web/javascript/reference/global_objects/function/displayname/index.html
new file mode 100644
index 0000000000..11bae88221
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/displayname/index.html
@@ -0,0 +1,111 @@
+---
+title: Function.displayName
+slug: Web/JavaScript/Reference/Global_Objects/Function/displayName
+tags:
+ - Function
+ - JavaScript
+ - Non-standard
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/displayName
+---
+<div>
+ {{JSRef("Global_Objects", "Function")}} {{Non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong><em>function</em>.displayName</strong></code> возвращает отображаемое имя функции.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если оно определено, свойство <code>displayName</code> возвращает отображаемое имя функции:</p>
+<pre class="brush: js">function doSomething() {}
+
+alert(doSomething.displayName); // "undefined"
+
+var popup = function(content) { alert(content); };
+
+popup.displayName = 'Показать всплывающее окно';
+
+alert(popup.displayName); // "Показать всплывающее окно"
+</pre>
+<p>Вы можете определить функцию с отображаемым именем в {{jsxref("Functions_and_function_scope", "выражении функции", "", 1)}}:</p>
+<pre class="brush: js">var object = {
+ someMethod: function() {}
+};
+
+object.someMethod.displayName = 'someMethod';
+
+alert(object.someMethod.displayName); // выведет "someMethod"
+
+try { someMethod } catch(e) { alert(e); }
+// ReferenceError: someMethod is not defined
+</pre>
+<p>Вы можете динамически изменять свойство <code>displayName</code> функции:</p>
+<pre class="brush: js">var object = {
+ // анонимная функция
+ someMethod: function(value) {
+ this.displayName = 'someMethod (' + value + ')';
+ }
+};
+
+alert(object.someMethod.displayName); // "undefined"
+
+object.someMethod('123')
+alert(object.someMethod.displayName); // "someMethod (123)"
+</pre>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<p>Обычно оно используется консолью и профилировщиком, как обёртка над {{jsxref("Function.name", "func.name")}} для отображения имени функции.</p>
+<p>Введя следующий пример в консоль, вы должны увидеть что-то вроде "<code>function Моя функция()</code>":</p>
+<pre class="brush: js">var a = function() {};
+a.displayName = 'Моя функция';
+
+a
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop(13)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p> </p>
diff --git a/files/ru/web/javascript/reference/global_objects/function/index.html b/files/ru/web/javascript/reference/global_objects/function/index.html
new file mode 100644
index 0000000000..63d7e776c0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/index.html
@@ -0,0 +1,200 @@
+---
+title: Function
+slug: Web/JavaScript/Reference/Global_Objects/Function
+tags:
+ - JavaScript
+ - Конструктор
+ - Функция
+translation_of: Web/JavaScript/Reference/Global_Objects/Function
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<p>{{JSRef}}</p>
+
+<p><strong><code>Function</code> constructor</strong> создает новый объект <code>Function</code>. Вызов <code>constructor</code> создает функцию динамически, но страдает от проблем безопасности и аналогичных (но гораздо менее значительных) проблем производительности {{jsxref("eval")}}. Однако, в отличие от eval, конструктор функций создает функции, которые выполняются только в глобальной области..</p>
+
+<p>{{EmbedInteractiveExample("pages/js/function-constructor.html")}}</p>
+
+<div class="hidden">
+<p>Источник для этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект interactive examples, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p>Каждая функция JavaScript на самом деле является объектом функции. Это можно увидеть с помощью кода <code>(function(){}).constructor === Function</code> которая возвращает true.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new Function([<var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]],] <var>functionBody</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Имена, используемые функцией в качестве имён формальных аргументов. Каждое имя должно быть строкой, представляющий допустимый идентификатор JavaScript, либо списком таких строк, разделённых запятой; например "<code>x</code>", "<code>theValue</code>" или "<code>a,b</code>".</dd>
+ <dt><code>functionBody</code></dt>
+ <dd>Строка, содержащая инструкции JavaScript, составляющие определение функции.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объекты <code>Function</code>, созданные констуктором <code>Function</code>, разбираются при создании функции. Это менее эффективно определения функции при помощи <a href="/ru/docs/Web/JavaScript/Reference/Operators/function">выражения <code>function</code></a> или <a href="/ru/docs/Web/JavaScript/Reference/Statements/function">инструкции <code>function</code></a> и вызова её внутри вашего кода, поскольку такие функции разбираются вместе с остальным кодом.</p>
+
+<p>Все аргументы, переданные в функцию, трактуются как имена идентификаторов параметров создаваемой функции, и имеют тот же порядок следования, что и при их передаче в конструктор функции.</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> функции, созданные конструктором <code>Function</code>, не создают замыканий на их контексты создания; они всегда создаются в глобальной области видимости. При их вызове, они получат доступ только к своим локальным переменным и переменным из глобальной области видимости, но не к переменным в той области видимости, в которой вызывался конструктор <code>Function</code>. Это поведение отличается от поведения при использовании функции {{jsxref("Global_Objects/eval", "eval")}} с кодом создания функции.</p>
+</div>
+
+<p>Вызов констуктора <code>Function</code> как функции (без использования оператора <code>new</code>) имеет тот же самый эффект, что и вызов его как констуктора.</p>
+
+<h2 id="Properties_and_Methods_of_Function" name="Properties_and_Methods_of_Function">Свойства и методы объекта <code>Function</code></h2>
+
+<p>Глобальный объект <code>Function</code> не имеет собственных методов или свойств, однако, поскольку он сам является функцией, он наследует некоторые методы и свойства через цепочку прототипов объекта {{jsxref("Function.prototype")}}.</p>
+
+<h2 id="Function_prototype_object" name="Function_prototype_object">Прототип объекта <code>Function</code></h2>
+
+<h3 id="Properties" name="Properties">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Properties')}}</div>
+
+<h3 id="Methods" name="Methods">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype', 'Methods')}}</div>
+
+<h2 id="Function_instances" name="Function_instances">Экземпляры объекта <code>Function</code></h2>
+
+<p>Экземпляры объекта <code>Function</code> наследуют методы и свойства из объекта {{jsxref("Function.prototype")}}. Как и со всеми другими конструкторами, вы можете изменить объект прототипа констуктора для применения изменений ко всем экземплярам объекта <code>Function</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Specifying_arguments_with_the_Function_constructor" name="Example:_Specifying_arguments_with_the_Function_constructor">Пример: указание аргументов в конструкторе <code>Function</code></h3>
+
+<p>Следующий код создаёт объект <code>Function</code>, который принимает два аргумента.</p>
+
+<pre class="brush: js">// Пример может быть запущен непосредственно в вашей консоли JavaScript
+
+// Создаём функцию, принимающую два аргумента, и возвращающую их сумму
+var adder = new Function('a', 'b', 'return a + b');
+
+// Вызываем функцию
+adder(2, 6);
+// &gt; 8
+</pre>
+
+<p>Аргуметы "<code>a</code>" и "<code>b</code>" являются именами формальных аргументов, которые используются в теле функции, "<code>return a + b</code>".</p>
+
+<h3 id="Example_A_recursive_shortcut_to_massively_modify_the_DOM" name="Example:_A_recursive_shortcut_to_massively_modify_the_DOM">Пример: рекурсивное сокращение для массового изменения DOM</h3>
+
+<p>Создание функции через конструктор <code>Function</code> - это один из способов динамического создания из функции неизвестного количества новых объектов с некоторым выполняемым кодом в глобальной области видимости. Следующий пример (a рекурсивное сокращение для массового изменения DOM) был бы невозможен без вызова конструктора <code>Function</code> для каждого нового запроса, если вы хотите избежать использования замыканий.</p>
+
+<pre class="brush: html">&lt;!doctype html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
+&lt;title&gt;Пример MDN - рекурсивное сокращение для массового изменения DOM&lt;/title&gt;
+&lt;script type="text/javascript"&gt;
+var domQuery = (function() {
+ var aDOMFunc = [
+ Element.prototype.removeAttribute,
+ Element.prototype.setAttribute,
+ CSSStyleDeclaration.prototype.removeProperty,
+ CSSStyleDeclaration.prototype.setProperty
+ ];
+
+ function setSomething(bStyle, sProp, sVal) {
+ var bSet = Boolean(sVal), fAction = aDOMFunc[bSet | bStyle &lt;&lt; 1],
+ aArgs = Array.prototype.slice.call(arguments, 1, bSet ? 3 : 2),
+ aNodeList = bStyle ? this.cssNodes : this.nodes;
+
+ if (bSet &amp;&amp; bStyle) { aArgs.push(''); }
+ for (
+ var nItem = 0, nLen = this.nodes.length;
+ nItem &lt; nLen;
+ fAction.apply(aNodeList[nItem++], aArgs)
+ );
+ this.follow = setSomething.caller;
+ return this;
+ }
+
+ function setStyles(sProp, sVal) { return setSomething.call(this, true, sProp, sVal); }
+ function setAttribs(sProp, sVal) { return setSomething.call(this, false, sProp, sVal); }
+ function getSelectors() { return this.selectors; };
+ function getNodes() { return this.nodes; };
+
+ return (function(sSelectors) {
+ var oQuery = new Function('return arguments.callee.follow.apply(arguments.callee, arguments);');
+ oQuery.selectors = sSelectors;
+ oQuery.nodes = document.querySelectorAll(sSelectors);
+ oQuery.cssNodes = Array.prototype.map.call(oQuery.nodes, function(oInlineCSS) { return oInlineCSS.style; });
+ oQuery.attributes = setAttribs;
+ oQuery.inlineStyle = setStyles;
+ oQuery.follow = getNodes;
+ oQuery.toString = getSelectors;
+ oQuery.valueOf = getNodes;
+ return oQuery;
+ });
+})();
+&lt;/script&gt;
+&lt;/head&gt;
+
+&lt;body&gt;
+
+&lt;div class="testClass"&gt;Lorem ipsum&lt;/div&gt;
+&lt;p&gt;Некоторый текст&lt;/p&gt;
+&lt;div class="testClass"&gt;dolor sit amet&lt;/div&gt;
+
+&lt;script type="text/javascript"&gt;
+domQuery('.testClass')
+ .attributes('lang', 'en')('title', 'Risus abundat in ore stultorum')
+ .inlineStyle('background-color', 'black')('color', 'white')('width', '100px')('height', '50px');
+&lt;/script&gt;
+&lt;/body&gt;
+
+&lt;/html&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3', 'Function')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-objects', 'Function')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Function")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и их область видимости", "", 1)}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Statements/function", "инструкция function", "", 1)}}</li>
+ <li>{{jsxref("Operators/function", "выражение function", "", 1)}}</li>
+ <li>{{jsxref("Statements/function*", "инструкция function*", "", 1)}}</li>
+ <li>{{jsxref("Operators/function*", "выражение function*", "", 1)}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/isgenerator/index.html b/files/ru/web/javascript/reference/global_objects/function/isgenerator/index.html
new file mode 100644
index 0000000000..e3a972e9e2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/isgenerator/index.html
@@ -0,0 +1,83 @@
+---
+title: Function.prototype.isGenerator()
+slug: Web/JavaScript/Reference/Global_Objects/Function/isGenerator
+tags:
+ - Function
+ - JavaScript
+ - Method
+ - Non-standard
+translation_of: Archive/Web/JavaScript/Function.isGenerator
+---
+<div>
+ {{JSRef("Global_Objects", "Function")}} {{non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>isGenerator()</strong></code> определяет, является ли функция <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators.3A_a_better_way_to_build_Iterators">генератором</a>.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>fun</var>.isGenerator()</code></pre>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>isGenerator()</code> определяет, является ли функция <em><code>fun</code></em> <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators.3A_a_better_way_to_build_Iterators">генератором</a>. Он является частью раннего предложения Harmony, но не был включён в спецификацию ECMAScript 6.</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">function f() {}
+
+function g() {
+ yield 42;
+}
+
+console.log('f.isGenerator() = ' + f.isGenerator()); // f.isGenerator() = false
+console.log('g.isGenerator() = ' + g.isGenerator()); // g.isGenerator() = true
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации. Реализована в JavaScript 1.8.6.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("5.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("5.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итераторы и генераторы</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/length/index.html b/files/ru/web/javascript/reference/global_objects/function/length/index.html
new file mode 100644
index 0000000000..e65e361f17
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/length/index.html
@@ -0,0 +1,145 @@
+---
+title: Function.length
+slug: Web/JavaScript/Reference/Global_Objects/Function/length
+tags:
+ - Function
+ - JavaScript
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/length
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>length</strong></code> определяет количество аргументов, ожидаемых функцией.</p>
+
+<div>{{js_property_attributes(0, 0, 1)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Свойство <code>length</code> является свойством объекта функции и указывает, сколько аргументов ожидает функция, то есть, количество формальных параметров. Это количество не включает {{jsxref("rest_parameters", "остаточные параметры", "", 1)}}. В отличие от него, свойство {{jsxref("Functions_and_function_scope/arguments/length", "arguments.length")}} является локальным для функции и предоставляет количество аргументов, реально переданных в функцию.</p>
+
+<h3 id="Data_property_of_the_Function_constructor" name="Data_property_of_the_Function_constructor">Свойство данных конструктора <code>Function</code></h3>
+<p>Конструктор {{jsxref("Global_Objects/Function", "Function")}} сам является объектом {{jsxref("Global_Objects/Function", "Function")}}. Его свойство данных <code>length</code> имеет значение 1. Атрибуты свойства: записываемое: <code>false</code>, перечисляемое: <code>false</code>, настраиваемое: <code>true</code>.</p>
+
+<h3 id="Property_of_the_Function_prototype_object" name="Property_of_the_Function_prototype_object">Свойство объекта прототипа <code>Function</code></h3>
+<p>Свойство <code>length</code> объекта прототипа {{jsxref("Global_Objects/Function", "Function")}} имеет значение 0.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">console.log(Function.length); /* 1 */
+
+console.log((function() {}).length); /* 0 */
+console.log((function(a) {}).length); /* 1 */
+console.log((function(a, b) {}).length); /* 2 и так далее */
+console.log((function(...args) {}).length); /* 0, остаточные параметры не считаются */
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>
+ Свойство <code>length</code> конструктора {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES5.1', '#sec-15.3.3.2', 'Function.length')}}<br>
+ Свойство <code>length</code> объекта прототипа {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES5.1', '#sec-properties-of-the-function-prototype-object', 'Function.length')}}<br>
+ Свойство <code>length</code> экземпляров объекта {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES5.1', '#sec-15.3.5.1', 'Function.length')}}
+ </td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>
+ Свойство <code>length</code> конструктора {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES6', '#sec-function.length', 'Function.length')}}<br>
+ Свойство <code>length</code> объекта прототипа {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES6', '#sec-15.3.4', 'Function.length')}}<br>
+ Свойство <code>length</code> экземпляров объекта {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES6', '#sec-function-instances-length', 'Function.length')}}<br>
+ </td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Поддержка настраиваемости</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop(37)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Поддержка настраиваемости</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile(37)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Function", "Function")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..212b9cb735
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/name/index.html
@@ -0,0 +1,219 @@
+---
+title: Function.name
+slug: Web/JavaScript/Reference/Global_Objects/Function/name
+tags:
+ - ECMAScript6
+ - Function
+ - JavaScript
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/name
+---
+<p>{{JSRef}}</p>
+
+<p>Read-only свойство <code><strong>name</strong></code> глобального объекта {{jsxref("Function")}} и его <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Function#Function_instances">экзепляров</a> содержит название функции созданное во время определения функции или присваивания ссылки на функцию переменной, свойству, аргументу и т. п. Для анонимных функций это свойство может иметь значение <code>"anonymous"</code> или пустую строку  <code>""</code>.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/function-name.html")}}</p>
+
+<p>Интерактивные примеры размещены в GitHub репозитории. Если вы хотите добавить свои примеры, то клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и пришлите пулл реквест.</p>
+
+<p>{{js_property_attributes(0,0,1)}}<br>
+  </p>
+
+<div class="blockIndicator note">
+<p>Заметьте, что в нестандартном, pre-ES2015 релизе <code>configurable</code> свойство было <code>false</code></p>
+</div>
+
+<h2 id="Summary" name="Summary">Примеры</h2>
+
+<h3 id="Имя_объявленной_функции">Имя объявленной функции</h3>
+
+<p>Свойство <code>name</code> возвращает имя функции, либо пустую строку для анонимных функций:</p>
+
+<pre class="brush: js">function doSomething() {}
+
+alert(doSomething.name); // выведет "doSomething"
+</pre>
+
+<h3 id="Имя_функции-конструктора">Имя функции-конструктора</h3>
+
+<p>Функции, созданные синтаксисом <code>new Function(...)</code> или просто <code>Function(...)</code> создают  {{jsxref("Function")}} и имеют name "anonymous":​​​</p>
+
+<pre class="brush: js"><code>(new Function).name; // "anonymous"</code>
+</pre>
+
+<h3 id="Предполагаемые_имена_функций">Предполагаемые имена функций</h3>
+
+<p>Переменные и методы могут предположить название анонимной функции из ее синтаксической позиции  (new in ECMAScript 2015).</p>
+
+<pre class="brush: js">var f = function() {};
+var object = {
+ someMethod: function() {}
+};
+
+<code>console.log(f.name); // "f"
+console.log(object.someMethod.name); // "someMethod"</code></pre>
+
+<p>Вы можете определить функцию с именем в {{jsxref("Operators/Function", "function expression", "", 1)}}:</p>
+
+<pre class="brush: js">var object = {
+ someMethod: function object_someMethod() {}
+};
+console.log(object.someMethod.name); // выведет "object_someMethod"
+
+try { object_someMethod } catch(e) { console.log(e); }
+// ReferenceError: object_someMethod is not defined
+</pre>
+
+<p>Вы не можете изменить имя функции, это свойство только для чтения:</p>
+
+<pre class="brush: js">var object = {
+ // анонимная функция
+ someMethod: function() {}
+};
+
+object.someMethod.name = 'otherMethod';
+alert(object.someMethod.name); //someMethod
+
+</pre>
+
+<p>Для изменения name можно использовать {{jsxref("Object.defineProperty()")}}.</p>
+
+<h3 id="Сокращенные_имена_методов">Сокращенные имена методов</h3>
+
+<pre class="brush: js"><code>var o = {
+ foo(){}
+};
+o.foo.name; // "foo";</code></pre>
+
+<h3 id="Имена_функций_после_байндинга">Имена функций после байндинга</h3>
+
+<p>{{jsxref("Function.bind()")}} производит функцию, получающую имя "bound  и название самой функции.</p>
+
+<pre class="brush: js"><code>function foo() {};
+foo.bind({}).name; // "bound foo"</code>
+</pre>
+
+<h3 id="Имена_функций_для_getters_и_setters">Имена функций для getters и setters</h3>
+
+<p>Когда используются <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></code> и <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a>, "get" и "set" появятся в имени функции.</p>
+
+<pre><code>let o = {
+ get foo(){},
+ set foo(x){}
+};
+
+var descriptor = Object.getOwnPropertyDescriptor(o, "foo");
+descriptor.get.name; // "get foo"
+descriptor.set.name; // "set foo";</code></pre>
+
+<h3 id="Имена_функций-классов">Имена функций-классов</h3>
+
+<p>Можно использовать <code>obj.constructor.name</code> чтобы проверить "class" объекта (читайте предупреждение ниже):</p>
+
+<pre><code>function Foo() {} // ES2015 Syntax: class Foo {}
+
+var fooInstance = new Foo();
+console.log(fooInstance.constructor.name); // logs "Foo"</code>
+</pre>
+
+<div class="blockIndicator warning">
+<p><strong>Warning:</strong> Интерпретатор объявит встроенное <code>Function.name</code> свойство только если функция не имеет своего собственного свойства <em>name</em> (см.  <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-setfunctionname">9.2.11 of the ECMAScript2015 Language Specification</a>). Однако, в ES2015 статичные методы перезаписывают OwnProperty конструкторов класса-функции (ECMAScript2015, <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-runtime-semantics-classdefinitionevaluation">14.5.14.21.b</a> + <a href="https://www.ecma-international.org/ecma-262/6.0/#sec-object-initializer-runtime-semantics-propertydefinitionevaluation">12.2.6.9</a>).</p>
+</div>
+
+<p>Таким образом, нельзя получить доступ к <code>name</code> любого класса со статичным свойством <code>name()​​​​​​:</code></p>
+
+<pre class="brush: js"><code>class Foo {
+ constructor() {}
+ static name() {}
+}
+</code></pre>
+
+<p>Со <code>static name()</code> методом <code>Foo.name</code> больше не содержит название класса, но отсылает к функции <code>name()</code>. Приведенное выше определение класса в ES2015 будет вести себя в Chrome и Firefx как в  ES5:</p>
+
+<pre><code>function Foo() {}
+Object.defineProperty(Foo, 'name', { writable: true });
+Foo.name = function() {};</code></pre>
+
+<p>Пытаясь получить доступ к <code>fooInstance</code> с помощью <code>fooInstance.constructor.name</code> не даст название класса, но выведет метод <code>name()</code>. Пример:</p>
+
+<pre><code>let fooInstance = new Foo();
+console.log(fooInstance.constructor.name); // logs function name()</code></pre>
+
+<p>Из ES5 syntax примера также видно, что в Chrome или Firefox статичное определение <code>Foo.name</code> становится <em>записываемым (writable)</em>. Встроенное определение в отсутствии кастомного статичного метода<em>доступно только для чтения</em>:</p>
+
+<pre><code>Foo.name = 'Hello';
+console.log(Foo.name); // logs "Hello" if class Foo has a static name() property but "Foo" if not.</code></pre>
+
+<p>Следовательно не ожидайте, что <code>Function.name</code> свойство будет всегда содержать имя класса.</p>
+
+<h3 id="Имена_функций-символов">Имена функций-символов</h3>
+
+<p>Если у {{jsxref("Symbol")}} объявляется имя, то название метода - это имя квадратных скобках.</p>
+
+<pre class="brush: js"><code>let sym1 = Symbol("foo");
+let sym2 = Symbol();
+let o = {
+ [sym1]: function(){},
+ [sym2]: function(){}
+};
+
+o[sym1].name; // "[foo]"
+o[sym2].name; // ""</code>
+</pre>
+
+<h2 id="JavaScript_минифицированный">JavaScript минифицированный</h2>
+
+<div class="blockIndicator warning">
+<p><strong>Warning:</strong> Будьте осторожны, используя <code>Function.name</code> и изменения source кода с помощью JavaScript compressors (minifiers) или обфускаторов. Эти инструменты часто используются, как встроенные в  JavaScript build pipeline, чтобы сократить размер билда перед деплоем в production. Такие трансформации часто изменяют имена функций.</p>
+</div>
+
+<p>Такой source code:</p>
+
+<pre><code>function Foo() {};
+let foo = new Foo();
+
+if (foo.constructor.name === 'Foo') {
+ console.log("'foo' is an instance of 'Foo'");
+} else {
+ console.log('Oops!');
+}</code></pre>
+
+<p>может быть сжат в:</p>
+
+<pre><code>function a() {};
+let b = new a();
+if (b.constructor.name === 'Foo') {
+ console.log("'foo' is an instance of 'Foo'");
+} else {
+ console.log('Oops!');
+}</code></pre>
+
+<p>В несжатой версии код выполняется ожидаемо <code>"'foo' is an instance of 'Foo'"</code>. В то время, как в сжатой версии он ведет себя иначе. Если вы полагаетесь на <code>Function.name</code>, как в примере, то убедитесь, что pipeline не меняет код или не ожидайте от функции определенного имени.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">
+ <p>Спецификация</p>
+ </th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-name', 'name')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Function.name")}}</p>
+
+<div id="compat-mobile"></div>
diff --git a/files/ru/web/javascript/reference/global_objects/function/prototype/index.html b/files/ru/web/javascript/reference/global_objects/function/prototype/index.html
new file mode 100644
index 0000000000..66a3ecc18e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/prototype/index.html
@@ -0,0 +1,151 @@
+---
+title: Function.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Function/prototype
+tags:
+ - Function
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Function
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <code><strong>Function.prototype</strong></code> представляет прототип объекта {{jsxref("Global_Objects/Function", "Function")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объекты {{jsxref("Global_Objects/Function", "Function")}} наследуются от <code>Function.prototype</code>. Объект <code>Function.prototype</code> не может быть изменён.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Function.arguments")}} {{deprecated_inline}}</dt>
+ <dd>Массив, соответствующий аргументам, переданным в функцию. Это устаревшее свойство {{jsxref("Global_Objects/Function", "Function")}}, используйте вместо него объект {{jsxref("Functions_and_function_scope/arguments", "arguments")}}, доступный внутри функции.</dd>
+ <dt><s class="obsoleteElement">{{jsxref("Function.arity")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Использовалось для определения количества аргументов, ожидаемых функцией, но было удалено. Вместо него используйте свойство {{jsxref("Function.length", "length")}}.</s></dd>
+ <dt>{{jsxref("Function.caller")}} {{non-standard_inline}}</dt>
+ <dd>Определяет функцию, вызвавшую текущую выполняющуюся функцию.</dd>
+ <dt>{{jsxref("Function.length")}}</dt>
+ <dd>Определяет количество аргументов, ожидаемых функцией.</dd>
+ <dt>{{jsxref("Function.name")}} {{non-standard_inline}}</dt>
+ <dd>Имя функции.</dd>
+ <dt>{{jsxref("Function.displayName")}} {{non-standard_inline}}</dt>
+ <dd>Отображаемое имя функции.</dd>
+ <dt><code>Function.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип объекта. Смотрите документацию по {{jsxref("Object.prototype.constructor")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Function.prototype.apply()")}}</dt>
+ <dd>Вызывает функцию и устанавливает <strong><code>this </code></strong>в контекст предоставленного значения; аргументы передаются объектом {{jsxref("Global_Objects/Array", "Array")}}.</dd>
+ <dt>{{jsxref("Function.prototype.bind()")}}</dt>
+ <dd>Создаёт новую функцию, которая, при вызове, самостоятельно вызывает эту функцию в контексте предоставленного значения, с данной последовательностью аргументов, предшествующих любым аргументам, переданным в новую функцию при её вызове. Устанавливает <strong><code>this </code></strong>в контекст предоставленного значения.</dd>
+ <dt>{{jsxref("Function.prototype.call()")}}</dt>
+ <dd>Вызывает (выполняет) функцию и устанавливает <strong><code>this </code></strong>в контекст предоставленного значения; аргументы передаются как есть.</dd>
+ <dt>{{jsxref("Function.prototype.isGenerator()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает <code>true</code>, если функция является <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">генератором</a>; в противном случае возвращает <code>false</code>.</dd>
+ <dt>{{jsxref("Function.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает строку, представляющую исходный код функции. Переопределяет метод {{jsxref("Object.prototype.toSource")}}.</dd>
+ <dt>{{jsxref("Function.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, представляющую исходный код функции. Переопределяет метод {{jsxref("Object.prototype.toString")}}.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.3.1', 'Function.prototype')}}<br>
+ Для экземпляров объекта {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES5.1', '#sec-15.3.5.2', 'Function.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype', 'Function.prototype')}}<br>
+ Для экземпляров объекта {{jsxref("Global_Objects/Function", "Function")}}:<br>
+ {{SpecName('ES6', '#sec-function-instances-prototype', 'Function.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-instances-prototype', 'Function.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Function", "Function")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/tosource/index.html b/files/ru/web/javascript/reference/global_objects/function/tosource/index.html
new file mode 100644
index 0000000000..335967947b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/tosource/index.html
@@ -0,0 +1,87 @@
+---
+title: Function.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Function/toSource
+tags:
+ - Function
+ - JavaScript
+ - Method
+ - Non-standard
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/toSource
+---
+<div>
+ {{JSRef("Global_Objects", "Function")}} {{non-standard_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toSource()</strong></code> возвращает строку, представляющую исходный код объекта.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>function</var>.toSource();
+Function.toSource();
+</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toSource</code> возвращает следующие значения:</p>
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Function", "Function")}} метод <code>toSource</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+ <pre class="brush: js">function Function() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для пользовательских функций, метод <code>toSource</code> возвращает исходный код JavaScript, определяющий объект как строку.</li>
+</ul>
+<p>Этот метод обычно вызывается внутренними механизмаим движка JavaScript, а не явно в коде. Вы можете вызвать <code>toSource</code> во время отладки для изучения содержимого объекта.</p>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/function/tostring/index.html b/files/ru/web/javascript/reference/global_objects/function/tostring/index.html
new file mode 100644
index 0000000000..70b6522ebe
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/function/tostring/index.html
@@ -0,0 +1,110 @@
+---
+title: Function.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Function/toString
+tags:
+ - Function
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString
+---
+<div>{{JSRef("Global_Objects", "Function")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toString()</strong></code> возвращает строку, представляющую исходный код функции.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>function</var>.toString(indentation)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>indentation</code> {{non-standard_inline}} {{obsolete_inline(17)}}</dt>
+ <dd>Количество пробелов для отступов в строковом представлении исходного кода. Если параметр меньше или равен <code>-1</code>, большинство ненужных пробелов будет удалено.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Global_Objects/Function", "Function")}} переопределяет метод {{jsxref("Object.prototype.toString", "toString")}}, унаследованный из объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString")}}. Для объектов {{jsxref("Global_Objects/Function", "Function")}} метод <code>toString</code> возвращает строку, представляющую объект в форме объявления функции. То есть, метод <code>toString</code> декомпилирует функцию и возвращает строку, включающую ключевое слово <code>function</code>, список аргументов, фигурные скобки и исходный код тела функции.</p>
+<p>JavaScript вызывает метод <code>toString</code> автоматически в случае, когда объект {{jsxref("Global_Objects/Function", "Function")}} представляется в качестве текстового значения, то есть, когда функция соединяется со строкой.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.4.2', 'Function.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype.tostring', 'Function.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Особый случай с Gecko</h3>
+<p>Начиная с Gecko 17.0 {{geckoRelease("17")}}, метод <code>Function.prototype.toString()</code> реализован с сохранением исходного кода функции. Декомпилятор был удалён, так что параметр <code>indentation</code> больше не требуется. Смотрите {{bug("761723")}} для подробностей.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/generator/index.html b/files/ru/web/javascript/reference/global_objects/generator/index.html
new file mode 100644
index 0000000000..b5fe95a5bf
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generator/index.html
@@ -0,0 +1,187 @@
+---
+title: Generator
+slug: Web/JavaScript/Reference/Global_Objects/Generator
+tags:
+ - ECMAScript 2015
+ - Generator
+ - JavaScript
+ - Legacy Generator
+ - Legacy Iterator
+ - NeedsTranslation
+ - Reference
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Генератор</strong></code> - это объект, возвращаемый {{jsxref("Statements/function*", "функцией-генератором", "", 1)}} и соответствующий как <a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols#iterable">"Итерируемому" протоколу</a>, так и <a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols#iterator">протоколу "Итератор"</a>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">function* gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+var g = gen(); // "Generator { }"</pre>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Generator.prototype.next()")}}</dt>
+ <dd>Возвращает значение, полученное выражением {{jsxref("Operators/yield", "yield")}}.</dd>
+ <dt>{{jsxref("Generator.prototype.return()")}}</dt>
+ <dd>Возвращает заданное значение и заканчивает генератор.</dd>
+ <dt>{{jsxref("Generator.prototype.throw()")}}</dt>
+ <dd>Выдает ошибку генератора.</dd>
+</dl>
+
+<h2 id="Пример">Пример</h2>
+
+<h3 id="Бесконечный_Итератор">Бесконечный Итератор</h3>
+
+<pre class="brush: js">function* idMaker() {
+ var index = 0;
+ while(true)
+ yield index++;
+}
+
+var gen = idMaker(); // "Generator { }"
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+// ...</pre>
+
+<h2 id="Legacy_generator_objects">Legacy generator objects</h2>
+
+<p>Firefox (SpiderMonkey) also implements an earlier version of generators in <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7">JavaScript 1.7</a>, where the star (*) in the function declaration was not necessary (you just use the <code>yield</code> keyword in the function body). However, legacy generators are deprecated. Do not use them; they are going to be removed ({{bug(1083482)}}).</p>
+
+<h3 id="Legacy_generator_methods">Legacy generator methods</h3>
+
+<dl>
+ <dt><code>Generator.prototype.next() </code>{{non-standard_inline}}</dt>
+ <dd>Returns a value yielded by the {{jsxref("Operators/yield", "yield")}} expression. This corresponds to <code>next()</code> in the ES2015 generator object.</dd>
+ <dt><code>Generator.prototype.close()</code> {{non-standard_inline}}</dt>
+ <dd>Closes the generator, so that when calling <code>next()</code> an {{jsxref("StopIteration")}} error will be thrown. This corresponds to the <code>return()</code> method in the ES2015 generator object.</dd>
+ <dt><code>Generator.prototype.send()</code> {{non-standard_inline}}</dt>
+ <dd>Used to send a value to a generator. The value is returned from the {{jsxref("Operators/yield", "yield")}} expression, and returns a value yielded by the next {{jsxref("Operators/yield", "yield")}} expression. <code>send(x)</code> corresponds to <code>next(x)</code> in the ES2015 generator object.</dd>
+ <dt><strong><code>Generator.</code></strong><code>prototype.</code><strong><code>throw()</code> </strong> {{non-standard_inline}}</dt>
+ <dd>Throws an error to a generator. This corresponds to the <code>throw()</code> method in the ES2015 generator object.</dd>
+</dl>
+
+<h3 id="Legacy_generator_example">Legacy generator example</h3>
+
+<pre class="brush: js">function fibonacci() {
+ var a = yield 1;
+ yield a * 2;
+}
+
+var it = fibonacci();
+console.log(it); // "Generator { }"
+console.log(it.next()); // 1
+console.log(it.send(10)); // 20
+console.log(it.close()); // undefined
+console.log(it.next()); // throws StopIteration (as the generator is now closed)
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(39.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(39.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(39.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<h3 id="Legacy_generators">Legacy generators</h3>
+
+<ul>
+ <li>{{jsxref("Statements/Legacy_generator_function", "The legacy generator function", "", 1)}}</li>
+ <li>{{jsxref("Operators/Legacy_generator_function", "The legacy generator function expression", "", 1)}}</li>
+ <li>{{jsxref("StopIteration")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features/The_legacy_Iterator_protocol">The legacy Iterator protocol</a></li>
+</ul>
+
+<h3 id="ES2015_generators">ES2015 generators</h3>
+
+<ul>
+ <li>{{jsxref("Functions", "Functions", "", 1)}}</li>
+ <li>{{jsxref("Statements/function", "function")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Statements/function*", "function*")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol">The Iterator protocol</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/generator/next/index.html b/files/ru/web/javascript/reference/global_objects/generator/next/index.html
new file mode 100644
index 0000000000..5e69003f85
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generator/next/index.html
@@ -0,0 +1,116 @@
+---
+title: Generator.prototype.next()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/next
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Reference
+ - генератор
+ - метод
+ - прототип
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/next
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>next</strong></code><strong><code>()</code></strong> возвращает объект с двумя свойствами <code>done</code> и <code>value</code>. Также вы можете задать параметр для метода <code>next</code>, чтобы отправить значение в генератор.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>gen</var>.next(value)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, отправляемое в генератор. Значение будет установлено в виде результата выражения yield, т. е. в [переменная] = yield [выражение] значение, которое было передано в функцию .next будет присвоено [переменной].</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a></code> с двумя свойствами:</p>
+
+<ul>
+ <li><code>done</code> (boolean)
+
+ <ul>
+ <li>Имеет значение <code>true</code>, если итератор находится за окончанием итерируемой последовательности. В этом случае <code>value</code> может указывать <em>возвращаемое значение</em> итератора.</li>
+ <li>Имеет значение <code>false</code>, если итератор может создать следующее значение в последовательности. Это эквивалентно вообще не указанному свойству <code>done</code>.</li>
+ </ul>
+ </li>
+ <li><code>value</code> - любое JavaScript значение, возвращаемое итератором. Может быть опущено, когда <code>done</code> имеет значение <code>true</code>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_next">Использование <code>next()</code></h3>
+
+<p>Следующий пример показывает простой генератор и объект, который возвращает метод <code>next</code>:</p>
+
+<pre class="brush: js">function* gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+var g = gen(); // "Generator { }"
+g.next(); // "Object { value: 1, done: false }"
+g.next(); // "Object { value: 2, done: false }"
+g.next(); // "Object { value: 3, done: false }"
+g.next(); // "Object { value: undefined, done: true }"
+</pre>
+
+<h3 id="Отправка_значения_в_генератор">Отправка значения в генератор</h3>
+
+<p>В этом примере <code>next</code> вызывается со значением. Отметим, что первый вызов ничего не вывел, потому что генератор изначально ничего не получил.</p>
+
+<pre class="brush: js">function* gen() {
+ while(true) {
+ var value = yield null;
+ console.log(value);
+ }
+}
+
+var g = gen();
+g.next(1);
+// "{ value: null, done: false }"
+g.next(2);
+// 2
+// "{ value: null, done: false }"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generator.prototype.next', 'Generator.prototype.next')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.next', 'Generator.prototype.next')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совсестимость_с_браузерами">Совсестимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Generator.next")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/function*">function*</a></code></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итераторы и генераторы</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/generator/return/index.html b/files/ru/web/javascript/reference/global_objects/generator/return/index.html
new file mode 100644
index 0000000000..1e77d8c64a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generator/return/index.html
@@ -0,0 +1,95 @@
+---
+title: Generator.prototype.return()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/return
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/return
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>return()</strong></code> возвращает полученное значение и останавливает генератор.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>gen</var>.return(value)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение для возврата.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Значение, которое было передано в виде аргумента.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_return">Использование <code>return()</code></h3>
+
+<p>Следующий пример показывает простой генератор и метод <code>return</code>.</p>
+
+<pre class="brush: js">function* gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+var g = gen();
+
+g.next(); // { value: 1, done: false }
+g.return('foo'); // { value: "foo", done: true }
+g.next(); // { value: undefined, done: true }
+</pre>
+
+<p>Если <code>return(value)</code> вызывает генератор, который находится в уже "завершённом" состоянии, генератор останется в "завершённом" состоянии. Если аргумент не был передан, свойство <code>value</code> вернёт тот же объект, что и <code>.next()</code>. Если аргумент был передан, он будет установлен как значение свойства <code>value</code> возвращаемого объекта.</p>
+
+<pre class="brush: js">function* gen() {
+ yield 1;
+ yield 2;
+ yield 3;
+}
+
+var g = gen();
+g.next(); // { value: 1, done: false }
+g.next(); // { value: 2, done: false }
+g.next(); // { value: 3, done: false }
+g.next(); // { value: undefined, done: true }
+g.return(); // { value: undefined, done: true }
+g.return(1); // { value: 1, done: true }
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generator.prototype.return', 'Generator.prototype.return')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.return', 'Generator.prototype.return')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Generator.return")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Statements/function*">function*</a></code></li>
+</ul>
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
new file mode 100644
index 0000000000..cfdf5d3bbc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generator/throw/index.html
@@ -0,0 +1,140 @@
+---
+title: Generator.prototype.throw()
+slug: Web/JavaScript/Reference/Global_Objects/Generator/throw
+translation_of: Web/JavaScript/Reference/Global_Objects/Generator/throw
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>throw()</strong></code> возобновляет выполнение тела генератора кидая внутри исключение  <code>и возвращает объект со свойствами done и value</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>gen</var>.throw(exception)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>exception</code></dt>
+ <dd>Исключение, которое будет брошено. Во время отладки бывает полезно сделать его <code>instanceof</code> {{jsxref("Error")}}.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Объект с двумя свойствами:</p>
+
+<ul>
+ <li><code>done</code> (boolean)
+
+ <ul>
+ <li>Имеет значение <code>true</code> если iterator прошел конец итерируемой последовательности. В этом случае <code>value</code> опционально определяется выражением <em>return value</em> внутри итератора .</li>
+ <li>Имеет значение <code>false</code> если iterator имеет возможность вернуть следующее значение последовательности. Это равносильно когда свойство done не указано.</li>
+ </ul>
+ </li>
+ <li><code>value</code> - любое JavaScript значение,  возвращенное итератором. Может быть проигнорировано, когда <em><code>done</code> === <code>true</code></em>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_throw()">Использование <code>throw()</code></h3>
+
+<p>В этом примере показан простой генератор и исключение,  которое выбрасывается используя метод <code>throw</code>. Исключение может быть поймано, используя, как обычно, блок <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code>.</p>
+
+<pre class="brush: js">function* gen() {
+ while(true) {
+ try {
+ yield 42;
+ } catch(e) {
+ console.log('Error caught!');
+ }
+ }
+}
+
+var g = gen();
+g.next();
+// { value: 42, done: false }
+g.throw(new Error('Something went wrong'));
+// "Error caught!"
+// { value: 42, done: false }
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generator.prototype.throw', 'Generator.prototype.throw')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>13</td>
+ <td>{{CompatGeckoDesktop(26)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatSafari(10)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>5.1</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile(26)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>10</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">function*</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html b/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html
new file mode 100644
index 0000000000..4cce9504e9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generatorfunction/index.html
@@ -0,0 +1,108 @@
+---
+title: GeneratorFunction
+slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction
+translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>GeneratorFunction</code> constructor</strong> создает новый {{jsxref("Statements/function*", "generator function")}} объект. В JavaScript каждая функция-генератор - это фактически <code>GeneratorFunction</code> объект.</p>
+
+<p><code>Обратите внимание, что GeneratorFunction</code> - это не глобальный объект. Он может быть получен при выполнении следующего кода.</p>
+
+<pre class="brush: js">Object.getPrototypeOf(function*(){}).constructor
+</pre>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new GeneratorFunction ([<var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]],] <var>functionBody</var>)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Имена, используемые функцией как имена формальных аргументов. Каждый должен быть строкой, которая соответствует правильному JavaScript идентификатору или списком таких строк, разделенных запятыми; например "<code>x</code>", "<code>theValue</code>", или "<code>a,b</code>".</dd>
+ <dt><code>functionBody</code></dt>
+ <dd>A string containing the JavaScript statements comprising the function definition.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>{{jsxref("Statements/function*", "generator function")}} objects created with the <code>GeneratorFunction</code> constructor are parsed when the function is created. This is less efficient than declaring a generator function with a {{jsxref("Statements/function*", "function* expression")}} and calling it within your code, because such functions are parsed with the rest of the code.</p>
+
+<p>All arguments passed to the function are treated as the names of the identifiers of the parameters in the function to be created, in the order in which they are passed.</p>
+
+<div class="note">
+<p><strong>Note:</strong> {{jsxref("Statements/function*", "generator function")}} created with the <code>GeneratorFunction</code> constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the <code>GeneratorFunction</code> constructor was called. This is different from using {{jsxref("Global_Objects/eval", "eval")}} with code for a generator function expression.</p>
+</div>
+
+<p>Invoking the <code>GeneratorFunction</code> constructor as a function (without using the <code>new</code> operator) has the same effect as invoking it as a constructor.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt><code><strong>GeneratorFunction.length</strong></code></dt>
+ <dd>The <code>GeneratorFunction</code> constructor's length property whose value is 1.</dd>
+ <dt>{{jsxref("GeneratorFunction.prototype")}}</dt>
+ <dd>Allows the addition of properties to all generator function objects.</dd>
+</dl>
+
+<h2 id="GeneratorFunction_prototype_object"><code>GeneratorFunction</code> prototype object</h2>
+
+<h3 id="Properties_2">Properties</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction/prototype', 'Properties')}}</div>
+
+<h2 id="GeneratorFunction_instances"><code>GeneratorFunction</code> instances</h2>
+
+<p><code>GeneratorFunction</code> instances inherit methods and properties from {{jsxref("GeneratorFunction.prototype")}}. As with all constructors, you can change the constructor's prototype object to make changes to all <code>GeneratorFunction</code> instances.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Creating_a_generator_function_from_a_GeneratorFunction_constructor">Creating a generator function from a <code>GeneratorFunction</code> constructor</h3>
+
+<pre class="brush: js">var GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
+var g = new GeneratorFunction('a', 'yield a * 2');
+var iterator = g(10);
+console.log(iterator.next().value); // 20
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generatorfunction-objects', 'GeneratorFunction')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generatorfunction-objects', 'GeneratorFunction')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.GeneratorFunction")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function*", "function* function")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("Global_Objects/Function", "Function")}}</li>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Functions_and_function_scope", "Functions and function scope", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/generatorfunction/prototype/index.html b/files/ru/web/javascript/reference/global_objects/generatorfunction/prototype/index.html
new file mode 100644
index 0000000000..c451547ad0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/generatorfunction/prototype/index.html
@@ -0,0 +1,58 @@
+---
+title: GeneratorFunction.prototype
+slug: Web/JavaScript/Reference/Global_Objects/GeneratorFunction/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/GeneratorFunction
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <code><strong>GeneratorFunction.prototype</strong></code> представляет собой прототип объекта {{jsxref("GeneratorFunction")}} .</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объект {{jsxref("GeneratorFunction")}} наследуется из <code>GeneratorFunction.prototype</code>. <code>GeneratorFunction.prototype</code> не может быть изменён.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code><strong>GeneratorFunction.constructor</strong></code></dt>
+ <dd>Изначальное значение {{jsxref("GeneratorFunction")}}.</dd>
+ <dt><code><strong>GeneratorFunction.prototype.prototype</strong></code></dt>
+ <dd>Значение <code>%GeneratorPrototype%</code>.</dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generatorfunction.prototype', 'GeneratorFunction.prototype')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-generatorfunction.prototype', 'GeneratorFunction.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.GeneratorFunction.prototype")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+ <li>{{jsxref("Function")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/globalthis/index.html b/files/ru/web/javascript/reference/global_objects/globalthis/index.html
new file mode 100644
index 0000000000..ce4cb48419
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/globalthis/index.html
@@ -0,0 +1,88 @@
+---
+title: globalThis
+slug: Web/JavaScript/Reference/Global_Objects/globalThis
+tags:
+ - JavaScript
+ - Reference
+ - global
+ - globalThis
+ - this
+translation_of: Web/JavaScript/Reference/Global_Objects/globalThis
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<p>Глобальное свойство <code><strong>globalThis</strong></code> содержит значение глобального <code>this</code>, который является глобальным объектом.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/globalprops-globalthis.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">globalThis
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Исторически, для доступа к глобальному объекту использовался разный синтаксис в разных средах JavaScript. В вебе вы могли использовать {{domxref("Window.window", "window")}}, {{domxref("Window.self", "self")}} или {{domxref("Window.frames", "frames")}}, но в <a href="/ru/docs/Web/API/Worker">Worker </a>можно использовать только <code>self</code>. В Node.js ничего из этого не работает, поэтому вы должны использовать <code>global</code>.</p>
+
+<p>Ключевое слово <code>this</code> можно использовать внутри функций в нестрогом режиме. Но в строгом режиме внутри функций и в Модулях <code>this</code> равняется <code>undefined</code>. Вы можете использовать <code>Function('return this')()</code>, но среды, которые отключают {{jsxref("eval", "eval()")}}, такие как {{Glossary('CSP')}} в браузерах, препятствуют использованию {{jsxref("Function")}} таким способом.</p>
+
+<p>Свойство <code>globalThis</code> даёт возможность стандартного доступа к глобальному значению <code>this</code> (и как следствие, к глобальному объекту) вне зависимости от окружения. В отличии от похожих свойств, таких как <code>window</code> и <code>self</code>, оно гарантирует работу как в среде, где есть <code>window</code>, так и в среде, где его нет. Таким образом вы можете получить доступ к глобальному объекту даже не зная в какой среде будет запущен код. Чтобы помочь запомнить название, просто запомните, что глобальное значение <code>this</code> равно <code>globalThis</code>.</p>
+
+<h3 id="HTML_и_WindowProxy">HTML и WindowProxy</h3>
+
+<p>Во многих движках <code>globalThis</code> будет ссылкой на фактический глобальный объект, но в веб-браузерах из-за соображений безопасности iframe и cross-window он ссылается на {{jsxref ("Proxy")}} вокруг фактического глобального объекта (который вы не можете получить прямым доступом). Это различие редко актуально в обычном использовании, но его важно знать.</p>
+
+<h3 id="Название">Название</h3>
+
+<p>Некоторые другие популярные имена, такие как <code>self</code> и <code>global</code> были исключены из рассмотрения из-за того, что они могут нарушать совместимость с существующим кодом. Смотрите <a href="https://github.com/tc39/proposal-global/blob/master/NAMING.md">документ по планированию именования</a> для большей информации.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>До <code>globalThis</code> единственным кросс-платформенным путём получения глобального объекта в любой среде было <code>Function('return this')()</code>. Однако, это нарушает <a href="/ru/docs/Web/HTTP/CSP">CSP</a> в некоторых случаях. Например, <a href="https://github.com/paulmillr/es6-shim">es6-shim</a> делает такую проверку:</p>
+
+<pre class="brush: js">var getGlobal = function () {
+ if (typeof self !== 'undefined') { return self; }
+ if (typeof window !== 'undefined') { return window; }
+ if (typeof global !== 'undefined') { return global; }
+ throw new Error('unable to locate global object');
+};
+
+var globals = getGlobal();
+
+if (typeof globals.setTimeout !== 'function') {
+ // в данном окружении не существует setTimeout!
+}
+</pre>
+
+<p>С <code>globalThis</code> дополнительный поиск глобального объекта в разных средах больше не нужен:</p>
+
+<pre class="brush: js">if (typeof globalThis.setTimeout !== 'function') {
+// в данном окружении не существует setTimeout!
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table>
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName("ESDraft", "#sec-globalthis", "globalThis")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.globalThis")}}</p>
+
+<h3 id="Прогресс_реализации">Прогресс реализации</h3>
+
+<p>В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция еще не достигла стабильности в разных браузерах. Данные генерируются путем запуска соответствующих тестов функциональности в <a href="https://github.com/tc39/test262">Test262</a>, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.</p>
+
+<p>{{EmbedTest262ReportResultsTable("globalThis")}}</p>
diff --git a/files/ru/web/javascript/reference/global_objects/index.html b/files/ru/web/javascript/reference/global_objects/index.html
new file mode 100644
index 0000000000..b464ca01b5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/index.html
@@ -0,0 +1,166 @@
+---
+title: Стандартные встроенные объекты
+slug: Web/JavaScript/Reference/Global_Objects
+tags:
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Эта глава описывает все стандартные встроенные объекты JavaScript, вместе с их методами и свойствами.</p>
+
+<div class="onlyinclude">
+<p>Термин «глобальные объекты» (или стандартные встроенные объекты) здесь не следует путать с самим <em>глобальным объектом</em>. Далее в главе под этим обозначением понимаются <em>объекты в глобальном пространстве имён</em> (но только, если не используется строгий режим ECMAScript 5! В противном случае они возвращают <code>undefined</code>). Сам же <em>глобальный объект</em> в глобальном пространстве имён доступен через оператор {{jsxref("Operators/this", "this")}}. На самом деле, глобальное пространство имён <em>состоит из</em> свойств глобального объекта (в том числе включая унаследованные свойства, если они есть).</p>
+
+<p>Другие объекты в глобальном пространстве имён <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Creating_new_objects">создаются либо с помощью пользовательских скриптов</a>, либо предоставляются приложением хоста. Объекты хоста, доступные в контекстах браузера, задокументированы в <a href="/ru/docs/Web/API/Reference">справке по API</a>. Для получения дополнительной информации о различии между <a href="/ru/docs/DOM/DOM_Reference">DOM</a> и ядром <a href="/ru/docs/Web/JavaScript">JavaScript</a>, смотрите <a href="/ru/docs/Web/JavaScript/JavaScript_technologies_overview">обзор технологии JavaScript</a>.</p>
+
+<h2 id="Standard_objects_by_category" name="Standard_objects_(by_category)">Стандартные объекты (по категориям)</h2>
+
+<h3 id="Value_properties" name="Value_properties">Значения</h3>
+
+<p>Глобальные свойства, возвращающие простое значение.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Infinity", "Infinity")}}</li>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
+ <li>{{jsxref("Global_Objects/undefined", "undefined")}}</li>
+ <li>литерал {{jsxref("Global_Objects/null", "null")}}</li>
+</ul>
+
+<h3 id="Function_properties" name="Function_properties">Функции</h3>
+
+<p>Глобальные функции, возвращающие результат определённой подпрограммы.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/eval", "eval()")}}</li>
+ <li>{{jsxref("Global_Objects/uneval", "uneval()")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Global_Objects/isFinite", "isFinite()")}}</li>
+ <li>{{jsxref("Global_Objects/isNaN", "isNaN()")}}</li>
+ <li>{{jsxref("Global_Objects/parseFloat", "parseFloat()")}}</li>
+ <li>{{jsxref("Global_Objects/parseInt", "parseInt()")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURI", "decodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURI", "encodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent()")}}</li>
+ <li>{{jsxref("Global_Objects/escape", "escape()")}} {{deprecated_inline}}</li>
+ <li>{{jsxref("Global_Objects/unescape", "unescape()")}} {{deprecated_inline}}</li>
+</ul>
+
+<h3 id="Fundamental_objects" name="Fundamental_objects">Фундаментальные объекты</h3>
+
+<p>Общие языковые объекты, функции и ошибки.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Object", "Object")}}</li>
+ <li>{{jsxref("Global_Objects/Function", "Function")}}</li>
+ <li>{{jsxref("Global_Objects/Boolean", "Boolean")}}</li>
+ <li>{{jsxref("Global_Objects/Symbol", "Symbol")}}</li>
+ <li>{{jsxref("Global_Objects/Error", "Error")}}</li>
+ <li>{{jsxref("Global_Objects/EvalError", "EvalError")}}</li>
+ <li>{{jsxref("Global_Objects/InternalError", "InternalError")}}</li>
+ <li>{{jsxref("Global_Objects/RangeError", "RangeError")}}</li>
+ <li>{{jsxref("Global_Objects/ReferenceError", "ReferenceError")}}</li>
+ <li>{{jsxref("Global_Objects/SyntaxError", "SyntaxError")}}</li>
+ <li>{{jsxref("Global_Objects/TypeError", "TypeError")}}</li>
+ <li>{{jsxref("Global_Objects/URIError", "URIError")}}</li>
+</ul>
+
+<h3 id="Numbers_and_dates" name="Numbers_and_dates">Числа и даты</h3>
+
+<p>Объекты, имеющие дело с числами, датами и математическими вычислениями.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Number", "Number")}}</li>
+ <li>{{jsxref("Global_Objects/Math", "Math")}}</li>
+ <li>{{jsxref("Global_Objects/Date", "Date")}}</li>
+</ul>
+
+<h3 id="Text_processing" name="Text_processing">Обработка текста</h3>
+
+<p>Объекты для манипулирования текстом.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/String", "String")}}</li>
+ <li>{{jsxref("Global_Objects/RegExp", "RegExp")}}</li>
+</ul>
+
+<h3 id="Indexed_collections" name="Indexed_collections">Индексированные коллекции</h3>
+
+<p>Коллекции, упорядоченные по индексам. Массивоподобные объекты.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}</li>
+ <li>{{jsxref("Global_Objects/Int8Array", "Int8Array")}}</li>
+ <li>{{jsxref("Global_Objects/Uint8Array", "Uint8Array")}}</li>
+ <li>{{jsxref("Global_Objects/Uint8ClampedArray", "Uint8ClampedArray")}}</li>
+ <li>{{jsxref("Global_Objects/Int16Array", "Int16Array")}}</li>
+ <li>{{jsxref("Global_Objects/Uint16Array", "Uint16Array")}}</li>
+ <li>{{jsxref("Global_Objects/Int32Array", "Int32Array")}}</li>
+ <li>{{jsxref("Global_Objects/Uint32Array", "Uint32Array")}}</li>
+ <li>{{jsxref("Global_Objects/Float32Array", "Float32Array")}}</li>
+ <li>{{jsxref("Global_Objects/Float64Array", "Float64Array")}}</li>
+</ul>
+
+<h3 id="Keyed_collections" name="Keyed_collections">Коллекции по ключу</h3>
+
+<p>Коллекции объектов по ключу. Элементы обходятся в порядке вставки.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Map", "Map")}}</li>
+ <li>{{jsxref("Global_Objects/Set", "Set")}}</li>
+ <li>{{jsxref("Global_Objects/WeakMap", "WeakMap")}}</li>
+ <li>{{jsxref("Global_Objects/WeakSet", "WeakSet")}}</li>
+</ul>
+
+<h3 id="Structured_data" name="Structured_data">Структурированные данные</h3>
+
+<p>Буферы данных и Объектная нотация JavaScript (<strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation).</p>
+
+<ul>
+ <li><code><a href="/ru/docs/JavaScript_typed_arrays/ArrayBuffer">ArrayBuffer</a></code></li>
+ <li><code><a href="/ru/docs/JavaScript_typed_arrays/DataView">DataView</a></code></li>
+ <li>{{jsxref("Global_Objects/JSON", "JSON")}}</li>
+</ul>
+
+<h3 id="Control_abstraction_objects" name="Control_abstraction_objects">Объекты управляющих абстракций</h3>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Promise", "Promise")}}</li>
+</ul>
+
+<h3 id="Reflection" name="Reflection">Рефлексия</h3>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Reflect", "Reflect")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Global_Objects/Proxy", "Proxy")}} {{experimental_inline}}</li>
+</ul>
+
+<h3 id="Internationalization" name="Internationalization">Интернационализация</h3>
+
+<p>Дополнения к ядру ECMAScript, отвечающие за функциональность, чувствительную к языку.</p>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Intl", "Intl")}}</li>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}</li>
+</ul>
+
+<h3 id="Non-standard_objects" name="Non-standard_objects">Нестандартные объекты</h3>
+
+<ul>
+ <li>{{jsxref("Generator")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("Iterator")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("ParallelArray")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("StopIteration")}} {{non-standard_inline}}</li>
+</ul>
+
+<h3 id="Other" name="Other">Прочее</h3>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments">Аргументы функции (<code>arguments</code>)</a></li>
+</ul>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/infinity/index.html b/files/ru/web/javascript/reference/global_objects/infinity/index.html
new file mode 100644
index 0000000000..143576e6b7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/infinity/index.html
@@ -0,0 +1,98 @@
+---
+title: Infinity
+slug: Web/JavaScript/Reference/Global_Objects/Infinity
+tags:
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Global_Objects/Infinity
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Глобальное свойство <code><strong>Infinity</strong></code> является числовым значением, представляющим бесконечность.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<div> </div>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-infinity.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>Infinity</code> является свойством <em>глобального объекта</em>, то есть, это переменная в глобальной области видимости.</p>
+
+<p>Начальным значением <code>Infinity</code> является {{jsxref("Number.POSITIVE_INFINITY")}}. Значение <code>Infinity</code> (положительная бесконечность) больше любого другого числа, включая саму положительную бесконечность. Это значение ведёт себя как математическая бесконечность; например, любое положительное число, умноженное на <code>Infinity</code> даёт <code>Infinity</code>, а любое число, делённое на <code>Infinity</code> даёт 0.</p>
+
+<p>В спецификации ECMAScript 5 <code>Infinity</code> является свойством только для чтения (реализована в JavaScript 1.8.5 / Firefox 4).</p>
+
+<p> </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre><code>console.log(Infinity ); /* Infinity */
+console.log(Infinity + 1 ); /* Infinity */
+console.log(Math.pow(10, 1000)); /* Infinity */
+console.log(Math.log(0) ); /* -Infinity */
+console.log(1 / Infinity ); /* 0 */</code></pre>
+
+<p> </p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.1.2', 'Infinity')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-infinity', 'Infinity')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Infinity")}}</p>
+
+<p> </p>
+
+<div> </div>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.NEGATIVE_INFINITY")}}</li>
+ <li>{{jsxref("Number.POSITIVE_INFINITY")}}</li>
+ <li>{{jsxref("Number.isFinite")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/int16array/index.html b/files/ru/web/javascript/reference/global_objects/int16array/index.html
new file mode 100644
index 0000000000..3178930fc7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/int16array/index.html
@@ -0,0 +1,201 @@
+---
+title: Int16Array
+slug: Web/JavaScript/Reference/Global_Objects/Int16Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Int16Array
+---
+<div>{{JSRef}}</div>
+
+<div> </div>
+
+<p>Объект <strong><code>Int16Array</code></strong> представляет типизированный массив 16-битных целых чисел со знаком с дополнением до двух с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте {{jsxref("DataView")}}. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Int16Array</code></strong>, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Int16Array(); // new in ES2017
+new Int16Array(length);
+new Int16Array(typedArray);
+new Int16Array(object);
+new Int16Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>For more information about the constructor syntax and the parameters, see <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int16Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Returns a number value of the element size. <code>2</code> in the case of an <code>Int16Array</code>.</dd>
+ <dt>Int16Array.length</dt>
+ <dd>Static length property whose value is 0. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Int16Array.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Int16Array</code> type: "Int16Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Int16Array.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Int16Array.from()")}}</dt>
+ <dd>Creates a new <code>Int16Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Int16Array.of()")}}</dt>
+ <dd>Creates a new <code>Int16Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Int16Array_prototype"><code>Int16Array</code> prototype</h2>
+
+<p>All <code>Int16Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Int16Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Int16Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Int16Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Int16Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Int16Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Int16Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Int16Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Int16Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Int16Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Int16Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Int16Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Int16Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Int16Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Int16Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Int16Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Int16Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Int16Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Int16Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Int16Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Int16Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Int16Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Int16Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Int16Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Int16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Int16Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Int16Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Int16Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Int16Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Int16Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Int16Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Int16Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Int16Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Int16Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Int16Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Int16Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Int16Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Int16Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Int16Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create an <code>Int16Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var int16 = new Int16Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+console.log(int16.length); // 2
+console.log(int16.BYTES_PER_ELEMENT); // 2
+
+// From an array
+var arr = new Int16Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Int16Array([21, 31]);
+var y = new Int16Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Int16Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int16 = new Int16Array(iterable);
+// Int16Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Int16Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Int16Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Int16Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Int16Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Int16Array([1, 2, 3]);
+// TypeError: calling a builtin Int16Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Int16Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/int32array/index.html b/files/ru/web/javascript/reference/global_objects/int32array/index.html
new file mode 100644
index 0000000000..bcb0ba23a0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/int32array/index.html
@@ -0,0 +1,199 @@
+---
+title: Int32Array
+slug: Web/JavaScript/Reference/Global_Objects/Int32Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Int32Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>Int32Array</code></strong> представляет типизированный массив 32-битных целых чисел со знаком с дополнением до двух с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте <a class="new" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/DataView" rel="nofollow" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Int32Array</code></strong>, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new Int32Array(); // добавлено в ES2017
+new Int32Array(length);
+new Int32Array(typedArray);
+new Int32Array(object);
+new Int32Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>Для получения дополнительной информации о синтаксисе конструктора и параметрах <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int32Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Возвращает числовое значение размера элемента. <code>4</code> в случае с <code>Int32Array</code>.</dd>
+ <dt>Int32Array.length</dt>
+ <dd>Свойство статического размера, значение которого равно 3. Для актуального размера (колличества элементов), смотрите {{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Int32Array.name")}}</dt>
+ <dd>Возвращяает строковое значение названия конструктора. В случае с тиопм <code>Int32Array</code>: "Int32Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Int32Array.prototype")}}</dt>
+ <dd>Прототип для <em>TypedArray</em> объектов.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Int32Array.from()")}}</dt>
+ <dd>Создаёт новый <code>Int32Array</code> из массивоподобного или итеративного объекта. Смотрите также {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Int32Array.of()")}}</dt>
+ <dd>Создаёт новый <code>Int32Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Int32Array_прототип"><code>Int32Array</code> прототип</h2>
+
+<p>All <code>Int32Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<dl>
+ <dt><code>Int32Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Int32Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Int32Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Int32Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Int32Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Int32Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Int32Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Int32Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Int32Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Int32Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Методы_2">Методы</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Int32Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Int32Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Int32Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Int32Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Int32Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Int32Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Int32Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Int32Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Int32Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Int32Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Int32Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Int32Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Int32Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Int32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Int32Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Int32Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Int32Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Int32Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Int32Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Int32Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Int32Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Int32Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Int32Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Int32Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Int32Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Int32Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Int32Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Int32Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Разные способы создания <code>Int32Array</code>:</p>
+
+<pre class="brush: js">// С указанием размера
+var int32 = new Int32Array(2);
+int32[0] = 42;
+console.log(int32[0]); // 42
+console.log(int32.length); // 2
+console.log(int32.BYTES_PER_ELEMENT); // 4
+
+// Из массива (Array)
+var arr = new Int32Array([21,31]);
+console.log(arr[1]); // 31
+
+// Из другого типизированного массива (TypedArray)
+var x = new Int32Array([21, 31]);
+var y = new Int32Array(x);
+console.log(y[0]); // 21
+
+// Из ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Int32Array(buffer, 0, 4);
+
+// Из итерируемого объекта (iterable)
+var iterable = function*(){ yield* [1,2,3]; }();
+var int32 = new Int32Array(iterable);
+// Int32Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Int32Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Int32Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Начиная с ECMAScript 2015, конструкторы <code>Int32Array</code> требуют оператор {{jsxref("Operators/new", "new")}}. Вызов <code>Int32Array</code> коструктора как функцию без оператора <code>new</code>, вызовет ошибку {{jsxref("TypeError")}}.</p>
+
+<pre class="brush: js example-bad">var dv = Int32Array([1, 2, 3]);
+// TypeError: calling a builtin Int32Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Int32Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/int8array/index.html b/files/ru/web/javascript/reference/global_objects/int8array/index.html
new file mode 100644
index 0000000000..68ac4ff10c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/int8array/index.html
@@ -0,0 +1,199 @@
+---
+title: Int8Array
+slug: Web/JavaScript/Reference/Global_Objects/Int8Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Int8Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>Int8Array</code></strong> представляет типизированный массив 8-разрядных целых значений. Содержимое инициализируется значением 0. Создав экземпляр <strong><code>Int8Array</code></strong>, возможно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Int8Array(); // new in ES2017
+new Int8Array(length);
+new Int8Array(typedArray);
+new Int8Array(object);
+new Int8Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>Для более детальной информации о синтаксисе конструктора смотрите <em><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Int8Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Возвращает числовое значение размера элемента массива. <code>1</code> в случае с <code>Int8Array</code>.</dd>
+ <dt>Int8Array.length</dt>
+ <dd>Статическая длина конструктора <code>Int8Array</code>, всегда равна <code>3</code> (т.к. конструктор принимает до 3 аргументов). Чтобы узнать длину созданого массива, see {{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Int8Array.name")}}</dt>
+ <dd>Возращает строчное значение имени конструктора. В случае с <code>Int8Array</code>: "Int8Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Int8Array.prototype")}}</dt>
+ <dd>Прототип для <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Int8Array.from()")}}</dt>
+ <dd>Creates a new <code>Int8Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Int8Array.of()")}}</dt>
+ <dd>Creates a new <code>Int8Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Int8Array_prototype"><code>Int8Array</code> prototype</h2>
+
+<p>All <code>Int8Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Int8Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Int8Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Int8Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Int8Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Int8Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Int8Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Int8Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Int8Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Int8Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Int8Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Int8Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Int8Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Int8Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Int8Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Int8Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Int8Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Int8Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Int8Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Int8Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Int8Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Int8Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Int8Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Int8Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Int8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Int8Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Int8Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Int8Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Int8Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Int8Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Int8Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Int8Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Int8Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Int8Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Int8Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Int8Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Int8Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Int8Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Int8Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create an <code>Int8Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var int8 = new Int8Array(2);
+int8[0] = 42;
+console.log(int8[0]); // 42
+console.log(int8.length); // 2
+console.log(int8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Int8Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Int8Array([21, 31]);
+var y = new Int8Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Int8Array(buffer, 1, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var int8 = new Int8Array(iterable);
+// Int8Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Int8Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Int8Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Int8Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Int8Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Int8Array([1, 2, 3]);
+// TypeError: calling a builtin Int8Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Int8Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/internalerror/index.html b/files/ru/web/javascript/reference/global_objects/internalerror/index.html
new file mode 100644
index 0000000000..50aa493d12
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/internalerror/index.html
@@ -0,0 +1,113 @@
+---
+title: InternalError
+slug: Web/JavaScript/Reference/Global_Objects/InternalError
+tags:
+ - Error
+ - InternalError
+ - JavaScript
+ - Non-standard
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/InternalError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Объект <code><strong>InternalError</strong></code> представляет ошибку, возникающую внутри движка JavaScript. Например: "InternalError: too much recursion".</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>new InternalError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Исключение <code>InternalError</code> выбрасывается при возникновении внутренней ошибки в движке JavaScript.</p>
+<p>Как правило, эти ошибки связаны с тем, что что-то стало слишком большим, либо чего-то стало слишком много, например:</p>
+<ul>
+ <li>"too many switch cases" — слишком много веток <code>case</code> в операторе <code>switch</code>;</li>
+ <li>"too many parentheses in regular expression" — слишком много круглых скобок в регулярном выражении;</li>
+ <li>"array initializer too large" — инициализатор массива слишком большой;</li>
+ <li>"too much recursion" — слишком глубокая рекурсия.</li>
+</ul>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt>{{jsxref("InternalError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>InternalError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Глобальный объект <code>InternalError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="InternalError_instances" name="InternalError_instances">Экземпляры объекта <code>InternalError</code></h2>
+
+<h3 id="Properties_of_InternalError_instances" name="Properties_of_InternalError_instances">Свойства</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/InternalError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_InternalError_instances" name="Methods_of_InternalError_instances">Методы</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/InternalError/prototype', 'Methods')}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("InternalError.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/internalerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/internalerror/prototype/index.html
new file mode 100644
index 0000000000..31c8829a90
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/internalerror/prototype/index.html
@@ -0,0 +1,99 @@
+---
+title: InternalError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/InternalError/prototype
+tags:
+ - Error
+ - InternalError
+ - JavaScript
+ - Non-standard
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/InternalError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>InternalError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("InternalError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("InternalError")}} наследуются от объекта <code>InternalError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>InternalError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "InternalError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "InternalError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "InternalError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "InternalError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "InternalError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "InternalError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("InternalError")}} не содержит собственных методов, экземпляры {{jsxref("InternalError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/collator/compare/index.html b/files/ru/web/javascript/reference/global_objects/intl/collator/compare/index.html
new file mode 100644
index 0000000000..bcb34c805e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/collator/compare/index.html
@@ -0,0 +1,125 @@
+---
+title: Intl.Collator.prototype.compare
+slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare
+tags:
+ - Collator
+ - Internationalization
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/compare
+---
+<div>{{JSRef("Global_Objects", "Collator", "Intl,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.Collator.prototype.compare</code></strong> возвращает функцию-геттер, сравнивающую две строки согласно порядку сортировки соответствующего объекта {{jsxref("Global_Objects/Collator", "Collator")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>collator</var>.compare(<var>string1</var>, <var>string2</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>string1</code></dt>
+ <dt><code>string2</code></dt>
+ <dd>Сравниваемые друг с другом строки.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Функция, возвращённая гетером <code>compare</code>, возвращает число, указывающее, как строки <code>string1</code> и <code>string2</code> сравниваются друг с другом в соответствии с порядком сортировки объекта {{jsxref("Global_Objects/Collator", "Collator")}}: отрицательное значение, если строка <code>string1</code> предшествует строке <code>string2</code>; положительное значение, если строка <code>string1</code> следует за строкой <code>string2</code>; 0, если строки считаются равными.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_compare_for_sort_array" name="Example:_Using_compare_for_sort_array">Пример: использование функции <code>compare</code> для сортировки массива</h3>
+<p>Использование функции, возвращённой геттером <code>compare</code>, для сортировки массивов. Обратите внимание, что функция привязана к объекту {{jsxref("Global_Objects/Collator", "Collator")}}, из которого она была получена, так что её можно передавать в {{jsxref("Array.prototype.sort()")}} напрямую.</p>
+<pre class="brush: js">var a = ['Offenbach', 'Österreich', 'Odenwald'];
+var collator = new Intl.Collator('de-u-co-phonebk');
+a.sort(collator.compare);
+console.log(a.join(', '));
+// → "Odenwald, Österreich, Offenbach"
+</pre>
+
+<h3 id="Example_Using_compare_for_search_in_array" name="Example:_Using_compare_for_search_in_array">Пример: использование функции <code>compare</code> для поиска в массиве</h3>
+<p>Использование функции, возвращённой геттером <code>compare</code>, для поиска совпадающих строк в массиве:</p>
+<pre class="brush: js">var a = ['Congrès', 'congres', 'Assemblée', 'poisson'];
+var collator = new Intl.Collator('fr', { usage: 'search', sensitivity: 'base' });
+var s = 'congres';
+var matches = a.filter(function(v) {
+ return collator.compare(v, s) === 0;
+});
+console.log(matches.join(', '));
+// → "Congrès, congres"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-10.3.2', 'Intl.Collator.prototype.compare')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+ <li>{{jsxref("String.prototype.localeCompare()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/collator/index.html b/files/ru/web/javascript/reference/global_objects/intl/collator/index.html
new file mode 100644
index 0000000000..cf3a3d3e52
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/collator/index.html
@@ -0,0 +1,187 @@
+---
+title: Intl.Collator
+slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator
+tags:
+ - Collator
+ - Internationalization
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator
+---
+<div>{{JSRef("Global_Objects", "Collator", "Intl,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Объект <strong><code>Intl.Collator</code></strong> является конструктором <dfn>сортировщиков</dfn> — объектов, включающих языко-зависимое сравнение строк.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>new Intl.Collator([<var>locales</var>[, <var>options</var>]])
+Intl.Collator.call(<var>this</var>[, <var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>
+ <p>Необязательный параметр. Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}. Разрешены следующие ключи расширения Unicode:</p>
+ <dl>
+ <dt><code>co</code></dt>
+ <dd>Варианты сортировки для конкретных локалей. Возможные значения включают в себя: <code>"big5han"</code>, <code>"dict"</code>, <code>"direct"</code>, <code>"ducet"</code>, <code>"gb2312"</code>, <code>"phonebk"</code>, <code>"phonetic"</code>, <code>"pinyin"</code>, <code>"reformed"</code>, <code>"searchjl"</code>, <code>"stroke"</code>, <code>"trad"</code> и <code>"unihan"</code>. Значения <code>"standard"</code> и <code>"search"</code> игнорируются; они заменяются свойством <code>usage</code> аргумента <code>options</code> (смотрите ниже).</dd>
+ <dt><code>kn</code></dt>
+ <dd>Определяет, должно ли использоваться числовое сравнение, то есть, чтобы выполнялось условие "1" &lt; "2" &lt; "10". Возможными значениями являются <code>"true"</code> и <code>"false"</code>. Эта опция может быть установлена через свойство аргумента <code>options</code>, либо через ключ расширения Unicode; если предоставлены оба значения, свойство аргумента <code>options</code> имеет приоритет.</dd>
+ <dt><code>kf</code></dt>
+ <dd>Определяет, буквы какого регистра должны идти первыми — верхнего или нижнего. Возможными значениями являются <code>"upper"</code>, <code>"lower"</code> и <code>"false"</code> (используется значение по умолчанию из локали). Эта опция может быть установлена через свойство аргумента <code>options</code>, либо через ключ расширения Unicode; если предоставлены оба значения, свойство аргумента <code>options</code> имеет приоритет.</dd>
+ </dl>
+ </dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект с некоторыми или всеми из следующих свойств:</p>
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ <dt><code>usage</code></dt>
+ <dd>Определяет, используется ли сравнение для сортировки или для поиска совпадающих строк. Возможными значениями являются <code>"sort"</code> и <code>"search"</code>; значением по умолчанию является <code>"sort"</code>.</dd>
+ <dt><code>sensitivity</code></dt>
+ <dd>
+ <p>Определяет, какие различия в строках должны приводить к ненулевому результату. Возможными значениями являются:</p>
+ <ul>
+ <li><code>"base"</code>: считаются различными только строки, отличающиеся базовыми буквами. Примеры: <code>a ≠ b</code>, <code>a = á</code>, <code>a = A</code>.</li>
+ <li><code>"accent"</code>: считаются различными только строки, отличающиеся базовыми буквами или акцентами и другими диакритическими знаками. Примеры: <code>a ≠ b</code>, <code>a ≠ á</code>, <code>a = A</code>.</li>
+ <li><code>"case"</code>: считаются различными только строки, отличающиеся базовыми буквами или регистром букв. Примеры: <code>a ≠ b</code>, <code>a = á</code>, <code>a ≠ A</code>.</li>
+ <li><code>"variant"</code>: считаются различными строки, отличающиеся базовыми буквами, акцентами и другими диакритическими знаками или регистром букв. Также во внимание могут приниматься и другие различия. Примеры: <code>a ≠ b</code>, <code>a ≠ á</code>, <code>a ≠ A</code>.</li>
+ </ul>
+ <p>Значением по умолчанию является <code>"variant"</code> при использовании свойства <code>usage</code>, равного <code>"sort"</code>, и зависит от локали при использовании свойства <code>usage</code>, равного <code>"search"</code>.</p>
+ </dd>
+ <dt><code>ignore­Punctua­tion</code></dt>
+ <dd>Определяет, должна ли игнорироваться пунктуация. Возможными значениями являются <code>true</code> и <code>false</code>; значением по умолчанию является <code>false</code>.</dd>
+ <dt><code>numeric</code></dt>
+ <dd>Определяет, должно ли использоваться числовое сравнение, то есть, чтобы выполнялось условие "1" &lt; "2" &lt; "10". Возможными значениями являются <code>true</code> и <code>false</code>; значением по умолчанию является <code>false</code>. Эта опция может быть установлена через свойство аргумента <code>options</code>, либо через ключ расширения Unicode; если предоставлены оба значения, свойство аргумента <code>options</code> имеет приоритет. Реализации не обязаны поддерживать это свойство.</dd>
+ <dt><code>caseFirst</code></dt>
+ <dd>Определяет, буквы какого регистра должны идти первыми — верхнего или нижнего. Возможными значениями являются <code>"upper"</code>, <code>"lower"</code> и <code>"false"</code> (используется значение по умолчанию из локали); значением по умолчанию является <code>"false"</code>. Эта опция может быть установлена через свойство аргумента <code>options</code>, либо через ключ расширения Unicode; если предоставлены оба значения, свойство аргумента <code>options</code> имеет приоритет. Реализации не обязаны поддерживать это свойство.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<h3 id="Properties" name="Properties">Свойства</h3>
+<dl>
+ <dt>{{jsxref("Collator.prototype", "Intl.Collator.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("Collator.supportedLocalesOf", "Intl.Collator.supportedLocalesOf()")}}</dt>
+ <dd>Возвращает массив, содержащий те из предоставленных локалей, которые поддерживаются без отката к локали по умолчанию среды выполнения.</dd>
+</dl>
+
+<h2 id="Collator_instances" name="Collator_instances">Экземпляры объекта <code>Collator</code></h2>
+
+<h3 id="Properties_of_Collator_instance" name="Properties_of_Collator_instance">Свойства</h3>
+<p>Экземпляры <code>Collator</code> наследуют следующие свойства из своего прототипа:</p>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Collator/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_Collator_instance" name="Methods_of_Collator_instance">Методы</h3>
+<p>Экземпляры <code>Collator</code> наследуют следующие методы из своего прототипа:</p>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Collator/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Collator" name="Example:_Using_Collator">Пример: использование <code>Collator</code></h3>
+<p>Следующий пример демонстрирует различные потенциальные результаты для строки, находящейся до, после или на том же самом уровне, что и другая строка:</p>
+<pre class="brush: js">console.log(new Intl.Collator().compare('a', 'c')); // → отрицательное значение
+console.log(new Intl.Collator().compare('c', 'a')); // → положительное значение
+console.log(new Intl.Collator().compare('a', 'a')); // → 0
+</pre>
+<p>Обратите внимание, что результат, показанный в коде выше, может сильно различаться в зависимости от браузера и его версии. Происходит это потому, что возвращаемые значения зависят от реализации. То есть, спецификация требует только чтобы при следовании строки до значение было отрицательным, а после — положительным.</p>
+
+<h3 id="Example_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+<p>Результаты, предоставляемые функцией {{jsxref("Collator.prototype.compare()")}} сильно различаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+<pre class="brush: js">// В немецком буква ä идёт рядом с буквой a
+console.log(new Intl.Collator('de').compare('ä', 'z'));
+// → отрицательное значение
+
+// В шведском буква ä следует после буквы z
+console.log(new Intl.Collator('sv').compare('ä', 'z'));
+// → положительное значение
+</pre>
+
+<h3 id="Example_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+<p>Результат, предоставляемый функцией {{jsxref("Collator.prototype.compare()")}}, может быть настроен с помощью аргумента <code>options</code>:</p>
+<pre class="brush: js">// В немецком буква a является базовой для буквы ä
+console.log(new Intl.Collator('de', { sensitivity: 'base' }).compare('ä', 'a'));
+// → 0
+
+// В шведском буквы ä и a являются двумя разными базовыми буквами
+console.log(new Intl.Collator('sv', { sensitivity: 'base' }).compare('ä', 'a'));
+// → положительное значение
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-10.1', 'Intl.Collator')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl', 'See_also')}}</div>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/collator/prototype/index.html b/files/ru/web/javascript/reference/global_objects/intl/collator/prototype/index.html
new file mode 100644
index 0000000000..1a9983f373
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/collator/prototype/index.html
@@ -0,0 +1,108 @@
+---
+title: Intl.Collator.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/prototype
+tags:
+ - Collator
+ - Internationalization
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator
+---
+<div>{{JSRef("Global_Objects", "Collator", "Intl,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.Collator.prototype</code></strong> представляет объект прототипа конструктора {{jsxref("Global_Objects/Collator", "Intl.Collator")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Смотрите {{jsxref("Global_Objects/Collator", "Collator")}} для описания экземпляров <code>Intl.NumberFormat</code>.</p>
+<p>Экземпляры {{jsxref("Global_Objects/Collator", "Intl.Collator")}} наследуются от <code>Intl.NumberFormat.prototype</code>. Изменения объекта прототипа наследуются всеми экземплярами {{jsxref("Global_Objects/Collator", "Intl.Collator")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>Intl.Collator.prototype.constructor</code></dt>
+ <dd>Ссылка на {{jsxref("Global_Objects/Collator", "Intl.Collator")}}.</dd>
+ <dt>{{jsxref("Collator.compare", "Intl.Collator.prototype.compare")}}</dt>
+ <dd>Геттер; возвращает функцию, сравнивающую две строки согласно порядку сортировки этого объекта {{jsxref("Global_Objects/Collator", "Collator")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("Collator.resolvedOptions", "Intl.Collator.prototype.resolvedOptions()")}}</dt>
+ <dd>Возвращает новый объект со свойствами, отражающими локаль и опции сравнения строк, вычисленные при инициализации объекта.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-10.2.1', 'Intl.Collator.prototype')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html b/files/ru/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html
new file mode 100644
index 0000000000..001b0a86ed
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/collator/resolvedoptions/index.html
@@ -0,0 +1,108 @@
+---
+title: Intl.Collator.prototype.resolvedOptions()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions
+tags:
+ - Collator
+ - Internationalization
+ - JavaScript
+ - Method
+ - NeedsExample
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/resolvedOptions
+---
+<div>{{JSRef("Global_Objects", "Collator", "Intl,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.Collator.prototype.resolvedOptions()</code></strong> возвращает новый объект со свойствами, отражающими локаль и параметры сравнения строк, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/Collator", "Collator")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>collator</var>.resolvedOptions()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает новый объект со свойствами, отражающими локаль и параметры сравнения строк, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/Collator", "Collator")}}. Объект содержит следующие свойства:</p>
+<dl>
+ <dt><code>locale</code></dt>
+ <dd>Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство <code>locale</code>.</dd>
+ <dt><code>usage</code></dt>
+ <dt><code>sensitivity</code></dt>
+ <dt><code>ignorePunctuation</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code>, либо значения по умолчанию.</dd>
+ <dt><code>collation</code></dt>
+ <dd>Значение, запрошенное ключом расширения Unicode <code>"co"</code>, если он поддерживается для локали <code>locale</code>, либо значение <code>"default"</code>.</dd>
+ <dt><code>numeric</code></dt>
+ <dt><code>caseFirst</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code> или запрошенные ключами расширения Unicode <code>"kn"</code> и <code>"kf"</code>, либо значения по умолчанию. Если реализация не поддерживает эти свойства, они будут опущены.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-10.3.3', 'Intl.Collator.prototype.resolvedOptions')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html b/files/ru/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html
new file mode 100644
index 0000000000..5aca430d38
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/collator/supportedlocalesof/index.html
@@ -0,0 +1,117 @@
+---
+title: Intl.Collator.supportedLocalesOf()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf
+tags:
+ - Collator
+ - Internationalization
+ - JavaScript
+ - Method
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/Collator/supportedLocalesOf
+---
+<div>{{JSRef("Global_Objects", "Collator", "Intl,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.Collator.supportedLocalesOf()</code></strong> возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при сравнении строк без отката к локали по умолчанию среды выполнения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Intl.Collator.supportedLocalesOf(<var>locales</var>[, <var>options</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}.</dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект, который может содержать следующее свойство:</p>
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает массив с подмножеством языковых меток, предоставленных в аргументе <code>locales</code>. Возвращаются те языковые метки, для которых среда выполнения поддерживает сравнение строк без отката к локали по умолчанию; при поиске используется предоставленный алгоритм сопоставления локалей.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_supportedLocalesOf" name="Example:_Using_supportedLocalesOf">Пример: использование <code>supportedLocalesOf</code></h3>
+<p>Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское сравнение строк, метод <code>supportedLocalesOf</code> вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка <code>pinyin</code> не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма <code>"lookup"</code> — сопоставление <code>"best fit"</code> может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.</p>
+<pre class="brush: js">var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
+var options = { localeMatcher: 'lookup' };
+console.log(Intl.Collator.supportedLocalesOf(locales, options).join(', '));
+// → "id-u-co-pinyin, de-ID"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-10.2.2', 'Intl.Collator.supportedLocalesOf')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html
new file mode 100644
index 0000000000..ff24de6317
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/format/index.html
@@ -0,0 +1,123 @@
+---
+title: Intl.DateTimeFormat.prototype.format
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format
+tags:
+ - DateTimeFormat J
+ - Internationalization
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format
+---
+<div>{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.DateTimeFormat.prototype.format</code></strong> возвращает функцию-геттер, форматирующую дату согласно локали и параметрам форматирования соответствующего объекта {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateTimeFormat</var>.format(<var>date</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>date</code></dt>
+ <dd>Дата для форматирования.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Функция, возвращённая геттером <code>format</code>, форматирует дату согласно локали и параметрам форматирования соответствующего объекта {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_format" name="Example:_Using_format">Пример: использование функции <code>format</code></h3>
+<p>Использование функции, возвращённой геттером <code>format</code>, для форматирования одной даты, здесь пример для сербского языка:</p>
+<pre class="brush: js">var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+var dateTimeFormat = new Intl.DateTimeFormat('sr-RS', options);
+console.log(dateTimeFormat.format(new Date()));
+// → "недеља, 7. април 2013."
+</pre>
+
+<h3 id="Example_Using_format_with_map" name="Example:_Using_format_with_map">Пример: использование функции <code>format</code> вместе с <code>map</code></h3>
+<p>Использование функции, возвращённой геттером <code>format</code>, для форматирования всех дат в массиве. Обратите внимание, что функция привязана к объекту {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}, из которого она была получена, так что её можно передавать в {{jsxref("Array.prototype.map()")}} напрямую.</p>
+<pre class="brush: js">var a = [new Date(2012, 08), new Date(2012, 11), new Date(2012, 03)];
+var options = { year: 'numeric', month: 'long' };
+var dateTimeFormat = new Intl.DateTimeFormat('pt-BR', options);
+var formatted = a.map(dateTimeFormat.format);
+console.log(formatted.join('; '));
+// → "setembro de 2012; dezembro de 2012; abril de 2012"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-12.3.2', 'Intl.DateTimeFormat.format')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html
new file mode 100644
index 0000000000..acfff0a5a2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/formattoparts/index.html
@@ -0,0 +1,169 @@
+---
+title: Intl.DateTimeFormat.prototype.formatToParts()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts
+tags:
+ - DateTimeFormat
+ - Intl
+ - JavaScript
+ - Method
+ - Prototype
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/formatToParts
+---
+<div>{{JSRef}}</div>
+
+<div>Метод <strong><code>Intl.DateTimeFormat.prototype.formatToParts()</code></strong> позволяет выполнять форматирование строк с учётом форматирования <code>DateTimeFormat</code>.</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Intl.DateTimeFormat.prototype.formatToParts(date)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>date</code> {{optional_inline}}</dt>
+ <dd>Дата, которую нужно отформатировать.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив объектов {{jsxref("Array")}}, содержащий отформатированную дату по частям.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>formatToParts()</code> полезен для пользовательского форматирования строки даты. Он возвращает массив объектов {{jsxref("Array")}}, содерщащий специфичные для данного места токены, из которых можно выстроить пользовательскую строку, которая сохранит специфичные для данного места части. Структура возвращаемого значения методом <code>formatToParts()</code> выглядит так:</p>
+
+<pre class="brush: js">[
+ { type: 'day', value: '17' },
+ { type: 'weekday', value: 'Monday' }
+]</pre>
+
+<p>Возможные типы:</p>
+
+<dl>
+ <dt>day</dt>
+ <dd>Строка, используемая для дня, например, <code>"17"</code>.</dd>
+ <dt>dayPeriod</dt>
+ <dd>Строка, используемая для времени суток, например, <code>"AM"</code> или <code>"PM"</code>.</dd>
+ <dt>era</dt>
+ <dd>Строка, используемая для эры, например, <code>"BC"</code> или <code>"AD"</code>.</dd>
+ <dt>hour</dt>
+ <dd>Строка, используемая для часа, например, <code>"3"</code> или <code>"03"</code>.</dd>
+ <dt>literal</dt>
+ <dd>Строка, используемая для разделения значений даты и времени, например, <code>"/"</code>, <code>","</code>, <code>"o'clock"</code>, <code>"de"</code> и другие.</dd>
+ <dt>minute</dt>
+ <dd>Строка, используемая для минут, например, <code>"00"</code>.</dd>
+ <dt>month</dt>
+ <dd>Строка, используемая для месяца, например, <code>"12"</code>.</dd>
+ <dt>second</dt>
+ <dd>Строка, используемая для секунд, например, <code>"07"</code> или <code>"42"</code>.</dd>
+ <dt>timeZoneName</dt>
+ <dd>Строка, используемая для названия временной зоны, например, <code>"UTC"</code>.</dd>
+ <dt>weekday</dt>
+ <dd>Строка, используемая для дня недели, например, <code>"M"</code>, <code>"Monday"</code> или <code>"Montag"</code>.</dd>
+ <dt>year</dt>
+ <dd>Строка, используемая для года, например, <code>"2012"</code> или <code>"96"</code>.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p><code>DateTimeFormat</code> выводит локализированные строки, которые нельзя изменять напрямую:</p>
+
+<pre class="brush: js">var date = Date.UTC(2012, 11, 17, 3, 0, 42);
+
+var formatter = new Intl.DateTimeFormat('ru', {
+ weekday: 'long',
+ year: 'numeric',
+ month: 'numeric',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ hour12: true,
+ timeZone: 'UTC'
+});
+
+formatter.format(date);
+// "понедельник, 17.12.2012 г., 3:00:42 AM"
+</pre>
+
+<p>Однако, во многих пользовательских интерфейсах есть желание настроить форматирование этой строки. Метод <code>formatToParts</code> включает форматирование строки с учётом местности, созданной форматером <code>DateTimeFormat</code>, предоставляя вам строку по частям:</p>
+
+<pre class="brush: js">formatter.formatToParts(date);
+
+// возвращаемое значение:
+[
+ { type: 'weekday',  value: 'понедельник'},
+ { type: 'literal', value: ', ' },
+ { type: 'day',  value: '17' },
+ { type: 'literal', value: '.' },
+ { type: 'month', value: '12' },
+ { type: 'literal', value: '.' },
+ { type: 'year', value: '2012' },
+ { type: 'literal', value: 'г., ' },
+ { type: 'hour', value: '3' },
+ { type: 'literal', value: ':' },
+ { type: 'minute', value: '00' },
+ { type: 'literal', value: ':' },
+ { type: 'second', value: '42' },
+ { type: 'literal', value: ' ' },
+ { type: 'dayPeriod', value: 'AM' }
+]
+</pre>
+
+<p>Теперь информация доступна по отдельности и может быть отформатирована и объединена снова в пользавотельском порядке. Например, используя {{jsxref("Array.prototype.map()")}}, <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочные функции</a>, <a href="/ru/docs/Web/JavaScript/Reference/Statements/switch">инструкцию switch</a>, <a href="/ru/docs/Web/JavaScript/Reference/template_strings">шаблонные строки</a> и {{jsxref("Array.prototype.reduce()")}}.</p>
+
+<pre class="brush: js">var dateString = formatter.formatToParts(date).map(({type, value}) =&gt; {
+ switch (type) {
+ case 'dayPeriod': return `&lt;b&gt;${value}&lt;/b&gt;`;
+ default : return value;
+ }
+}).reduce((string, part) =&gt; string + part);
+</pre>
+
+<p>Здесь время суток будет выделено жирным с использованием метода <code>formatToParts()</code>.</p>
+
+<pre class="brush: js">console.log(formatter.format(date));
+// "понедельник, 17.12.2012 г., 3:00:42 AM"
+
+console.log(dateString);
+// "понедельник, 17.12.2012 г., 3:00:42 &lt;b&gt;AM&lt;/b&gt;"</pre>
+
+<h2 id="Полифилл">Полифилл</h2>
+
+<p>Полифил для данного метода доступен <a href="https://github.com/zbraniecki/proposal-intl-formatToParts">здесь</a>.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецфикация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int Draft', '#sec-Intl.DateTimeFormat.prototype.formatToParts', 'Intl.DateTimeFormat.prototype.formatToParts')}}</td>
+ <td>{{Spec2('ES Int Draft')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Intl.DateTimeFormat.formatToParts")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("DateTimeFormat.format", "Intl.DateTimeFormat.prototype.format")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/index.html
new file mode 100644
index 0000000000..2bd44c9522
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/index.html
@@ -0,0 +1,276 @@
+---
+title: Intl.DateTimeFormat
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+tags:
+ - DateTimeFormat
+ - Internationalization
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+---
+<div>{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <strong><code>Intl.DateTimeFormat</code></strong> является конструктором объектов, включающих языко-зависимое форматирование даты и времени.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>new Intl.DateTimeFormat([<var>locales</var>[, <var>options</var>]])
+Intl.DateTimeFormat.call(<var>this</var>[, <var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>
+ <p>Необязательный параметр. Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}. Разрешены следующие ключи расширения Unicode:</p>
+
+ <dl>
+ <dt><code>nu</code></dt>
+ <dd>Используемая система нумерации. Возможные значения включают в себя: <code>"arab"</code>, <code>"arabext"</code>, <code>"bali"</code>, <code>"beng"</code>, <code>"deva"</code>, <code>"fullwide"</code>, <code>"gujr"</code>, <code>"guru"</code>, <code>"hanidec"</code>, <code>"khmr"</code>, <code>"knda"</code>, <code>"laoo"</code>, <code>"latn"</code>, <code>"limb"</code>, <code>"mlym"</code>, <code>"mong"</code>, <code>"mymr"</code>, <code>"orya"</code>, <code>"tamldec"</code>, <code>"telu"</code>, <code>"thai"</code>, <code>"tibt"</code>.</dd>
+ <dt><code>ca</code></dt>
+ <dd>Используемый календарь. Возможные значения включают в себя: <code>"buddhist"</code>, <code>"chinese"</code>, <code>"coptic"</code>, <code>"ethioaa"</code>, <code>"ethiopic"</code>, <code>"gregory"</code>, <code>"hebrew"</code>, <code>"indian"</code>, <code>"islamic"</code>, <code>"islamicc"</code>, <code>"iso8601"</code>, <code>"japanese"</code>, <code>"persian"</code>, <code>"roc"</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект с некоторыми или всеми из следующих свойств:</p>
+
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ <dt><code>timeZone</code></dt>
+ <dd>Используемый часовой пояс. Единственным значением, которые реализации обязаны распознавать, является <code>"UTC"</code>; значением по умолчанию является часовой пояс по умолчанию среды выполнения. Реализации также могут распознавать названия часовых поясов из <a href="https://www.iana.org/time-zones">базы данных часовых поясов IANA</a>, например <code>"Asia/Shanghai"</code>, <code>"Asia/Kolkata"</code> или <code>"America/New_York"</code>.</dd>
+ <dt><code>hour12</code></dt>
+ <dd>Определяет, использовать ли 12-часовой формат времени (в противовес 24-часовому). Возможными значениями являются <code>true</code> и <code>false</code>; значение по умолчанию зависит от локали.</dd>
+ <dt><code>formatMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления форматов. Возможными значениями являются <code>"basic"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Смотрите следующий абзац, объясняющий, как использовать это свойство.</dd>
+ </dl>
+
+ <p>Следующие свойства описывают компоненты даты/времени, используемые в форматированном выводе, и их желаемые представления. Реализации должны поддерживать, как минимум, следующие подмножества:</p>
+
+ <ul>
+ <li><code>weekday</code>, <code>year</code>, <code>month</code>, <code>day</code>, <code>hour</code>, <code>minute</code>, <code>second</code></li>
+ <li><code>weekday</code>, <code>year</code>, <code>month</code>, <code>day</code></li>
+ <li><code>year</code>, <code>month</code>, <code>day</code></li>
+ <li><code>year</code>, <code>month</code></li>
+ <li><code>month</code>, <code>day</code></li>
+ <li><code>hour</code>, <code>minute</code>, <code>second</code></li>
+ <li><code>hour</code>, <code>minute</code></li>
+ </ul>
+
+ <p>Также реализации могут поддерживать другие подмножества и запросы будут сравниваться со всеми доступными подмножествами представлений для поиска наилучшего соответствия. Для такого сравнения доступно два алгоритма, нужный из которых выбирается свойством <code>formatMatcher</code>: <a href="http://www.ecma-international.org/ecma-402/1.0/#BasicFormatMatcher">чётко определённый алгоритм <code>"basic"</code></a> и зависящий от реализации алгоритм <code>"best fit"</code>.</p>
+
+ <dl>
+ <dt><code>weekday</code></dt>
+ <dd>Представление дней недели. Возможными значениями являются <code>"narrow"</code>, <code>"short"</code> и <code>"long"</code>.</dd>
+ <dt><code>era</code></dt>
+ <dd>Представление эр. Возможными значениями являются <code>"narrow"</code>, <code>"short"</code> и <code>"long"</code>.</dd>
+ <dt><code>year</code></dt>
+ <dd>Представление лет. Возможными значениями являются <code>"numeric"</code> и <code>"2-digit"</code>.</dd>
+ <dt><code>month</code></dt>
+ <dd>Представление месяцев. Возможными значениями являются <code>"numeric"</code>, <code>"2-digit"</code>, <code>"narrow"</code>, <code>"short"</code> и <code>"long"</code>.</dd>
+ <dt><code>day</code></dt>
+ <dd>Представление дней. Возможными значениями являются <code>"numeric"</code> и <code>"2-digit"</code>.</dd>
+ <dt><code>hour</code></dt>
+ <dd>Представление часов. Возможными значениями являются <code>"numeric"</code> и <code>"2-digit"</code>.</dd>
+ <dt><code>minute</code></dt>
+ <dd>Представление минут. Возможными значениями являются <code>"numeric"</code> и <code>"2-digit"</code>.</dd>
+ <dt><code>second</code></dt>
+ <dd>Представление секунд. Возможными значениями являются <code>"numeric"</code> и <code>"2-digit"</code>.</dd>
+ <dt><code>timeZoneName</code></dt>
+ <dd>Представление названий часовых поясов. Возможными значениями являются <code>"short"</code> и <code>"long"</code>.</dd>
+ </dl>
+
+ <p class="noinclude">Значение по умолчанию для всех свойств компонентов даты/времени является значение {{jsxref("Global_Objects/undefined", "undefined")}},но если все свойства компонентов будут равны {{jsxref("Global_Objects/undefined", "undefined")}}, то будет предполагаться, что значением свойств <code>year</code>, <code>month</code> и <code>day</code> является <code>"numeric"</code>.</p>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<h3 id="Properties" name="Properties">Свойства</h3>
+
+<dl>
+ <dt>{{jsxref("DateTimeFormat.prototype", "Intl.DateTimeFormat.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("DateTimeFormat.supportedLocalesOf", "Intl.DateTimeFormat.supportedLocalesOf()")}}</dt>
+ <dd>Возвращает массив, содержащий те из предоставленных локалей, которые поддерживаются без отката к локали по умолчанию среды выполнения.</dd>
+</dl>
+
+<h2 id="DateTimeFormat_instances" name="DateTimeFormat_instances">Экземпляры объекта <code>DateTimeFormat</code></h2>
+
+<h3 id="Properties_of_DateTimeFormat_instance" name="Properties_of_DateTimeFormat_instance">Свойства</h3>
+
+<p>Экземпляры <code>DateTimeFormat</code> наследуют следующие свойства из своего прототипа:</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_DateTimeFormat_instance" name="Methods_of_DateTimeFormat_instance">Методы</h3>
+
+<p>Экземпляры <code>DateTimeFormat</code> наследуют следующие методы из своего прототипа:</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_DateTimeFormat" name="Example:_Using_DateTimeFormat">Пример: использование <code>DateTimeFormat</code></h3>
+
+<p>При базовом использовании без определения локали <code>DateTimeFormat</code> использует локаль и опции по умолчанию.</p>
+
+<pre class="brush: js notranslate">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Вывод format без аргументов зависит от реализации,
+// локали по умолчанию и часового пояса по умолчанию
+console.log(new Intl.DateTimeFormat().format(date));
+// → "12/19/2012", если код запущен с локалью en-US и часовым поясом America/Los_Angeles
+</pre>
+
+<h3 id="Example_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Этот пример показывает некоторые локализованные форматы даты и времени. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js notranslate">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Форматирование ниже предполагает, что местный часовой пояс равен
+// America/Los_Angeles для локали США
+
+// В америкаском английском используется порядок месяц-день-год
+console.log(new Intl.DateTimeFormat('en-US').format(date));
+// → "12/19/2012"
+
+// В британском английском используется порядок день-месяц-год
+console.log(new Intl.DateTimeFormat('en-GB').format(date));
+// → "20/12/2012"
+
+// В корейском используется порядок год-месяц-день
+console.log(new Intl.DateTimeFormat('ko-KR').format(date));
+// → "2012. 12. 20."
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(new Intl.DateTimeFormat('ar-EG').format(date));
+// → "<span dir="rtl">٢٠‏/١٢‏/٢٠١٢</span>"
+
+// В Японии приложения могут захотеть использовать японский календарь,
+// в котором 2012 год являеся 24-м годом эры Хейсей
+console.log(new Intl.DateTimeFormat('ja-JP-u-ca-japanese').format(date));
+// → "24/12/20"
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(new Intl.DateTimeFormat(['ban', 'id']).format(date));
+// → "20/12/2012"
+</pre>
+
+<h3 id="Example_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Формат даты и времени может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js notranslate">var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));
+
+// Запрашиваем день недели вместе с длинным форматом даты
+var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
+console.log(new Intl.DateTimeFormat('de-DE', options).format(date));
+// → "Donnerstag, 20. Dezember 2012"
+
+// Приложение может захотеть использовать UTC и показать это
+options.timeZone = 'UTC';
+options.timeZoneName = 'short';
+console.log(new Intl.DateTimeFormat('en-US', options).format(date));
+// → "Thursday, December 20, 2012, GMT"
+
+// Иногда нам нужна большая точность
+options = {
+ hour: 'numeric', minute: 'numeric', second: 'numeric',
+ timeZoneName: 'short'
+};
+console.log(new Intl.DateTimeFormat('en-AU', options).format(date));
+// → "2:00:00 pm AEDT"
+
+// Иногда даже в США нужен 24-часовой формат времени
+options = {
+ year: 'numeric', month: 'numeric', day: 'numeric',
+ hour: 'numeric', minute: 'numeric', second: 'numeric',
+ hour12: false
+};
+console.log(date.toLocaleString('en-US', options));
+// → "12/19/2012, 19:00:00"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-12.1', 'Intl.DateTimeFormat')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>{{CompatNo}}<br>
+ {{bug("864843")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl', 'See_also')}}</div>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html
new file mode 100644
index 0000000000..dfaf7d5c92
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/prototype/index.html
@@ -0,0 +1,108 @@
+---
+title: Intl.DateTimeFormat.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/prototype
+tags:
+ - DateTimeFormat
+ - Internationalization
+ - JavaScript
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
+---
+<div>{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.DateTimeFormat.prototype</code></strong> представляет объект прототипа конструктора {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Смотрите {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}} для описания экземпляров <code>Intl.NumberFormat</code>.</p>
+<p>Экземпляры {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}} наследуются от <code>Intl.NumberFormat.prototype</code>. Изменения объекта прототипа наследуются всеми экземплярами {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>Intl.DateTimeFormat.prototype.constructor</code></dt>
+ <dd>Ссылка на {{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}.</dd>
+ <dt>{{jsxref("DateTimeFormat.format", "Intl.DateTimeFormat.prototype.format")}}</dt>
+ <dd>Геттер; возвращает функцию, форматирующую дату согласно локали и опциям форматирования этого объекта {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("DateTimeFormat.resolvedOptions", "Intl.DateTimeFormat.prototype.resolvedOptions()")}}</dt>
+ <dd>Возвращает новый объект со свойствами, отражающими локаль и опции форматирования, вычисленные при инициализации объекта.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-12.2.1', 'Intl.DateTimeFormat.prototype')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html
new file mode 100644
index 0000000000..a1cb4bff8b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/resolvedoptions/index.html
@@ -0,0 +1,116 @@
+---
+title: Intl.DateTimeFormat.prototype.resolvedOptions()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions
+tags:
+ - DateTimeFormat
+ - Internationalization
+ - JavaScript
+ - Method
+ - NeedsExample
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/resolvedOptions
+---
+<div>{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.DateTimeFormat.prototype.resolvedOptions()</code></strong> возвращает новый объект со свойствами, отражающими локаль и параметры форматирования даты и времени, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>dateTimeFormat</var>.resolvedOptions()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает новый объект со свойствами, отражающими локаль и параметры форматирования чисел, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}. Объект содержит следующие свойства:</p>
+<dl>
+ <dt><code>locale</code></dt>
+ <dd>Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство <code>locale</code>.</dd>
+ <dt><code>calendar</code></dt>
+ <dt><code>numberingSystem</code></dt>
+ <dd>Значения, запрошенные ключами расширения Unicode <code>"ca"</code> и <code>"nu"</code>, либо значения по умолчанию.</dd>
+ <dt><code>timeZone</code></dt>
+ <dd>Значение, предоставленное для этого свойства в аргументе <code>options</code>; {{jsxref("Global_Objects/undefined", "undefined")}} (представляет временную зону по умолчанию среды выполнения), если ничего не было предоставлено. Предупреждение: приложения не должны полагаться на возврат {{jsxref("Global_Objects/undefined", "undefined")}}, поскольку будущие версии вместо него могут возвращать строковое значение, идентифицирующее временную зону по умолчанию среды выполнения.</dd>
+ <dt><code>hour12</code></dt>
+ <dd>Значение, предоставленное для этого свойства в аргументе <code>options</code>, либо значение по умолчанию.</dd>
+ <dt><code>weekday</code></dt>
+ <dt><code>era</code></dt>
+ <dt><code>year</code></dt>
+ <dt><code>month</code></dt>
+ <dt><code>day</code></dt>
+ <dt><code>hour</code></dt>
+ <dt><code>minute</code></dt>
+ <dt><code>second</code></dt>
+ <dt><code>timeZoneName</code></dt>
+ <dd>Значения, получившиеся в результате объединения соответствующих свойств в аргументе <code>options</code> и доступных комбинаций и представлений форматирования даты/времени в выбранной локали. Некоторые из этих свойств могут не присутствовать, что означает, что соответствующие компоненты не попадают в форматированный вывод.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-12.3.3', 'Intl.DateTimeFormat.prototype.resolvedOptions')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html
new file mode 100644
index 0000000000..54a485d2c1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/datetimeformat/supportedlocalesof/index.html
@@ -0,0 +1,118 @@
+---
+title: Intl.DateTimeFormat.supportedLocalesOf()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf
+tags:
+ - DateTimeFormat
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/supportedLocalesOf
+---
+<div>{{JSRef("Global_Objects", "DateTimeFormat", "Intl,Collator,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.DateTimeFormat.supportedLocalesOf()</code></strong> возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при форматировании даты и времени без отката к локали по умолчанию среды выполнения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Intl.DateTimeFormat.supportedLocalesOf(<var>locales</var>[, <var>options</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}.</dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект, который может содержать следующее свойство:</p>
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает массив с подмножеством языковых меток, предоставленных в аргументе <code>locales</code>. Возвращаются те языковые метки, для которых среда выполнения поддерживает форматирование даты и времени без отката к локали по умолчанию; при поиске используется предоставленный алгоритм сопоставления локалей.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_supportedLocalesOf" name="Example:_Using_supportedLocalesOf">Пример: использование <code>supportedLocalesOf</code></h3>
+<p>Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское форматирование даты и времени, метод <code>supportedLocalesOf</code> вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка <code>pinyin</code> не относится к форматированию даты и времени, не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма <code>"lookup"</code> — сопоставление <code>"best fit"</code> может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.</p>
+<pre class="brush: js">var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
+var options = { localeMatcher: 'lookup' };
+console.log(Intl.DateTimeFormat.supportedLocalesOf(locales, options).join(', '));
+// → "id-u-co-pinyin, de-ID"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-12.2.2', 'Intl.DateTimeFormat.supportedLocalesOf')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html b/files/ru/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html
new file mode 100644
index 0000000000..9a433c2776
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/getcanonicallocales/index.html
@@ -0,0 +1,73 @@
+---
+title: Intl.getCanonicalLocales()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales
+tags:
+ - Intl
+ - JavaScript
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/getCanonicalLocales
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>Intl.getCanonicalLocales()</code></strong> возвращает массив, содержащий канониченские коды языков. Повторяющиеся значения будут отброшены и элементы будут проверены на соответствие структуры языковых тегов.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/intl-getcanonicallocales.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Intl.getCanonicalLocales(locales)</pre>
+
+<h3 id="Парамерты">Парамерты</h3>
+
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>Список {{jsxref("String")}} значений, из которых нужно получить канонические коды языков.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив, содержащий канонические коды языков</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">Intl.getCanonicalLocales('RU-RU'); // ["ru-RU"]
+Intl.getCanonicalLocales(['RU-RU', 'Fr']); // ["ru-RU", "fr"]
+
+Intl.getCanonicalLocales('RU_RU');
+// RangeError:'EN_US' is not a structurally valid language tag
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int Draft', '#sec-intl.getcanonicallocales', 'Intl.getCanonicalLocales')}}</td>
+ <td>{{Spec2('ES Int Draft')}}</td>
+ <td>Первоначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Intl.getCanonicalLocales")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}</li>
+ <li>{{jsxref("DateTimeFormat.supportedLocalesOf", "Intl.DateTimeFormat.supportedLocalesOf()")}}</li>
+ <li>{{jsxref("Collator.supportedLocalesOf", "Intl.Collator.supportedLocalesOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/index.html b/files/ru/web/javascript/reference/global_objects/intl/index.html
new file mode 100644
index 0000000000..cebbeccc60
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/index.html
@@ -0,0 +1,117 @@
+---
+title: Intl
+slug: Web/JavaScript/Reference/Global_Objects/Intl
+tags:
+ - Internationalization
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl
+---
+<div>{{JSRef("Global_Objects", "Intl", "Collator,DateTimeFormat,NumberFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <strong><code>Intl</code></strong> является пространством имён для API интернационализации ECMAScript, предосталяющим языко-зависимое сравнение строк, форматирование чисел и дат со временем. Конструкторы объектов {{jsxref("Global_Objects/Collator", "Collator")}}, {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} и {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}} являются свойствами объекта <code>Intl</code>. На этой странице описаны эти свойства, а также общая функциональность конструкторов интернационализации и других языко-зависимых функций.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</dt>
+ <dd>Конструктор <dfn>сортировщиков</dfn> — объектов, включающих языко-зависимое сравнение строк.</dd>
+ <dt>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</dt>
+ <dd>Конструктор объектов, включающих языко-зависимое форматирование даты и времени.</dd>
+ <dt>{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}</dt>
+ <dd>Конструктор объектов, включающих языко-зависимое форматирование чисел.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("Intl.getCanonicalLocales()")}}</dt>
+ <dd>Returns canonical locale names.</dd>
+</dl>
+
+<h2 id="Locale_identification_and_negotiation" name="Locale_identification_and_negotiation">Идентификация и согласование локали</h2>
+
+<p>Конструкторы интернационализации, а также некоторые языко-зависимые методы других конструкторов (перечисленные в разделе {{anch("See_also", "Смотрите также")}}) используют общий шаблон для идентификации локалей и определения используемой локали: они все принимают аргументы <code>locales</code> и <code>options</code> и согласовывают запрошенную локаль (локали) с поддерживаемыми локалями согласно алгоритму, определённому свойством <code>options.localeMatcher</code>.</p>
+
+<h3 id="locales_argument" name="locales_argument">Аргумент <code>locales</code></h3>
+
+<p>Аргумет <code>locales</code> должен быть либо строкой, содержащей <a href="http://tools.ietf.org/html/rfc5646">языковую метку BCP 47</a>, либо массивом таких языковых меток. Если аргумент <code>locales</code> не предоставлен или не определён, используется локаль по умолчанию среды выполнения.</p>
+
+<p>Языковая метка BCP 47 однозначно определяет язык или локаль (разница между ними весьма расплывчата). В своей самой общей форме она может содержать в следующем порядке: код языка, код письменности и код страны, разделённые символами дефиса. Примеры:</p>
+
+<ul>
+ <li><code>"hi"</code>: хинди.</li>
+ <li><code>"de-AT"</code>: немецкий, используемый в Австрии.</li>
+ <li><code>"zh-Hans-CN"</code>: упрощённый китайский, используемый в Китае.</li>
+</ul>
+
+<p>Подметки, определяющие языки, письменности, страны (регионы) и (используется не часто) варианты в языковых метках BCP 47 могут быть найдены в <a href="http://www.iana.org/assignments/language-subtag-registry">Реестре языковых подметок IANA</a>.</p>
+
+<p>BCP 47 также позволяет использовать расширения, и одно из них имеет значение для функций интернационализации JavaScript: это расширение <code>"u"</code> (Unicode). Оно может использоваться для запрашивания настраиваемого языко-зависимого поведения объектов {{jsxref("Global_Objects/Collator", "Collator")}}, {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} или {{jsxref("Global_Objects/DateTimeFormat", "DateTimeFormat")}}. Примеры:</p>
+
+<ul>
+ <li><code>"de-DE-u-co-phonebk"</code>: использовать вариант телефонной книги немецкого порядка сортировки, который расширяет гласные с умляутами до пар символов: ä → ae, ö → oe, ü → ue.</li>
+ <li><code>"th-TH-u-nu-thai"</code>: использовать тайские цифры (๐, ๑, ๒, ๓, ๔, ๕, ๖, ๗, ๘, ๙) при форматировании чисел.</li>
+ <li><code>"ja-JP-u-ca-japanese"</code>: использовать японский календарь при форматировании даты и времени, так что 2013 год выражается 25-м годом периода Хэйсей или 平成25.</li>
+</ul>
+
+<h3 id="Locale_negotiation" name="Locale_negotiation">Согласование локали</h3>
+
+<p>Аргумент <code>locales</code>, после вырезания всех расширений Unicode, интерпретируется как приоритетный запрос из приложения. Среда выполнения сравнивает его с доступными локалями в выбирает наилучшую из имеющихся. Существует два алгоритма сравнения: сопоставление <code>"lookup"</code> (поиск) следует алгоритму поиска, определённому в <a href="http://tools.ietf.org/html/rfc4647#section-3.4">BCP 47</a>; сопоставление <code>"best fit"</code> (наилучший подходящий) позволяет среде выполнения предоставлять локаль, которая, как минимум, но возможно и лучше, подходит для запроса, нежели локаль, найденная с помощью алгоритма поиска. Если приложение не предоставляет аргумент <code>locales</code> или среда выполнения не имеет локали, соответствующей запросу, то используется локаль по умолчанию для среды выполнения. Метод сопоставления можно выбрать с помощью свойства аргумента <code>options</code> (смотрите ниже).</p>
+
+<p>Если выбранная языковая метка содержит подстроку расширения Unicode, это расширение будет использоваться для настройки сконструированного объекта или поведения функции. Каждый конструктор или функция поддерживают только определённое подмножество ключей, определённых расширением Unicode, и поддерживаемые значения часто зависят от языковой метки. Например, ключ <code>"co"</code> (сравнение) поддерживается только объектом {{jsxref("Global_Objects/Collator", "Collator")}}, а его значение <code>"phonebk"</code> поддерживается только для немецкого языка.</p>
+
+<h3 id="options_argument" name="options_argument">Аргумент <code>options</code></h3>
+
+<p>Аргумент <code>options</code> должен быть объектом со свойствами, которые различаются для конструкторов и функций. Если аргумент <code>options</code> не предоставлен или не определён, для всех свойств используются значения по умолчанию.</p>
+
+<p>Одно свойство поддерживается для всех языко-зависимых конструкторов: свойство <code>localeMatcher</code>, чьим значением должна быть одна из строк <code>"lookup"</code> или <code>"best fit"</code> и которое выбирает один из алгоритмов сопоставления локалей, описанных выше.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-8', 'Intl')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>Таблица совместимости на этой странице генерируется из структурированных данных. Чтобы внести свои изменения в эти данные, вы можете перейти на страницу <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отослать нам pull request.</div>
+
+<div id="compat-mobile">
+<p>{{Compat("javascript.builtins.Intl")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Введение: <a href="http://norbertlindenberg.com/2012/12/ecmascript-internationalization-api/index.html">API интернационализации ECMAScript</a></li>
+ <li>Конструкторы
+ <ul>
+ <li>{{jsxref("Collator", "Intl.Collator")}}</li>
+ <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
+ </ul>
+ </li>
+ <li>Методы
+ <ul>
+ <li>{{jsxref("String.prototype.localeCompare()")}}</li>
+ <li>{{jsxref("Number.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleDateString()")}}</li>
+ <li>{{jsxref("Date.prototype.toLocaleTimeString()")}}</li>
+ </ul>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/listformat/index.html b/files/ru/web/javascript/reference/global_objects/intl/listformat/index.html
new file mode 100644
index 0000000000..cac65c8d03
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/listformat/index.html
@@ -0,0 +1,104 @@
+---
+title: Intl.ListFormat
+slug: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat
+tags:
+ - Experimental
+ - Internationalization
+ - Intl
+ - JavaScript
+ - ListFormat
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/ListFormat
+---
+<p>{{JSRef}}</p>
+
+<p>Объект <strong><code>Intl.ListFormat</code></strong> представляет собой конструктор объектов, включающих языко-зависимое форматирование списков.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/intl-listformat.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам пулл реквест.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre><code>new Intl.ListFormat([<var>locales</var>[, <var>options</var>]])
+</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>
+ <p>Необязательный параметр. Строка с языковой меткой BCP 47 или массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на странице {{jsxref("Global_Objects/Intl", "Intl", "#Locale_identification_and_negotiation", 1)}}.</p>
+ </dd>
+ <dt><code>options</code></dt>
+ <dd>Необязательный параметр. Объект с некоторыми или всеми из следующих свойств:
+ <ul>
+ <li><code>localeMatcher</code><br>
+ Используемый алгоритм сопоставления локалей. Возможные значения: <code>"lookup"</code> и <code>"best fit"</code>; по умолчанию используется <code>"best fit"</code>. Подробнее см. на странице <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation" rel="nofollow"><code>Intl</code></a>.</li>
+ <li><code>type</code><br>
+ Формат вывода. Возможные значения: <code>"conjunction"</code> для вывода значений через "и" (используется по умолчанию, прим. <code>A, B, и C</code>) или <code>"disjunction"</code> для вывода значений через "или" (прим. <code>A, B, или C</code>). <code>"unit"</code> для вывода значений с единицами измерений (прим. <code>5 фунтов, 12 унций</code>).</li>
+ <li><code>style</code><br>
+ Стиль форматирования вывода. Возможные значения: <code>"long"</code> (используется по умолчанию, прим. <code>A, B, и C</code>); <code>"short"</code> или <code>"narrow"</code> (прим. <code>A, B, C</code>). При использовании <code>narrow</code>, параметр <code>type</code> может принимать только значение <code>unit</code>.</li>
+ </ul>
+ </dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<h3 id="Свойства">Свойства</h3>
+
+<dl>
+ <dt>{{jsxref("ListFormat.prototype", "Intl.ListFormat.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам <code>Intl.ListFormat</code></dd>
+</dl>
+
+<h3 id="Методы">Методы</h3>
+
+<dl>
+ <dt>{{jsxref("ListFormat.supportedLocalesOf", "Intl.ListFormat.supportedLocalesOf()")}}</dt>
+ <dd>Возвращает массив, содержащий те из переданных ему локалей, которые поддерживаются без необходимости использовать локаль по умолчанию.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_format">Использование <code>format</code></h3>
+
+<p>Пример ниже показывает как создать объект <code>ListFormat</code> с поддержкой форматирования на русском языке и получить отформатированную строку с помощью метода <code>format</code>.</p>
+
+<pre class="brush: js">const list = ['Motorcycle', 'Bus', 'Car'];
+
+ console.log(new Intl.ListFormat('ru-RU', { style: 'long', type: 'conjunction' }).format(list));
+// &gt; Motorcycle, Bus и Car
+
+ console.log(new Intl.ListFormat('ru-RU', { style: 'short', type: 'disjunction' }).format(list));
+// &gt; Motorcycle, Bus или Car
+
+ console.log(new Intl.ListFormat('ru-RU', { style: 'narrow', type: 'unit' }).format(list));
+// &gt; Motorcycle Bus Car
+</pre>
+
+<h3 id="Использование_formatToParts">Использование <code>formatToParts</code></h3>
+
+<p>Пример ниже показывает как получить отформатированные части объекта <code>ListFormat</code> с помощью метода <code>formatToParts</code>.</p>
+
+<pre class="brush: js">const list = ['Motorcycle', 'Bus', 'Car'];
+console.log(new Intl.ListFormat('en-GB', { style: 'long', type: 'conjunction' }).formatToParts(list));
+
+// &gt; [ { "type": "element", "value": "Motorcycle" }, { "type": "literal", "value": ", " }, { "type": "element", "value": "Bus" }, { "type": "literal", "value": ", and " }, { "type": "element", "value": "Car" } ];
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/tc39/proposal-intl-list-format/">Intl.ListFormat proposal</a></td>
+ <td>Stage 3</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/numberformat/format/index.html b/files/ru/web/javascript/reference/global_objects/intl/numberformat/format/index.html
new file mode 100644
index 0000000000..1bfd21a87d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/numberformat/format/index.html
@@ -0,0 +1,120 @@
+---
+title: Intl.NumberFormat.prototype.format
+slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format
+tags:
+ - Internationalization
+ - JavaScript
+ - NumberFormat
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/format
+---
+<div>{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.NumberFormat.prototype.format</code></strong> возвращает функцию-геттер, форматирующую число согласно локали и параметрам форматирования соответствующего объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>numberFormat</var>.format(<var>number</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>number</code></dt>
+ <dd>Число для форматирования.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Функция, возвращённая геттером <code>format</code>, форматирует число согласно локали и параметрам форматирования соответствующего объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_format" name="Example:_Using_format">Пример: использование функции <code>format</code></h3>
+<p>Использование функции, возвращённой геттером <code>format</code>, для форматирования одного значения валюты, здесь пример для русского языка:</p>
+<pre class="brush: js">var options = { style: 'currency', currency: 'RUB' };
+var numberFormat = new Intl.NumberFormat('ru-RU', options);
+console.log(numberFormat.format(654321.987));
+// → "654 321,99 руб."
+</pre>
+
+<h3 id="Example_Using_format_with_map" name="Example:_Using_format_with_map">Пример: использование функции <code>format</code> вместе с <code>map</code></h3>
+<p>Использование функции, возвращённой геттером <code>format</code>, для форматирования всех чисел в массиве. Обратите внимание, что функция привязана к объекту {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}, из которого она была получена, так что её можно передавать в {{jsxref("Array.prototype.map")}} напрямую.</p>
+<pre class="brush: js">var a = [123456.789, 987654.321, 456789.123];
+var numberFormat = new Intl.NumberFormat('es-ES');
+var formatted = a.map(numberFormat.format);
+console.log(formatted.join('; '));
+// → "123.456,789; 987.654,321; 456.789,123"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-11.3.2', 'Intl.NumberFormat.prototype.format')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
+ <li>{{jsxref("Number.prototype.toLocaleString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/numberformat/index.html b/files/ru/web/javascript/reference/global_objects/intl/numberformat/index.html
new file mode 100644
index 0000000000..e29eb2dd27
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/numberformat/index.html
@@ -0,0 +1,189 @@
+---
+title: Intl.NumberFormat
+slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat
+tags:
+ - Internationalization
+ - JavaScript
+ - NumberFormat
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat
+---
+<div>{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <strong><code>Intl.NumberFormat</code></strong> является конструктором объектов, включающих языко-зависимое форматирование чисел.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new Intl.NumberFormat([<var>locales</var>[, <var>options</var>]])
+Intl.NumberFormat.call(<var>this</var>[, <var>locales</var>[, <var>options</var>]])
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>
+ <p>Необязательный параметр. Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}. Разрешены следующие ключи расширения Unicode:</p>
+
+ <dl>
+ <dt><code>nu</code></dt>
+ <dd>Используемая система нумерации. Возможные значения включают в себя: <code>"arab"</code>, <code>"arabext"</code>, <code>"bali"</code>, <code>"beng"</code>, <code>"deva"</code>, <code>"fullwide"</code>, <code>"gujr"</code>, <code>"guru"</code>, <code>"hanidec"</code>, <code>"khmr"</code>, <code>"knda"</code>, <code>"laoo"</code>, <code>"latn"</code>, <code>"limb"</code>, <code>"mlym"</code>, <code>"mong"</code>, <code>"mymr"</code>, <code>"orya"</code>, <code>"tamldec"</code>, <code>"telu"</code>, <code>"thai"</code>, <code>"tibt"</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект с некоторыми или всеми из следующих свойств:</p>
+
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ <dt><code>style</code></dt>
+ <dd>Используемый стиль форматирования. Возможными значениями являются <code>"decimal"</code> для простого форматирования числа, <code>"currency"</code> для форматирования валюты и <code>"percent"</code> для форматирования процентов; значением по умолчанию является <code>"decimal"</code>.</dd>
+ <dt><code>currency</code></dt>
+ <dd>Валюта, используемая при форматировании валют. Возможными значениями являются коды валют ISO 4217, например, <code>"USD"</code> для доллара США, <code>"EUR"</code> для евро или <code>"CNY"</code> для китайского юаня — смотрите <a href="http://www.currency-iso.org/en/home/tables/table-a1.html">список кодов текущих валют и денежных средств</a>. Свойство не имеет значения по умолчанию; если свойство <code>style</code> равно <code>"currency"</code>, свойство <code>currency</code> также должно присутствовать.</dd>
+ <dt><code>currencyDisplay</code></dt>
+ <dd>Определяет, как отображать валюту при форматировании валют. Возможными значениями являются <code>"symbol"</code> для использования локализованного символа валюты, например € для евро, <code>"code"</code> для использования кода валюты ISO, <code>"name"</code> для использования локализованного названия валюты, например <code>"доллар США"</code> для доллара; значением по умолчанию является <code>"symbol"</code>.</dd>
+ <dt><code>useGrouping</code></dt>
+ <dd>Определяет, использовать ли разделители групп разрядов, например, разделители тысяч или тысяч/лакх/крор. Возможными значениями являются <code>true</code> и <code>false</code>; значением по умолчанию является <code>true</code>.</dd>
+ </dl>
+
+ <p>Следующие свойства разбиваются на две группы: <code>minimumIntegerDigits</code>, <code>minimumFractionDigits</code> и <code>maximumFractionDigits</code> входят в одну группу, а <code>minimumSignificantDigits</code> и <code>maximumSignificantDigits</code> — в другую. Если определено хотя бы одно свойство из второй группы, свойства первой группы будут проигнорированы.</p>
+
+ <dl>
+ <dt><code>minimumIntegerDigits</code></dt>
+ <dd>Минимальное используемое количество цифр целой части числа. Возможными значениями являются значения от 1 до 21; значением по умолчанию является 1.</dd>
+ <dt><code>minimumFractionDigits</code></dt>
+ <dd>Минимальное используемое количество цифр дробной части числа. Возможными значениями являются значения от 0 до 20; значением по умолчанию для простого и процентного форматирования является 0; значением по умолчанию для форматирования валюты является число цифр младших единиц, определяемое в <a href="http://www.currency-iso.org/en/home/tables/table-a1.html">списке кодов валют ISO 4217</a> (2, если данный список не предоставляет такой информации).</dd>
+ <dt><code>maximumFractionDigits</code></dt>
+ <dd>Максимальное используемое количество цифр дробной части числа. Возможными значениями являются значения от 0 до 20; значением по умолчанию для простого форматирования является наибольшее значение из <code>minimumFractionDigits</code> и 3; значением по умолчанию для форматирования валюты является число цифр младших единиц, определяемое в <a href="http://www.currency-iso.org/en/home/tables/table-a1.html">списке кодов валют ISO 4217</a> (2, если данный список не предоставляет такой информации); значением по умолчанию для процентного форматирования является наибольшее значение из <code>minimumFractionDigits</code> и 0.</dd>
+ <dt><code>minimumSignificantDigits</code></dt>
+ <dd>Минимальное используемое количество значащих цифр числа. Возможными значениями являются значения от 1 до 21; значением по умолчанию является 1.</dd>
+ <dt><code>maximumSignificantDigits</code></dt>
+ <dd>Максимальное используемое количество значащих цифр числа. Возможными значениями являются значения от 1 до 21; значением по умолчанию является <code>minimumSignificantDigits</code>.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<h3 id="Properties" name="Properties">Свойства</h3>
+
+<dl>
+ <dt>{{jsxref("NumberFormat.prototype", "Intl.NumberFormat.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("NumberFormat.supportedLocalesOf", "Intl.NumberFormat.supportedLocalesOf()")}}</dt>
+ <dd>Возвращает массив, содержащий те из предоставленных локалей, которые поддерживаются без отката к локали по умолчанию среды выполнения.</dd>
+</dl>
+
+<h2 id="NumberFormat_instances" name="NumberFormat_instances">Экземпляры объекта <code>NumberFormat</code></h2>
+
+<h3 id="Properties_of_NumberFormat_instance" name="Properties_of_NumberFormat_instance">Свойства</h3>
+
+<p>Экземпляры <code>NumberFormat</code> наследуют следующие свойства из своего прототипа:</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_NumberFormat_instance" name="Methods_of_NumberFormat_instance">Методы</h3>
+
+<p>Экземпляры <code>NumberFormat</code> наследуют следующие методы из своего прототипа:</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Basic_usage" name="Example:_Basic_usage">Пример: базовое использование</h3>
+
+<p>При базовом использовании без определения локали возвращается строка, отформатированная с помощью локали по умолчанию с опциями по умолчанию.</p>
+
+<pre class="brush: js">var number = 3500;
+
+console.log(new Intl.NumberFormat().format(number));
+// → '3,500' в локали US English
+</pre>
+
+<h3 id="Example_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Этот пример показывает некоторые локализованные числовые форматы. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js">var number = 123456.789;
+
+// В Германии в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - точка
+console.log(new Intl.NumberFormat('de-DE').format(number));
+// → 123.456,789
+
+// В России в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - пробел
+console.log(new Intl.NumberFormat('ru-RU').format(number));
+// → 123 456,789
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(new Intl.NumberFormat('ar-EG').format(number));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// В Индии используют разделители для тысяч/лакх/крор
+console.log(new Intl.NumberFormat('en-IN').format(number));
+// → 1,23,456.789
+
+// Ключ расширения nu запрашивает систему нумерации, например, китайскую десятичную
+console.log(new Intl.NumberFormat('zh-Hans-CN-u-nu-hanidec').format(number));
+// → 一二三,四五六.七八九
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(new Intl.NumberFormat(['ban', 'id']).format(number));
+// → 123.456,789
+</pre>
+
+<h3 id="Example_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Результат может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js">var number = 123456.789;
+
+// Запрашиваем формат валюты
+console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
+// → 123.456,79 €
+
+console.log(new Intl.NumberFormat('ru-RU', { style: 'currency', currency: 'RUB' }).format(number));
+// → 123 456,79 руб.
+
+// Японская йена не использует младшие единицы
+console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number))
+// → ¥123,457
+
+// Ограничиваем до трёх значащих цифр
+console.log(new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(number));
+// → 1,23,000
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-11.1', 'Intl.NumberFormat')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Intl.NumberFormat")}}</p>
+
+<div id="compat-mobile"></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Intl', 'See_also')}}</div>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/numberformat/prototype/index.html b/files/ru/web/javascript/reference/global_objects/intl/numberformat/prototype/index.html
new file mode 100644
index 0000000000..6ac4a38c2c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/numberformat/prototype/index.html
@@ -0,0 +1,108 @@
+---
+title: Intl.NumberFormat.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/prototype
+tags:
+ - Internationalization
+ - JavaScript
+ - NumberFormat
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat
+---
+<div>{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Intl.NumberFormat.prototype</code></strong> представляет объект прототипа конструктора {{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Смотрите {{jsxref("NumberFormat")}} для описания экземпляров <code>Intl.NumberFormat</code>.</p>
+<p>Экземпляры {{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}} наследуются от <code>Intl.NumberFormat.prototype</code>. Изменения объекта прототипа наследуются всеми экземплярами {{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>Intl.NumberFormat.prototype.constructor</code></dt>
+ <dd>Ссылка на {{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}.</dd>
+ <dt>{{jsxref("NumberFormat.format", "Intl.NumberFormat.prototype.format")}}</dt>
+ <dd>Геттер; возвращает функцию, форматирующую число согласно локали и опциям форматирования этого объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("NumberFormat.resolvedOptions", "Intl.NumberFormat.prototype.resolvedOptions()")}}</dt>
+ <dd>Возвращает новый объект со свойствами, отражающими локаль и опции сравнения, вычисленные при инициализации объекта.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-11.2.1', 'Intl.NumberFormat.prototype')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html b/files/ru/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html
new file mode 100644
index 0000000000..1633c1e703
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/numberformat/resolvedoptions/index.html
@@ -0,0 +1,117 @@
+---
+title: Intl.NumberFormat.prototype.resolvedOptions()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - NeedsExample
+ - NumberFormat
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/resolvedOptions
+---
+<div>{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.NumberFormat.prototype.resolvedOptions()</code></strong> возвращает новый объект со свойствами, отражающими локаль и параметры форматирования чисел, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>numberFormat</var>.resolvedOptions()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает новый объект со свойствами, отражающими локаль и параметры форматирования чисел, вычисленные во время инициализации соответствующего объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}}. Объект содержит следующие свойства:</p>
+<dl>
+ <dt><code>locale</code></dt>
+ <dd>Языковая метка BCP 47 реально используемой локали. Если во входной языковой метке BCP 47 запрошены какие-либо расширения Unicode, приведшие к этой локали, запрошенные и поддерживаемые для этой локали пары ключ-значение также будут включены в свойство <code>locale</code>.</dd>
+ <dt><code>numberingSystem</code></dt>
+ <dd>Значение, запрошенное ключом расширения Unicode <code>"nu"</code>, либо значение по умолчанию.</dd>
+ <dt><code>style</code></dt>
+ <dt><code>useGrouping</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code>, либо значения по умолчанию.</dd>
+ <dt><code>currency</code></dt>
+ <dt><code>currencyDisplay</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code>, либо значения по умолчанию. Эти свойства присутствуют только в том случае, если свойство <code>style</code> равно <code>"currency"</code>.</dd>
+</dl>
+<p>Из следующих двух групп свойств включается только одна:</p>
+<dl>
+ <dt><code>minimumIntegerDigits</code></dt>
+ <dt><code>minimumFractionDigits</code></dt>
+ <dt><code>maximumFractionDigits</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code>, либо значения по умолчанию. Эти свойства присутствуют только в том случае, если в аргументе <code>options</code> не присутствовало ни свойства <code>minimumSignificantDigits</code>, ни свойства <code>maximumSignificantDigits</code>.</dd>
+ <dt><code>minimumSignificantDigits</code></dt>
+ <dt><code>maximumSignificantDigits</code></dt>
+ <dd>Значения, предоставленные для этих свойств в аргументе <code>options</code>, либо значения по умолчанию. Эти свойства присутствуют только в том случае, если в аргументе <code>options</code> присутствовало хотя бы одно из них.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-11.3.3', 'Intl.NumberFormat.prototype.resolvedOptions')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html b/files/ru/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html
new file mode 100644
index 0000000000..97159a0112
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/intl/numberformat/supportedlocalesof/index.html
@@ -0,0 +1,117 @@
+---
+title: Intl.NumberFormat.supportedLocalesOf()
+slug: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - NumberFormat
+translation_of: Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/supportedLocalesOf
+---
+<div>{{JSRef("Global_Objects", "NumberFormat", "Intl,Collator,DateTimeFormat")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Intl.NumberFormat.supportedLocalesOf()</code></strong> возвращает массив, содержащий те из предоставленных локалей, что поддерживаются при форматировании чисел без отката к локали по умолчанию среды выполнения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Intl.NumberFormat.supportedLocalesOf(<var>locales</var>[, <var>options</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>locales</code></dt>
+ <dd>Строка с языковой меткой BCP 47, либо массив таких строк. Описание общей формы и интерпретации аргумента <code>locales</code> смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_identification_and_negotiation", 1)}}.</dd>
+ <dt><code>options</code></dt>
+ <dd>
+ <p>Необязательный параметр. Объект, который может содержать следующее свойство:</p>
+ <dl>
+ <dt><code>localeMatcher</code></dt>
+ <dd>Используемый алгоритм сопоставления локалей. Возможными значениями являются <code>"lookup"</code> и <code>"best fit"</code>; значением по умолчанию является <code>"best fit"</code>. Информацию по этой опции смотрите на {{jsxref("Global_Objects/Intl", "странице, посвящённой объекту Intl", "#Locale_negotiation", 1)}}.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает массив с подмножеством языковых меток, предоставленных в аргументе <code>locales</code>. Возвращаются те языковые метки, для которых среда выполнения поддерживает форматирование чисел без отката к локали по умолчанию; при поиске используется предоставленный алгоритм сопоставления локалей.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_supportedLocalesOf" name="Example:_Using_supportedLocalesOf">Пример: использование <code>supportedLocalesOf</code></h3>
+<p>Предполагая, что среда выполнения поддерживает индонезийское и немецкое, но на балийское форматирование чисел, метод <code>supportedLocalesOf</code> вернёт неизменными индонезийскую и немецкую языковые метки, даже несмотря на то, что сортировка <code>pinyin</code> не относится к форматированию чисел, не используется с индонезийским языком и вряд ли будет поддерживаться в немецком языке для Индонезии. Обратите внимание на используемую здесь спецификацию алгоритма <code>"lookup"</code> — сопоставление <code>"best fit"</code> может решить, что индонезийский язык является адекватным сопоставлением с балийским, поскольку большинство людей, говорящих на балийском, также понимают индонезийский, и поэтому может возвратиться ещё и языковая метка балийского языка.</p>
+<pre class="brush: js">var locales = ['ban', 'id-u-co-pinyin', 'de-ID'];
+var options = { localeMatcher: 'lookup' };
+console.log(Intl.NumberFormat.supportedLocalesOf(locales, options).join(', '));
+// → "id-u-co-pinyin, de-ID"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-11.2.2', 'Intl.NumberFormat.supportedLocalesOf')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>
+ {{CompatNo}}<br>
+ {{bug("864843")}}
+ </td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("NumberFormat", "Intl.NumberFormat")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/isfinite/index.html b/files/ru/web/javascript/reference/global_objects/isfinite/index.html
new file mode 100644
index 0000000000..eb1c6ee465
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/isfinite/index.html
@@ -0,0 +1,114 @@
+---
+title: isFinite()
+slug: Web/JavaScript/Reference/Global_Objects/isFinite
+tags:
+ - JavaScript
+ - Number
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/isFinite
+---
+<div>
+<div>
+<div>{{jsSidebar("Objects")}}</div>
+
+<div> </div>
+</div>
+</div>
+
+<p>Глобальная <code><strong>isFinite()</strong></code> функция определяет, является ли переданное значение конечным числом. Если необходимо, параметр сначала преобразуется в число.</p>
+
+<p> </p>
+
+<p> </p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-isfinite.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p> </p>
+
+<p> </p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">isFinite(<em>testValue</em>)</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>testValue</code></dt>
+ <dd>Аргумент для проверки, является ли он конечным числом.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>isFinite</code> это функция верхнего уровня и она не связана ни с одним объектом.</p>
+
+<p>Вы можете использовать эту функцию там, где требуется определить, является ли аргумент конечным числом. Функция <code>isFinite</code> исследует число в своем параметре. Если аргумент является NaN, положительной или отрицательной бесконечностью, метод вернет <code>false</code>; иначе возвращается <code>true</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">isFinite(Infinity); // false
+isFinite(NaN); // false
+isFinite(-Infinity); // false
+
+isFinite(0); // true
+isFinite(2e64); // true
+
+
+isFinite("0"); // true, но было бы false если использовать
+ // более надежный вариант Number.isFinite("0")
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.2.5', 'isFinite')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-isfinite-number', 'isFinite')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-isfinite-number', 'isFinite')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.isFinite")}}</p>
+
+<p> </p>
+
+<h2 id="See_Also" name="See_Also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.isFinite()")}}</li>
+ <li>{{jsxref("Number.NaN()")}}</li>
+ <li>{{jsxref("Number.POSITIVE_INFINITY")}}</li>
+ <li>{{jsxref("Number.NEGATIVE_INFINITY")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/isnan/index.html b/files/ru/web/javascript/reference/global_objects/isnan/index.html
new file mode 100644
index 0000000000..e61bdf3c8c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/isnan/index.html
@@ -0,0 +1,133 @@
+---
+title: isNaN
+slug: Web/JavaScript/Reference/Global_Objects/isNaN
+tags:
+ - Functions
+ - JavaScript
+ - Method
+ - NeedsUpdate
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/isNaN
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<h2 id="Summary" name="Summary">Аннотация</h2>
+
+<p>Функция <code><strong>isNaN()</strong></code> определяет является ли литерал или переменная нечисловым значением ({{jsxref("Global_Objects/NaN", "NaN")}}) или нет. При работе с функцией необходимо проявлять осторожность так как она <a href="#Description">имеет свои особенности</a>. В качестве альтернативы можно использовать метод {{jsxref("Number.isNaN()")}} из ECMAScript 6, или дополнительно проверять литерал или переменную на нечисловое значение при помощи <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a></code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>isNaN(<em>значение</em>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>Значение</code></dt>
+ <dd>Литерал или переменная которые будут проверяться на нечисловое значение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<h3 id="The_necessity_of_an_isNaN_function" name="The_necessity_of_an_isNaN_function">Для чего нужна функция <code>isNaN</code>?</h3>
+
+<p>В отличие от других возможных значениях в JavaScript, при работе с значением данного типа невозможно полагаться на == и === для определения, является ли переменная или литерал нечисловым значением ({{jsxref("Global_Objects/NaN", "NaN")}}) или нет, так как проверки <code>NaN == NaN</code> и <code>NaN === NaN</code> <em>в качестве значения вернут </em><code>false</code>. Следовательно, для проверки нужна функция <code>isNaN</code>.</p>
+
+<h4 id="Примечание">Примечание:</h4>
+
+<p>Для альтернативной проверки переменной на NaN без использования функции isNaN() можно воспользоваться конструкцией x !== x</p>
+
+<pre class="syntaxbox"><code><strong>var</strong> x = NaN</code>
+
+<code>x != x // true</code>
+<code>x !== x // true</code>
+</pre>
+
+<h3 id="Origin_of_NaN_values" name="Origin_of_NaN_values">Генерация значения <code>NaN</code></h3>
+
+<p>Значение <code>NaN</code> генерируются арифметическими операциями, результатом которых является <em>undefined</em> или <em>unrepresentable</em>. Такие условия не обязательно обозначают переполнение стека.<code> NaN</code> также может являться результатом попытки преобразования числа в строку, или значения, не имеющего эквивалента в простых числовых примитивах.</p>
+
+<p>Например, деление нуля на нуль возвращает <code>NaN</code> — <em>но деление других чисел на 0 не возвращает NaN</em>.</p>
+
+<pre class="syntaxbox"><code><strong>var</strong> x = NaN</code>
+
+<code>x != x // true</code>
+<code>x !== x // true</code>
+</pre>
+
+<h3 id="Особенности_поведения"><em>Особенности поведения</em></h3>
+
+<p>С самых ранних версий функции <code>isNaN</code> её поведение для не числовых переменных или литералов было довольно-таки запутанным. Когда аргументом функции <code>isNaN</code> является переменная, тип которой не <a href="http://es5.github.com/#x8.5" title="http://es5.github.com/#x8.5">Number</a>, она преобразуется к типу <code>Number</code>. Полученное значение затем проверяется, является ли оно {{jsxref("Global_Objects/NaN", "NaN")}}. Таким образом для не числовых значений, которые можно преобразовать в числовой тип без не-NaN значения (в частности, пустая строка или логические примитивы, которые преобразуются в 0 или 1), возвращаемое значение "false" может быть полной неожиданностью; пустая строка преобразуется в  "not a number." Путаница связана с тем, что "not a number" имеет определённое значение, описанное в стандарте IEEE-794 чисел с плавающей точкой. Функцию стоит воспринимать в качестве ответа на вопрос, "Является ли это значение корректным числом по стандарту IEEE-794?"</p>
+
+<p>В следующей версии ECMAScript (ES6) функция {{jsxref("Number.isNaN()")}} также присутствует. <code>Number.isNaN(x)</code> будет надёжным методом для проверки, содержит ли <code>x</code> значение <code>NaN</code> или нет. Даже с <code>Number.isNaN</code>, однако, результатом <code>NaN</code> остаётся точное числовое значение, а не просто "not a number".</p>
+
+<h2 id="Examples" name="Examples">Пример</h2>
+
+<pre class="brush: js">isNaN(NaN); // true
+isNaN(undefined); // true
+isNaN({}); // true
+
+isNaN(true); // false
+isNaN(null); // false
+isNaN(37); // false
+
+// strings
+isNaN("37"); // false: "37" преобразуется в число 37 которое не NaN
+isNaN("37.37"); // false: "37.37" преобразуется в число 37.37 которое не NaN
+isNaN(""); // false: пустая строка преобразуется в 0 которое не NaN
+isNaN(" "); // false: строка с пробелом преобразуется в 0 которое не NaN
+isNaN("37,5"); // true
+
+// Даты
+isNaN(new Date()); // false
+isNaN(new Date().toString()); // true
+
+// Пример почему использование isNaN не всегда уместно
+isNaN("blabla") // true: "blabla" преобразованно в число.
+ // При парсинге преобразуется в число при неудаче возвращает NaN
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Standard</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.2.4', 'isNaN')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-isnan-number', 'isNaN')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.isNaN")}}</p>
+
+<p> </p>
+
+<h2 id="See_also" name="See_also">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
+ <li>{{jsxref("Number.isNaN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/iterator/index.html b/files/ru/web/javascript/reference/global_objects/iterator/index.html
new file mode 100644
index 0000000000..0a55a44af9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/iterator/index.html
@@ -0,0 +1,138 @@
+---
+title: Iterator
+slug: Web/JavaScript/Reference/Global_Objects/Iterator
+tags:
+ - JavaScript
+ - Reference
+translation_of: Archive/Web/Iterator
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<div> </div>
+
+<div class="blockIndicator warning">
+<p><strong>Non-standard.</strong> The <code><strong>Iterator</strong></code> function is a SpiderMonkey-specific feature, and will be removed at some point. For future-facing usages, consider using <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of" title="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for..of</a> loops and the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol">iterator protocol</a>.</p>
+</div>
+
+<p>The <code><strong>Iterator</strong></code> function returns an object which implements legacy iterator protocol and iterates over enumerable properties of an object.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre>Iterator(<var>object</var>, [keyOnly])</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>Object to iterate over properties.</dd>
+ <dt><code>keyOnly</code></dt>
+ <dd>If <code>keyOnly</code> is truthy value, <code>Iterator.prototype.next</code> returns <code>property_name</code> only.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>Returns <code>Iterator</code> instance that iterates over <code>object</code>. <code>Iterator</code> instance returns <code>[property_name, property_value]</code> array for each iteration if <code>keyOnly</code> is falsy,  otherwise, if <code>keyOnly</code> is truthy, it returns <code>property_name</code> for each iteration.  If <code>object</code> is the <code>Iterator</code> instance or Generator instance, it returns <code>object</code> itself.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt><code><strong>Iterator.prototype[@@iterator]</strong></code></dt>
+ <dd>Returns a function that returns iterator object.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt><code><strong>Iterator.prototype.next</strong></code></dt>
+ <dd>Returns next item in the <code>[property_name, property_value]</code> format or <code>property_name</code> only. It throws <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/StopIteration">StopIteration</a></code> if there are no more items.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Iterating_over_properties_of_an_object">Iterating over properties of an object</h3>
+
+<pre><code>var a = {
+ x: 10,
+ y: 20,
+};
+var iter = Iterator(a);
+console.log(iter.next()); // ["x", 10]
+console.log(iter.next()); // ["y", 20]
+console.log(iter.next()); // throws StopIteration</code></pre>
+
+<h3 id="Iterating_over_properties_of_an_object_with_legacy_destructuring_for-in_statement">Iterating over properties of an object with legacy destructuring <code>for-in</code> statement</h3>
+
+<pre><code>var a = {
+ x: 10,
+ y: 20,
+};
+
+for (var [name, value] in Iterator(a)) {
+ console.log(name, value); // x 10
+ // y 20
+}</code></pre>
+
+<h3 id="Iterating_with_for-of">Iterating with <code>for-of</code></h3>
+
+<pre><code>var a = {
+ x: 10,
+ y: 20,
+};
+
+for (var [name, value] of Iterator(a)) { // @@iterator is used
+ console.log(name, value); // x 10
+ // y 20
+}</code></pre>
+
+<h3 id="Iterates_over_property_name">Iterates over property name</h3>
+
+<pre><code>var a = {
+ x: 10,
+ y: 20,
+};
+
+for (var name in Iterator(a, true)) {
+ console.log(name); // x
+ // y
+}</code></pre>
+
+<h3 id="Passing_Generator_instance">Passing Generator instance</h3>
+
+<pre><code>function* f() {
+ yield 'a';
+ yield 'b';
+}
+var g = f();
+
+console.log(g == Iterator(g)); // true
+
+for (var v in Iterator(g)) {
+ console.log(v); // a
+ // b
+}</code></pre>
+
+<h3 id="Passing_Iterator_instance">Passing Iterator instance</h3>
+
+<pre><code>var a = {
+ x: 10,
+ y: 20,
+};
+
+var i = Iterator(a);
+
+console.log(i == Iterator(i)); // true</code></pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<p>Non-standard. Not part of any current standards document</p>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>Not supported. Used to be in Firefox in versions prior to Firefox 57.</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Iterators_and_Generators" title="/en-US/docs/JavaScript/Guide/Iterators_and_Generators">Iterators and Generators</a></li>
+ <li><code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/StopIteration">StopIteration</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/json/index.html b/files/ru/web/javascript/reference/global_objects/json/index.html
new file mode 100644
index 0000000000..30cc3735af
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/json/index.html
@@ -0,0 +1,230 @@
+---
+title: JSON
+slug: Web/JavaScript/Reference/Global_Objects/JSON
+tags:
+ - JSON
+ - JavaScript
+ - Object
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/JSON
+---
+<div>{{JSRef("Global_Objects", "JSON")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <strong><code>JSON</code></strong> содержит методы для разбора <a class="external" href="http://json.org/">объектной нотации JavaScript</a> (JavaScript Object Notation — сокращённо {{glossary("JSON")}}) и преобразования значений в JSON. Его нельзя вызвать как функцию или сконструировать как объект, и кроме своих двух методов он не содержит никакой интересной функциональности.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<h3 id="JavaScript_Object_Notation" name="JavaScript_Object_Notation">Объектная нотация JavaScript</h3>
+
+<p>JSON является синтаксисом для сериализации объектов, массивов, чисел, строк логических значений и значения {{jsxref("null")}}. Он основывается на синтаксисе JavaScript, однако всё же отличается от него: не каждый код на JavaScript является JSON, и не каждый JSON является кодом на JavaScript. Смотрите также статью <a href="http://timelessrepo.com/json-isnt-a-javascript-subset">JSON: подмножество JavaScript, которым он не является</a> (на английском).</p>
+
+<table>
+ <caption>Различия между JavaScript и JSON</caption>
+ <thead>
+ <tr>
+ <th scope="col">Тип JavaScript</th>
+ <th scope="col">Отличия от JSON</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Объекты и массивы</td>
+ <td>Имена свойств должны быть строками, заключёнными в двойные кавычки; конечные запятые запрещены.</td>
+ </tr>
+ <tr>
+ <td>Числа</td>
+ <td>Ведущие нули запрещены; перед десятичной запятой обязательно должна быть хотя бы одна цифра.</td>
+ </tr>
+ <tr>
+ <td>Строки</td>
+ <td>
+ <p>Только ограниченный набор символов может быть заэкранирован; некоторые управляющие символы запрещены; разрешены юникодные символы разделительной линии (<a href="http://unicode-table.com/ru/2028/">U+2028</a>) и разделительного параграфа (<a href="http://unicode-table.com/ru/2029/">U+2029</a>); строки должны быть заключены в двойные кавычки. Смотрите следующий пример, в котором метод {{jsxref("JSON.parse()")}} отрабатывает без проблем, а при вычислении кода как JavaScript выбрасывается исключение {{jsxref("SyntaxError")}}:</p>
+
+ <pre class="brush: js">
+var code = '"\u2028\u2029"';
+JSON.parse(code); // работает
+eval(code); // ошибка
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Ниже представлен полный синтаскис JSON:</p>
+
+<pre class="line-numbers language-html"><code class="language-html">JSON = null
+ or true or false
+ or JSONNumber
+ or JSONString
+ or JSONObject
+ or JSONArray
+
+JSONNumber = - PositiveNumber
+ or PositiveNumber
+PositiveNumber = DecimalNumber
+ or DecimalNumber . Digits
+ or DecimalNumber . Digits ExponentPart
+ or DecimalNumber ExponentPart
+DecimalNumber = 0
+ or OneToNine Digits
+ExponentPart = e Exponent
+ or E Exponent
+Exponent = Digits
+ or + Digits
+ or - Digits
+Digits = Digit
+ or Digits Digit
+Digit = 0 through 9
+OneToNine = 1 through 9
+
+JSONString = ""
+ or " StringCharacters "
+StringCharacters = StringCharacter
+ or StringCharacters StringCharacter
+StringCharacter = any character
+ except " or \ or U+0000 through U+001F
+ or EscapeSequence
+EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
+ or \u HexDigit HexDigit HexDigit HexDigit
+HexDigit = 0 through 9
+ or A through F
+ or a through f
+
+JSONObject = { }
+ or { Members }
+Members = JSONString : JSON
+ or Members , JSONString : JSON
+
+JSONArray = [ ]
+ or [ ArrayElements ]
+ArrayElements = JSON
+ or ArrayElements , JSON</code></pre>
+
+<p>Во всех продукциях могут присутствовать незначащие пробельные символы, за исключением продукций <code><var>ЧислоJSON</var></code> (числа не должны содержать пробелов) и <code><var>СтрокаJSON</var></code> (где они интерпретируются как часть строки или возбуждают ошибку). Пробельными символами считаются символы табуляции (<a href="http://unicode-table.com/ru/0009/">U+0009</a>), возврата каретки (<a href="http://unicode-table.com/ru/000D/">U+000D</a>), перевода строки (<a href="http://unicode-table.com/ru/000A/">U+000A</a>) и, собственно, пробела (<a href="http://unicode-table.com/ru/0020/">U+0020</a>).</p>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("JSON.parse()")}}</dt>
+ <dd>Разбирает строку JSON, возможно с преобразованием получаемого значения и его свойств и возвращает разобранное значение.</dd>
+ <dt>{{jsxref("JSON.stringify()")}}</dt>
+ <dd>Возвращает строку JSON, соответствующую указанному значению, возможно с включением только определённых свойств или с заменой значений свойств определяемым пользователем способом.</dd>
+</dl>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Объект <code>JSON</code> не поддерживается старыми браузерами. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать объект <code>JSON</code> в реализациях, которые его ещё не поддерживают (например, в Internet Explorer 6).</p>
+
+<p>Следующий алгоритм имитирует работу настоящего объекта <code>JSON</code>:</p>
+
+<pre class="brush: js">if (!window.JSON) {
+ window.JSON = {
+ parse: function(sJSON) { return eval('(' + sJSON + ')'); },
+ stringify: function(vContent) {
+ if (vContent instanceof Object) {
+ var sOutput = '';
+ if (vContent.constructor === Array) {
+ for (var nId = 0; nId &lt; vContent.length; sOutput += this.stringify(vContent[nId]) + ',', nId++);
+ return '[' + sOutput.substr(0, sOutput.length - 1) + ']';
+ }
+ if (vContent.toString !== Object.prototype.toString) {
+ return '"' + vContent.toString().replace(/"/g, '\\$&amp;') + '"';
+ }
+ for (var sProp in vContent) {
+ sOutput += '"' + sProp.replace(/"/g, '\\$&amp;') + '":' + this.stringify(vContent[sProp]) + ',';
+ }
+ return '{' + sOutput.substr(0, sOutput.length - 1) + '}';
+ }
+ return typeof vContent === 'string' ? '"' + vContent.replace(/"/g, '\\$&amp;') + '"' : String(vContent);
+ }
+ };
+}
+</pre>
+
+<p>Более сложными известными <a class="external" href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">полифиллами</a> для объекта <code>JSON</code> являются проекты <a class="link-https" href="https://github.com/douglascrockford/JSON-js">JSON2</a> и <a class="external" href="http://bestiejs.github.com/json3">JSON3</a>.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-json-object', 'JSON')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatIE("8.0")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("4.0")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON">Использование родного объекта <code>JSON</code></a></li>
+ <li>{{jsxref("Date.prototype.toJSON()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/json/parse/index.html b/files/ru/web/javascript/reference/global_objects/json/parse/index.html
new file mode 100644
index 0000000000..febd8ba943
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/json/parse/index.html
@@ -0,0 +1,150 @@
+---
+title: JSON.parse()
+slug: Web/JavaScript/Reference/Global_Objects/JSON/parse
+tags:
+ - ECMAScript5
+ - JSON
+ - JavaScript
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/JSON/parse
+---
+<div>{{JSRef("Global_Objects", "JSON")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>JSON.parse()</code></strong> разбирает строку JSON, возможно с преобразованием получаемого в процессе разбора значения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>JSON.parse(<var>text</var>[, <var>reviver</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>text</code></dt>
+ <dd>Разбираемая строка JSON. Смотрите документацию по объекту {{jsxref("JSON")}} для описания синтаксиса JSON.</dd>
+ <dt><code>reviver</code> {{optional_inline}}</dt>
+ <dd>Если параметр является функцией, определяет преобразование полученного в процессе разбора значения, прежде, чем оно будет возвращено вызывающей стороне.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Возвращает объект {{jsxref("Object")}}, соответствующий переданной строке JSON <code>text</code>.</p>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+<p>Выбрасывает исключение {{jsxref("SyntaxError")}}, если разбираемая строка не является правильным JSON.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_JSON.parse" name="Example:_Using_JSON.parse">Пример: использование метода <code>JSON.parse()</code></h3>
+<pre class="brush: js">JSON.parse('{}'); // {}
+JSON.parse('true'); // true
+JSON.parse('"foo"'); // "foo"
+JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
+JSON.parse('null'); // null
+</pre>
+
+<h3 id="Example:_Using_the_reviver_parameter" name="Example:_Using_the_reviver_parameter">Пример: использование параметра <code>reviver</code></h3>
+<p>Если определён параметр <code>reviver</code>, значение, вычисляемое при разборе строки, будет <em>преобразовано</em> перед его возвратом. В частности, вычисленное значение и все его свойства (начиная с самых вложенных свойств и кончая самим значением), каждое проходят через функцию <code>reviver</code>, которая вызывается с контекстом <code>this</code>, содержащим объект в виде обрабатываемого свойства, и с аргументами: именем свойства в виде строки и значением свойства. Если функция <code>reviver</code> вернёт {{jsxref("undefined")}} (либо вообще не вернёт никакого значения, например, если выполнение достигнет конца функции), свойство будет удалено из объекта. В противном случае свойство будет переопределено возвращаемым значением.</p>
+<p>В конечном итоге, функция <code>reviver</code> вызывается с пустой строкой и самым верхним значением, чтобы обеспечить преобразование самого верхнего значения. Убедитесь, что вы правильно обрабатываете этот случай — обычно для этого нужно просто вернуть само значение — или метод <code>JSON.parse()</code> вернёт {{jsxref("undefined")}}.</p>
+<pre class="brush: js">JSON.parse('{"p": 5}', function(k, v) {
+ if (k === '') { return v; } // самое верхнее значение - возвращаем его
+ return v * 2; // иначе возвращаем v * 2.
+}); // { p: 10 }
+
+JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', function(k, v) {
+ console.log(k); // пишем имя текущего свойства, последним именем будет ""
+ return v; // возвращаем неизменённое значение свойства
+});
+
+// 1
+// 2
+// 4
+// 6
+// 5
+// 3
+// ""
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.12.2', 'JSON.parse')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.7.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-json.parse', 'JSON.parse')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatIE("8.0")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("4.0")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+<p>Начиная с Gecko 29 {{geckoRelease("29")}}, при передаче некорректной строки JSON выдаётся более подробное собщение об ошибке, содержащее номер строки и колонки, в которых была обнаружена ошибка разбора. Это полезно при отладке больших данных JSON.</p>
+<pre class="brush: js">JSON.parse('[1, 2, 3,]');
+// SyntaxError: JSON.parse: unexpected character at
+// line 1 column 10 of the JSON data
+// SyntaxError: JSON.parse: неожиданный символ
+// в строке 1, колонке 10 данных JSON
+</pre>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON">Использование родного объекта <code>JSON</code></a></li>
+ <li>{{jsxref("JSON.stringify()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/json/stringify/index.html b/files/ru/web/javascript/reference/global_objects/json/stringify/index.html
new file mode 100644
index 0000000000..04ccba32a7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/json/stringify/index.html
@@ -0,0 +1,189 @@
+---
+title: JSON.stringify()
+slug: Web/JavaScript/Reference/Global_Objects/JSON/stringify
+tags:
+ - JSON
+ - JavaScript
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/JSON/stringify
+---
+<div>{{JSRef("Global_Objects", "JSON")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>JSON.stringify()</code></strong> преобразует значение JavaScript в строку JSON, возможно с заменой значений, если указана функция замены, или с включением только определённых свойств, если указан массив замены.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>JSON.stringify(<var>value</var>[, <var>replacer</var>[, <var>space</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, преобразуемое в строку JSON.</dd>
+ <dt><code>replacer</code> {{optional_inline}}</dt>
+ <dd>Если является функцией, преобразует значения и свойства по ходу их преобразования в строку; если является массивом, определяет набор свойств, включаемых в объект в окончательной строке.<br>
+ Подробное описание функции <code>replacer</code> даётся в статье <a href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON#The_replacer_parameter">Использование родного объекта <code>JSON</code></a> руководства по JavaScript.</dd>
+ <dt><code>space</code> {{optional_inline}}</dt>
+ <dd>Делает результат красиво отформатированным (расставляя пробелы).</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>JSON.stringify()</code> преобразует значение в представляющую его нотацию JSON со следующими оговорками:</p>
+
+<ul>
+ <li>Порядок преобразования в строку свойств объектов, не являющихся массивами, не гарантируется. Не полагайтесь на порядок свойств во время преобразования.</li>
+ <li>Объекты {{jsxref("Boolean")}}, {{jsxref("Number")}} и {{jsxref("String")}} преобразуются в соответствующие примитивные значения, в соответствии с традиционным соглашением о семантике преобразований.</li>
+ <li>Значение {{jsxref("undefined")}}, функция или символ, встреченные во время преобразования, будут либо опущены (если они найдены в объекте), либо превращены в {{jsxref("null")}} (если они найдены в массиве).</li>
+ <li>Все свойства, имеющие ключ в виде символа, будут полностью проигнорированы, даже при использовании функции <code>replacer</code>.</li>
+</ul>
+
+<pre class="brush: js">JSON.stringify({}); // '{}'
+JSON.stringify(true); // 'true'
+JSON.stringify('foo'); // '"foo"'
+JSON.stringify([1, 'false', false]); // '[1,"false",false]'
+JSON.stringify({ x: 5 }); // '{"x":5}'
+
+JSON.stringify({ x: 5, y: 6 });
+// '{"x":5,"y":6}' or '{"y":6,"x":5}'
+JSON.stringify([new Number(1), new String('false'), new Boolean(false)]);
+// '[1,"false",false]'
+
+// Символы:
+JSON.stringify({ x: undefined, y: Object, z: Symbol('') });
+// '{}'
+JSON.stringify({ [Symbol('foo')]: 'foo' });
+// '{}'
+JSON.stringify({ [Symbol.for('foo')]: 'foo' }, [Symbol.for('foo')]);
+// '{}'
+JSON.stringify({ [Symbol.for('foo')]: 'foo' }, function(k, v) {
+ if (typeof k === 'symbol') {
+ return 'символ';
+ }
+});
+// '{}'
+</pre>
+
+<h3 id="space_argument" name="space_argument">Параметр <code>space</code></h3>
+
+<p>Параметр <code>space</code> может использоваться для управления форматированием отступов в конечной строке. Если он числовой, каждый последующий уровень вложенности будет дополнен отступом из пробелов, количество которых соответствует уровню (вплоть до десятого уровня). Если он строковый, каждый последующий уровень вложенности будет предваряться этой строкой (или её первыми десятью символами).</p>
+
+<pre class="brush: js">JSON.stringify({ a: 2 }, null, ' ');
+// '{
+// "a": 2
+// }'
+</pre>
+
+<p>Использование символа табуляции имитирует стандартное красивое форматирование:</p>
+
+<pre class="brush: js">JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
+// вернёт строку:
+// '{
+// "uno": 1,
+// "dos": 2
+// }'
+</pre>
+
+<h3 id="toJSON_behavior" name="toJSON_behavior">Поведение метода <code>toJSON()</code></h3>
+
+<p>Если преобразуемый в строку объект имеет свойство с именем <code>toJSON</code> и значением свойства, установленным в функцию, то этот метод <code>toJSON()</code> изменит стандартное поведение преобразования в JSON: вместо преобразования объекта будет использоваться значение, возвращаемое методом <code>toJSON()</code>. Например:</p>
+
+<div class="warning">
+<p>Функции не являются допустимыми данными в JSON, так что они не будут работать. Кроме того, некоторые объекты, например, объект {{jsxref("Date")}}, станут строками после применения {{jsxref("JSON.parse()")}}.</p>
+</div>
+
+<pre class="brush: js">var obj = {
+ foo: 'foo',
+ toJSON: function() {
+ return 'bar';
+ }
+};
+JSON.stringify(obj); // '"bar"'
+JSON.stringify({ x: obj }); // '{"x":"bar"}'
+</pre>
+
+<h3 id="Example_of_using_JSON.stringify_with_localStorage" name="Example_of_using_JSON.stringify_with_localStorage">Пример использования метода <code>JSON.stringify()</code> вместе с <code>localStorage</code></h3>
+
+<p>В случае, если вы хотите сохранить объект таким образом, чтобы его можно было восстановить даже после закрытия браузера, имеет смысл воспользоваться следующим примером, демонстрирующим применение метода <code>JSON.stringify()</code>:</p>
+
+<pre class="brush: js">// Создаём некоторый объект
+var session = {
+ 'screens': [],
+ 'state': true
+};
+session.screens.push({ 'name': 'экранА', 'width': 450, 'height': 250 });
+session.screens.push({ 'name': 'экранБ', 'width': 650, 'height': 350 });
+session.screens.push({ 'name': 'экранВ', 'width': 750, 'height': 120 });
+session.screens.push({ 'name': 'экранГ', 'width': 250, 'height': 60 });
+session.screens.push({ 'name': 'экранД', 'width': 390, 'height': 120 });
+session.screens.push({ 'name': 'экранЕ', 'width': 1240, 'height': 650 });
+
+// Преобразуем его в строку JSON с помощью метода JSON.stringify(),
+// затем сохраняем его в localStorage под именем session
+localStorage.setItem('session', JSON.stringify(session));
+
+// Пример того, как можно преобразовать строку, полученную с помощью метода
+// JSON.stringify() и сохранённую в localStorage обратно в объект
+var restoredSession = JSON.parse(localStorage.getItem('session'));
+
+// Переменная restoredSession содержит объект, который был сохранён
+// в localStorage
+console.log(restoredSession);
+</pre>
+
+<h3 id="Example_of_using_replacer_parameter" name="Example_of_using_replacer_parameter">Пример использования параметра <code>replacer</code></h3>
+
+<pre class="brush: js">var foo = { foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7 };
+
+JSON.stringify(foo, function(key, value) {
+ if (typeof value === 'string') {
+ return undefined; // удаляем все строковые свойства
+ }
+ return value;
+}); // '{"week":45,"month":7}'
+
+JSON.stringify(foo, ['week', 'month']);
+// '{"week":45,"month":7}', сохранились только свойства week и month
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.12.3', 'JSON.stringify')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.7.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-json.stringify', 'JSON.stringify')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.JSON.stringify")}}</p>
+</div>
+
+
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Using_native_JSON">Использование родного объекта <code>JSON</code></a></li>
+ <li>{{jsxref("JSON.parse()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/@@species/index.html b/files/ru/web/javascript/reference/global_objects/map/@@species/index.html
new file mode 100644
index 0000000000..cd65113453
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/@@species/index.html
@@ -0,0 +1,111 @@
+---
+title: 'get Map[@@species]'
+slug: Web/JavaScript/Reference/Global_Objects/Map/@@species
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/@@species
+---
+<div>{{JSRef}}</div>
+
+<p>Акцессор свойства <code><strong>Map[@@species]</strong></code> возвращает <code>Map</code> конструктор.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Map[Symbol.species]
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Акцессор свойства species, возвращает конструктор по умолчанию для <code>Map</code> объектов. Конструкторы подклассов могут переопределить его, чтобы изменить поведение конструктора.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Свойство species возвращает конструктор по умолчанию, который является конструктором <code>Map</code> для <code>Map</code> объектов:</p>
+
+<pre class="brush: js">Map[Symbol.species]; // функция Map()</pre>
+
+<p>В производном объекте коллекции (например, ваша пользовательская карта <code>MyMap</code>), <code>MyMap</code> species является <code>MyMap</code> конструктором. Однако, вы можете захотеть переопределить это, что бы вернуть родительский <code>Map</code> в методах вашего производного класса:</p>
+
+<pre class="brush: js">class MyMap extends Map {
+ // Перезаписываем MyMap species на родительский Map конструктор
+ static get [Symbol.species]() { return Map; }
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-get-map-@@species', 'get Map [ @@species ]')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Исходное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-map-@@species', 'get Map [ @@species ]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Функция</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("41")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Функция</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("41")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_так_же">Смотри так же</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Symbol.species")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/clear/index.html b/files/ru/web/javascript/reference/global_objects/map/clear/index.html
new file mode 100644
index 0000000000..57754a8e55
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/clear/index.html
@@ -0,0 +1,119 @@
+---
+title: Map.prototype.clear()
+slug: Web/JavaScript/Reference/Global_Objects/Map/clear
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Map
+ - Method
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/clear
+---
+<div>{{JSRef}}</div>
+
+<p><code><font face="Open Sans, arial, sans-serif">Метод </font><strong>clear()</strong></code> удаляет все элементы из объекта <code>Map</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.clear();</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_clear">Использование метода <code>clear</code></h3>
+
+<pre class="brush: js">var myMap = new Map();
+myMap.set('bar', 'baz');
+myMap.set(1, 'foo');
+
+myMap.size; // 2
+myMap.has('bar'); // true
+
+myMap.clear();
+
+myMap.size; // 0
+myMap.has('bar') // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.clear', 'Map.prototype.clear')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.clear', 'Map.prototype.clear')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>38</td>
+ <td>{{CompatGeckoDesktop("19.0")}}</td>
+ <td>11</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatGeckoMobile("19.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..749996f85b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/delete/index.html
@@ -0,0 +1,79 @@
+---
+title: Map.prototype.delete()
+slug: Web/JavaScript/Reference/Global_Objects/Map/delete
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+ - Ссылка
+ - метод
+ - прототип
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/delete
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>delete()</strong></code> удаляет указанный элемент из объекта {{jsxref("Map")}}.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/map-prototype-delete.html")}}</div>
+
+<p class="hidden">Исходники данного интерактивного примера хранятся в репозитории GitHub. Если вы хотите внести свой склад в проект интерактивных примеров - пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и пришлите нам пулл-реквест.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js">myMap.delete(key);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Ключ элемента удаляемого из объекта {{jsxref("Map")}}</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code>true</code> если элемент существовал в {{jsxref("Map")}} и он был удален или <code>false</code> если элемента с такким ключом не было.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_delete">Использование метода <code>delete</code></h3>
+
+<pre class="brush: js">var myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.delete("bar"); // Возвращает true. Успешно удалён.
+myMap.has("bar"); // Возвращает false. Элемента "bar" больше нет.
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.delete', 'Map.prototype.delete')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.delete', 'Map.prototype.delete')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на данной странице сгенерирована из структурированных данных. Если вы хотите дополнить данные - пожалуйста клонируйте <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и пришлите нам свой пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.Map.delete")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..fd34bd9a6b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/entries/index.html
@@ -0,0 +1,127 @@
+---
+title: Map.prototype.entries()
+slug: Web/JavaScript/Reference/Global_Objects/Map/entries
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/entries
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>entries()</strong></code> возвращает новый <strong><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итератор</a></strong>, содержащий пары <code>[key, value]</code> для каждого элемента объекта {{jsxref("Map")}} в том порядке, в котором они были заведены.</p>
+
+<p>Исходный код всех примеров для  {{jsxref("Map")}} сохранен на GitHub <a href="https://github.com/mdn/interactive-examples/tree/master/live-examples/js-examples/map">https://github.com/mdn/interactive-examples/tree/master/live-examples/js-examples/map</a>.</p>
+
+<p>Вы можете внести свой вклад, для этого: </p>
+
+<p>1. Клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a></p>
+
+<p>2. Ознакомьтесь с руководством <a href="https://github.com/mdn/interactive-examples/blob/master/CONTRIBUTING.md">https://github.com/mdn/interactive-examples/blob/master/CONTRIBUTING.md</a></p>
+
+<p>3. Напишите свой пример и отравьте нам запрос на извлечение.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.entries()</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый итератор объекта {{jsxref("Map")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_entries">Использование <code>entries()</code></h3>
+
+<pre class="brush:js">var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.entries();
+
+console.log(mapIter.next().value); // ["0", "foo"]
+console.log(mapIter.next().value); // [1, "bar"]
+console.log(mapIter.next().value); // [Object, "baz"]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.entries', 'Map.prototype.entries')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.entries', 'Map.prototype.entries')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("20") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("20")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype.keys()")}}</li>
+ <li>{{jsxref("Map.prototype.values()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..20111c1cdc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/foreach/index.html
@@ -0,0 +1,94 @@
+---
+title: Map.prototype.forEach()
+slug: Web/JavaScript/Reference/Global_Objects/Map/forEach
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/forEach
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>forEach()</strong></code><strong> </strong>выполняет переданную функцию единожды для каждой пары ключ/значение объекта <code>Map</code> в порядке их вставки.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/map-prototype-foreach.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.forEach(<em>callback</em>[, <em>thisArg</em>])</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, которая будет выполнена для каждого элемента.</dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Значение, которое будет использовано в качестве текущего при выполнении callback.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>forEach</code> выполняет переданный ему <code>callback</code> по разу для каждого фактически существующего ключа в наборе. <code>Callback</code> не вызывается для ключей, которые были удалены. Однако, он выполняется для элементов со значением <code>undefined</code>.</p>
+
+<p>При вызове <code>callback</code> используются <strong>три аргумента</strong>:</p>
+
+<ul>
+ <li><strong>значение элемента</strong></li>
+ <li><strong>ключ элемента</strong></li>
+ <li><strong>объект</strong> <strong><code>Map</code>, по которому осуществляется проход</strong></li>
+</ul>
+
+<p>Если аргумент <code>thisArg</code> указан для <code>forEach</code>, то при вызове <code>callback</code> он будет передан в качестве значения <code>this</code>.  В противном случае для <code>this</code> будет передано <code>undefined</code>. Значение <code>this</code>, в конечном итоге наблюдаемое в функции <code>callback</code>, определяется в соответствии c <a href="/ru/docs/Web/JavaScript/Reference/Operators/this">обычными правилами определения <code>this</code> в функции.</a></p>
+
+<p>Каждое значение посещается один раз, за исключением случая, когда оно было удалено и добавлено снова до завершения <code>forEach</code>. <code>callback</code> не вызывается для значений, удаленных до их посещения. Новые значения будут посещены, если они добавлены до завершения <code>forEach</code>.</p>
+
+<p><code>forEach</code> исполняет функцию <code>callback</code> один раз для каждого элемента в объекте <code>Map</code>; не возвращает значение.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Вывод_содержимого_объекта_Map">Вывод содержимого объекта <code>Map</code></h3>
+
+<p>Следующий код выводит в консоль строку для каждого элемента в объекте <code>Map</code>:</p>
+
+<pre class="brush:js">function logMapElements(value, key, map) {
+ console.log("m[" + key + "] = " + value);
+}
+new Map([["foo", 3], ["bar", {}], ["baz", undefined]]).forEach(logMapElements);
+// logs:
+// "m[foo] = 3"
+// "m[bar] = [object Object]"
+// "m[baz] = undefined"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.foreach', 'Map.prototype.forEach')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Map.forEach")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Set.prototype.forEach()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..ae4ca29646
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/get/index.html
@@ -0,0 +1,68 @@
+---
+title: Map.prototype.get()
+slug: Web/JavaScript/Reference/Global_Objects/Map/get
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/get
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>get()</strong></code> возвращает указанный элемент объекта {{jsxref("Map")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><em>myMap</em>.get(key);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязательный. Ключ элемента объекта {{jsxref("Map")}}.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращает элемент связанный с указанным ключом или <code>undefined</code>, если ключ не был найден в объекте {{jsxref("Map")}}​​​​.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_get">Использование метода <code>get</code>()</h3>
+
+<pre class="brush: js notranslate">var myMap = new Map();
+myMap.set('bar', 'foo');
+
+myMap.get('bar'); // Вернет "foo".
+myMap.get('baz'); // Вернет undefined.
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.get', 'Map.prototype.get')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.get', 'Map.prototype.get')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Map.get")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Map.prototype.set()")}}</li>
+ <li>{{jsxref("Map.prototype.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/has/index.html b/files/ru/web/javascript/reference/global_objects/map/has/index.html
new file mode 100644
index 0000000000..bb2fb71b74
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/has/index.html
@@ -0,0 +1,119 @@
+---
+title: Map.prototype.has()
+slug: Web/JavaScript/Reference/Global_Objects/Map/has
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/has
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>has()</strong></code> возвращает тип Boolean, указывающий существует ли элемент с указанным ключом или нет.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.has(key);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязательный параметр. Ключ элемента для проверки существования в объекте <code>Map.</code></dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<dl>
+ <dt>Boolean</dt>
+ <dd>Возвращает <code>true,</code> если элемент с указанным ключом существует в объекте <code>Map</code>; в противном случае возвращает <code>false</code>.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_has">Использование метода <code>has</code></h3>
+
+<pre class="brush: js">var myMap = new Map();
+myMap.set('bar', "foo");
+
+myMap.has('bar'); // возвращает true
+myMap.has('baz'); // возвращает false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.has', 'Map.prototype.has')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первоначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.has', 'Map.prototype.has')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>38</td>
+ <td>{{CompatGeckoDesktop("13.0")}}</td>
+ <td>11</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatGeckoMobile("13.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Map.prototype.set()")}}</li>
+ <li>{{jsxref("Map.prototype.get()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/index.html b/files/ru/web/javascript/reference/global_objects/map/index.html
new file mode 100644
index 0000000000..8e6551addf
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/index.html
@@ -0,0 +1,288 @@
+---
+title: Map
+slug: Web/JavaScript/Reference/Global_Objects/Map
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Map
+translation_of: Web/JavaScript/Reference/Global_Objects/Map
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary">Объект <strong><code>Map</code></strong> содержит пары ключ-значение и сохраняет порядок вставки.</span> Любое значение (как объекты, так и {{Glossary("Primitive", "примитивы")}}) могут быть использованы в качестве ключей.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new Map([<em>iterable</em>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Массив или любой другой <a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">итерируемый</a> объект чьими элементами являются пары ключ-значение (массивы из двух элементов, например <code>[[ 1, 'one' ],[ 2, 'two' ]]</code>). Все пары ключ-значение будут добавлены в новый экземпляр <code>Map</code>; <code>null</code> расценивается как <code>undefined</code>.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объект <code>Map</code> итерируется в порядке вставки его элементов — цикл {{jsxref("Statements/for...of", "for...of")}} будет возвращать массив <code>[key, value]</code> на каждой итерации.</p>
+
+<h3 id="Key_equality">Key equality</h3>
+
+<p>Сравнение ключей основано на алгоритме "{{Glossary("SameValueZero", "SameValueZero")}}": <code>NaN</code> равно <code>NaN</code> (несмотря на то, что <code>NaN !== NaN</code>), все другие значения рассматриваются равными исходя из семантики оператора строгого равенства <code>===</code>. В текущей спецификации ECMAScript <code>-0</code> и <code>+0</code> принимаются равными, но в ранних версиях обсуждения это было не так (см. "Value equality for -0 and 0" в таблице <a href="#Browser_compatibility">совместимости с браузерами</a>).</p>
+
+<h3 id="Сравнение_Объектов_и_Map">Сравнение Объектов и Map</h3>
+
+<p>Объекты похожи на <code>Map</code> в том, что оба позволяют устанавливать значения по ключам, получать эти значения, удалять ключи и проверять их наличие. В связи с этим (и потому, что не было встроенных альтернатив), {{jsxref("Object", "Объекты")}} исторически использовались как <code>Map</code>. Однако, у них есть ряд отличий, который дает преимущества <code>Map</code> в ряде случаев:</p>
+
+<ul>
+ <li>Ключами {{jsxref("Object", "Объекта")}} выступают {{jsxref("String", "Строки")}} и {{jsxref("Symbol", "Символы")}}, в то время как любое значение может быть ключом <code>Map</code>, включая {{jsxref("Function", "функции")}}, {{jsxref("Object", "объекты")}} и {{Glossary("Primitive", "примитивы")}}.</li>
+ <li>В отличие от {{jsxref("Object", "Объектов")}}, ключи в <code>Map</code> упорядочены. Таким образом, во время итерации <code>Map</code>, ключи возвращаются в порядке вставки.</li>
+ <li>Вы легко можете получить количество элементов в <code>Map</code> с помощью свойства <code>size</code>, в то время как количество элементов {{jsxref("Object", "Объекта")}} может быть определено только вручную.</li>
+ <li><code>Map</code> - <a href="/en-US/docs/Web/JavaScript/Guide/iterable">итерируемый</a> объект и может быть итерирован напрямую, в то время как {{jsxref("Object", "Объект")}} требует ручного получения списка ключей и их итерации.</li>
+ <li>{{jsxref("Object", "Объект")}} имеет прототип и поэтому имеет стандартный набор ключей, который, при неосторожности, может пересекаться с вашими ключами. С момента выхода ES5 это может быть изменено с помощью <code>map = Object.create(null)</code>.</li>
+ <li><code>Map</code> может иметь более высокую производительность в случаях частого добавления или удаления ключей.</li>
+</ul>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Map.length</code></dt>
+ <dd>Значение свойства <code>length</code> всегда равно 0.</dd>
+ <dd>Чтобы узнать количество элементов в <code>Map</code> - используйте {{jsxref("Map.prototype.size")}}.</dd>
+ <dt>{{jsxref("Map.@@species", "get Map[@@species]")}}</dt>
+ <dd>Функция-конструктор которая используется для создания производных объектов.</dd>
+ <dt>{{jsxref("Map.prototype")}}</dt>
+ <dd>Представляет прототип конструктора <code>Map</code>. Позволяет добавлять свойства всем объектам типа <code>Map</code>.</dd>
+</dl>
+
+<h2 id="Экземпляры_Map">Экземпляры <code>Map</code></h2>
+
+<p>Все экземпляры <code>Map</code> наследуются от {{jsxref("Map.prototype")}}.</p>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<dl>
+ <dt><code>Map.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создала прототип экземпляра. Это функция <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map" title="The Map object holds key-value pairs and remembers the original insertion order of the keys."><code>Map</code></a> по умолчанию.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/size" title="The size accessor property returns the number of elements in a Map object."><code>Map.prototype.size</code></a></dt>
+ <dd>Возвращает количество пар ключ/значение в объекте <code>Map</code>.</dd>
+</dl>
+
+<h3 id="Методы">Методы</h3>
+
+<dl>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/clear" title="The clear() method removes all elements from a Map object."><code>Map.prototype.clear()</code></a></dt>
+ <dd>Удаляет все пары ключ / значение из объекта <code>Map</code>.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete" title="The delete() method removes the specified element from a Map object by key."><code>Map.prototype.delete(key)</code></a></dt>
+ <dd>Возвращает <code>true</code>, если элемент в объекте <code>Map</code> существовал и был удален, или false, если элемент не существует. <code>Map.prototype.has(key)</code> вернет <code>false</code> позже.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/entries" title="The entries() method returns a new Iterator object that contains the [key, value] pairs for each element in the Map object in insertion order."><code>Map.prototype.entries()</code></a></dt>
+ <dd>Возвращает новый объект <code>Iterator</code> который содержит <strong>массив</strong> <strong><code>[key, value]</code></strong> для каждого элемента в объекте <code>Map</code> в порядке вставки.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/forEach" title="The forEach() method executes a provided function once per each key/value pair in the Map object, in insertion order."><code>Map.prototype.forEach(callbackFn[, thisArg])</code></a></dt>
+ <dd>Вызывает callbackFn один раз для каждой пары ключ-значение, присутствующей в объекте <code>Map</code>, в порядке вставки. Если для thisArg предоставляется параметр для forEach, он будет использоваться как значение this для каждого обратного вызова.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get" title="The get() method returns a specified element from a Map object."><code>Map.prototype.get(key)</code></a></dt>
+ <dd>Возвращает значение связанное с <code>key</code>, или <code>undefined</code> если его нет.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has" title="The has() method returns a boolean indicating whether an element with the specified key exists or not."><code>Map.prototype.has(key)</code></a></dt>
+ <dd>Возвращает логическое значение, подтверждающее, было ли значение связано с <code>key</code> в объекте <code>Map</code> или нет.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/keys" title="The keys() method returns a new Iterator object that contains the keys for each element in the Map object in insertion order."><code>Map.prototype.keys()</code></a></dt>
+ <dd>Возвращает новый объект <code>Iterator</code> содержащий ключи для каждого элемента в объекте <code>Map</code> в порядке вставки.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/set" title="The set() method adds or updates an element with a specified key and a value to a Map object."><code>Map.prototype.set(key, value)</code></a></dt>
+ <dd>Устанавливает значение для <code>key</code> в объекте <code>Map</code>. Возвращает объект <code>Map</code>.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/values" title="The values() method returns a new Iterator object that contains the values for each element in the Map object in insertion order."><code>Map.prototype.values()</code></a></dt>
+ <dd>Возвращает новый объект <code>Iterator</code> который содержит значения для каждого элемента в объекте <code>Map</code> в порядке вставки.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/@@iterator" title="The initial value of the @@iterator property is the same function object as the initial value of the entries method."><code>Map.prototype[@@iterator]()</code></a></dt>
+ <dd>Возвращает новый объект <code>Iterator</code> который содержит массив<strong> <code>[key, value]</code></strong> для каждого элемента в объекте <code>Map</code> в порядке вставки.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_объекта_Map">Использование объекта <code>Map</code></h3>
+
+<pre class="brush: js">const myMap = new Map();
+
+const keyObj = {},
+ keyFunc = function () {},
+ keyString = 'a string';
+
+// задание значений
+myMap.set(keyString, 'value associated with “a string”');
+myMap.set(keyObj, 'value associated with keyObj');
+myMap.set(keyFunc, 'value associated with keyFunc');
+
+myMap.size; // 3
+
+// получение значений
+myMap.get(keyString); // value associated with “a string”
+myMap.get(keyObj); // value associated with keyObj
+myMap.get(keyFunc); // value associated with keyFunc
+
+myMap.get('a string'); // "value associated with 'a string'"
+ // потому что keyString === 'a string'
+myMap.get({}); // undefined, потому что <span style="font-size: 1rem;">keyObj !== {} ({} — это литеральная нотация конструктора класса Object)</span>
+myMap.get(function() {}) // undefined, потому что <span style="font-size: 1rem;">keyFunc !== function () {}</span>
+</pre>
+
+<h3 id="Использование_NaN_в_качестве_ключей_Map">Использование <code>NaN</code> в качестве ключей <code>Map</code></h3>
+
+<p><code>NaN</code> может быть использован в качестве ключа. Несмотря на то, что <code>NaN</code> не равен самому себе (<code>NaN !== NaN</code> вернёт true), следующий пример работает, потому что <code>NaN</code> обрабатывается особым образом:</p>
+
+<pre class="brush: js">const myMap = new Map();
+myMap.set(NaN, 'not a number');
+
+myMap.get(NaN); // not a number
+
+const otherNaN = Number('foo');
+myMap.get(otherNaN); // not a number
+</pre>
+
+<h3 id="Итерация_Map_при_помощи_for..of">Итерация <code>Map</code> при помощи <code>for..of</code></h3>
+
+<p><code>Map</code> может быть итерирован с помощью <code>for..of</code>:</p>
+
+<pre class="brush: js">const myMap = new Map();
+myMap.set(0, 'zero');
+myMap.set(1, 'one');
+for (var [key, value] of myMap) {
+ console.log(key + ' = ' + value);
+}
+// 0 = zero
+// 1 = one
+
+for (var key of myMap.keys()) {
+ console.log(key);
+}
+// 0
+// 1
+
+for (var value of myMap.values()) {
+ console.log(value);
+}
+// zero
+// one
+
+for (var [key, value] of myMap.entries()) {
+ console.log(key + ' = ' + value);
+}
+// 0 = zero
+// 1 = one
+</pre>
+
+<h3 id="Итерация_Map_при_помощи_forEach">Итерация <code>Map</code> при помощи <code>forEach()</code></h3>
+
+<p><code>Map</code> может быть итерирован с помощью метода <code>forEach()</code>:</p>
+
+<pre class="brush: js">myMap.forEach(function(value, key) {
+ console.log(`${key} =&gt; ${value}`);
+});
+// 0 =&gt; zero
+// 1 =&gt; one
+</pre>
+
+<h3 id="Взаимоотношения_с_объектом_Array">Взаимоотношения с объектом <code>Array</code></h3>
+
+<pre class="brush: js">const kvArray = [['key1', 'value1'], ['key2', 'value2']];
+
+// Используйте конструктор Map для преобразования двумерных массивов в Map
+const myMap = new Map(kvArray);
+
+myMap.get('key1'); // вернёт “value1”
+
+// Используйте функцию Array.from для трансформации Map в двумерный key-value массив
+console.log(Array.from(myMap)); // Выведет точно такой же массив как kvArray
+
+// Или используйте итераторы keys или values чтобы преобразовать ключи или значения в массивы
+console.log(Array.from(myMap.keys())); // Выведет ['key1', 'key2']
+</pre>
+
+<h3 id="Клонирование_и_сляние_Map">Клонирование и сляние <code>Map</code></h3>
+
+<p> Равно как и {{jsxref("Array", "Массивы")}}, <code>Map</code> могут быть клонированы:</p>
+
+<pre class="brush: js">const original = new Map([
+ [1, 'one']
+]);
+
+const clone = new Map(original);
+
+console.log(clone.get(1)); // one
+console.log(original === clone); // false.</pre>
+
+<p>Следует помнить, что <em>данные</em> не клонируются.</p>
+
+<p><code>Map</code> могут быть слиты, с сохранением уникальности ключей:</p>
+
+<pre class="brush: js">const first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+]);
+
+const second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+]);
+
+// Слияние двух Map. Взят будет последний повторившийся ключ.
+// Оператор Spread по сути преобразует Map в массив
+const merged = new Map([...first, ...second]);
+
+console.log(merged.get(1)); // uno
+console.log(merged.get(2)); // dos
+console.log(merged.get(3)); // three</pre>
+
+<p>Map могут быть слиты и с {{jsxref("Array", "Массивами")}}:</p>
+
+<pre class="brush: js">const first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+]);
+
+const second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+]);
+
+// Слияние Map и массива. Как и при слиянии двух Map - взят будет последний повторившийся ключ.
+const merged = new Map([...first, ...second, [1, 'eins']]);
+
+console.log(merged.get(1)); // eins
+console.log(merged.get(2)); // dos
+console.log(merged.get(3)); // three</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map-objects', 'Map')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на данной странице сгенерирована из структурированных данных. Если вы хотите дополнить данные - пожалуйста клонируйте <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и пришлите нам свой пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.Map")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=697479">Map и Set баг в Mozilla</a></li>
+ <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets">Предложение ECMAScript Harmony</a></li>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakSet")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/keys/index.html b/files/ru/web/javascript/reference/global_objects/map/keys/index.html
new file mode 100644
index 0000000000..d7221c9a6e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/keys/index.html
@@ -0,0 +1,117 @@
+---
+title: Map.prototype.keys()
+slug: Web/JavaScript/Reference/Global_Objects/Map/keys
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/keys
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>keys()</strong></code> возвращает новый <strong><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итератор</a></strong>, содержащий ключи каждого элемента объекта {{jsxref("Map")}} в том порядке, в котором они были заведены.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.keys()</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый итератор объекта {{jsxref("Map")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_keys()">Использование метода <code>keys()</code></h3>
+
+<pre class="brush:js">var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.keys();
+
+console.log(mapIter.next().value); // "0"
+console.log(mapIter.next().value); // 1
+console.log(mapIter.next().value); // Object
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.keys', 'Map.prototype.keys')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.keys', 'Map.prototype.keys')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("20")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("20") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype.entries()")}}</li>
+ <li>{{jsxref("Map.prototype.values()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/prototype/index.html b/files/ru/web/javascript/reference/global_objects/map/prototype/index.html
new file mode 100644
index 0000000000..a930a48b30
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/prototype/index.html
@@ -0,0 +1,125 @@
+---
+title: Map.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Map/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Map
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <code><strong>Map</strong></code><strong><code>.prototype</code></strong> представляет собой прототип конструктора {{jsxref("Map")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Экземпляры {{jsxref("Map")}} наследуются от {{jsxref("Map.prototype")}}. Вы можете использовать объект конструктора прототипа для добавления свойств и методов ко всем экземплярам <code>Map</code>.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Map.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создающую экземпляр прототипа. Это функция {{jsxref("Map")}} по умолчанию. </dd>
+ <dt>{{jsxref("Map.prototype.size")}}</dt>
+ <dd>Возвращает количество пар key/value, содержащихся в объекте <code>Map</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Map.prototype.clear()")}}</dt>
+ <dd>Удаляет все пары key/value из объекта <code>Map</code>.</dd>
+ <dt>{{jsxref("Map.delete", "Map.prototype.delete(key)")}}</dt>
+ <dd>Возвращает <code>true</code>, если элемент присутствовал в объекте <code>Map</code> и был удалён, или <code>false</code>, если элемент отсутствует. После вызова этого метода <code>Map.prototype.has(key)</code> вернёт <code>false</code>.</dd>
+ <dt>{{jsxref("Map.prototype.entries()")}}</dt>
+ <dd>Возвращает новый объект итератора - new <code>Iterator</code>, который содержит <strong>массив из [key, value]</strong> для каждого элемента в объекте <code>Map</code> в порядке добавления.</dd>
+ <dt>{{jsxref("Map.forEach", "Map.prototype.forEach(callbackFn[, thisArg])")}}</dt>
+ <dd>Вызывает callbackFn для каждой пары key/value, находящейся в объекте <code>Map</code>, в порядке добавления. Если указан параметр thisArg, он будет использоваться в качестве значения this при каждом вызове callbackFn. </dd>
+ <dt>{{jsxref("Map.get", "Map.prototype.get(key)")}}</dt>
+ <dd>Возвращает значение по указанному ключу <code>key</code> или <code>undefined</code>, если значение отсутствует. </dd>
+ <dt>{{jsxref("Map.has", "Map.prototype.has(key)")}}</dt>
+ <dd>Возвращает <code>true</code> или <code>false</code> в зависимости от того, было ли значение связано с <code>key</code> в объекте <code>Map</code> или нет.</dd>
+ <dt>{{jsxref("Map.prototype.keys()")}}</dt>
+ <dd>Возвращает новый объект итератора - new <code>Iterator</code>, который содержит <strong>keys</strong> для каждого элемента в объекте <code>Map</code> в порядке добавления.</dd>
+ <dt>{{jsxref("Map.set", "Map.prototype.set(key, value)")}}</dt>
+ <dd>Устанавлиевает value для <code>key</code> в объекте <code>Map</code>. Возвращает объект <code>Map</code>.</dd>
+ <dt>{{jsxref("Map.prototype.values()")}}</dt>
+ <dd>Возвращает новый объект итератора - new <code>Iterator</code>, который содержит <strong>values</strong> для каждого элемента в объекте <code>Map</code> в порядке добавления.</dd>
+ <dt>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</dt>
+ <dd>Возвращает новый объект итератора - new <code>Iterator</code>, который содержит <strong>массив из [key, value]</strong> для каждого элемента в объекте <code>Map</code> в порядке добавления. </dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-map.prototype', 'Map.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>38</td>
+ <td>{{ CompatGeckoDesktop("13") }}</td>
+ <td>11</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatGeckoMobile("13")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>
+ <p>8</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/set/index.html b/files/ru/web/javascript/reference/global_objects/map/set/index.html
new file mode 100644
index 0000000000..b3f13a7fe5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/set/index.html
@@ -0,0 +1,140 @@
+---
+title: Map.prototype.set()
+slug: Web/JavaScript/Reference/Global_Objects/Map/set
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/set
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>set()</strong></code> добавляет объекту {{jsxref("Map")}} новый элемент или обновляет существующий с указанными значениями <code>key</code> и <code>value</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.set(key, value);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Ключ добавляемого элемента.</dd>
+ <dt>value</dt>
+ <dd>Значение добавляемого элемента.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Объект {{jsxref("Map")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_set()">Использование метода <code>set()</code></h3>
+
+<pre class="brush: js">var myMap = new Map();
+
+// Добавление нового элемента объекту Map
+myMap.set('bar', 'foo');
+myMap.set(1, 'foobar');
+
+// Обновление существующего элемента
+myMap.set('bar', 'baz');
+</pre>
+
+<h3 id="Последовательное_использование_метода_set()">Последовательное использование метода <code>set()</code></h3>
+
+<p>Так как метод <code>set()</code> возвращает объект <code>Map</code>, Вы можете последовательно применять метод <code>set()</code> как в примере ниже:</p>
+
+<pre class="brush: js"><code>// Последовательно добавляет новые элементы в myMap:
+myMap.set('bar', 'foo')
+ .set(1, 'foobar')
+ .set(2, 'baz');</code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.set', 'Map.prototype.set')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.set', 'Map.prototype.set')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("13.0")}}</td>
+ <td>11</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("13.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Примечание_к_поддержке_браузерами">Примечание к поддержке браузерами</h2>
+
+<ul>
+ <li>В Firefox 33 {{geckoRelease("33")}} и более ранних версиях <code>Map.prototype.set</code> возвращал <code>undefined</code> и не был доступен вызов его в цепочке. Это было поправлено ({{bug(1031632)}}). Данное поведение было также обнаружено в Chrome/v8 (<a href="https://code.google.com/p/v8/issues/detail?id=3410">issue</a>) и IE11.</li>
+</ul>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Map.prototype.get()")}}</li>
+ <li>{{jsxref("Map.prototype.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/size/index.html b/files/ru/web/javascript/reference/global_objects/map/size/index.html
new file mode 100644
index 0000000000..7716b386fd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/size/index.html
@@ -0,0 +1,112 @@
+---
+title: Map.prototype.size
+slug: Web/JavaScript/Reference/Global_Objects/Map/size
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/size
+---
+<div>{{JSRef}}</div>
+
+<p>Геттер <code>size</code> возвращает количество элементов в объекте {{jsxref("Map")}}.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/map-prototype-size.html")}}</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Значение <code>size</code> - целое число, описывающее, сколько элементов имеет объект Map. У свойства <code>size</code> не определён сеттер: переопределить его нельзя.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_size">Использование <code>size</code></h3>
+
+<pre class="brush:js notranslate">var myMap = new Map();
+myMap.set("a", "альфа");
+myMap.set("b", "бета");
+myMap.set("g", "гамма");
+
+myMap.size // 3
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-get-map.prototype.size', 'Map.prototype.size')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первое определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-map.prototype.size', 'Map.prototype.size')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>38</td>
+ <td>{{ CompatGeckoDesktop("19") }}</td>
+ <td>{{ CompatIE("11") }}</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatGeckoMobile("19")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Замечания_для_Gecko">Замечания для Gecko</h2>
+
+<ul>
+ <li>С версии Gecko 13 {{geckoRelease("13")}} до Gecko 18 {{geckoRelease("18")}} свойство <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">size</span></font> было методом <code>Map.prototype.size</code>, но это было изменено в поздних версиях чтобы соответствовать спецификации ECMAScript 2015 ({{bug("807001")}}).</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/map/values/index.html b/files/ru/web/javascript/reference/global_objects/map/values/index.html
new file mode 100644
index 0000000000..6267dab64e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/map/values/index.html
@@ -0,0 +1,116 @@
+---
+title: Map.prototype.values()
+slug: Web/JavaScript/Reference/Global_Objects/Map/values
+translation_of: Web/JavaScript/Reference/Global_Objects/Map/values
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>values()</strong></code> возвращает новый <strong><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итератор</a></strong>, содержащий значения каждого элемента в объекте {{jsxref("Map")}} в том порядке, в котором они были заведены.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>myMap</em>.values()</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый итератор объекта {{jsxref("Map")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_values()">Использование <code>values()</code></h3>
+
+<pre class="brush:js">var myMap = new Map();
+myMap.set('0', 'foo');
+myMap.set(1, 'bar');
+myMap.set({}, 'baz');
+
+var mapIter = myMap.values();
+
+console.log(mapIter.next().value); // "foo"
+console.log(mapIter.next().value); // "bar"
+console.log(mapIter.next().value); // "baz"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-map.prototype.values', 'Map.prototype.values')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map.prototype.values', 'Map.prototype.values')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("20") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>25</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>38</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("20") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype.entries()")}}</li>
+ <li>{{jsxref("Map.prototype.keys()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/abs/index.html b/files/ru/web/javascript/reference/global_objects/math/abs/index.html
new file mode 100644
index 0000000000..2d46eb6650
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/abs/index.html
@@ -0,0 +1,100 @@
+---
+title: Math.abs()
+slug: Web/JavaScript/Reference/Global_Objects/Math/abs
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/abs
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.abs()</code></strong> возвращает абсолютное значение числа. то есть</p>
+
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.abs</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mrow><mo stretchy="false">|</mo><mi>x</mi><mo stretchy="false">|</mo></mrow><mo>=</mo><mrow><mo>{</mo><mtable columnalign="left left"><mtr><mtd><mi>x</mi></mtd><mtd><mtext>if</mtext><mspace width="1em"></mspace><mi>x</mi><mo>≥</mo><mn>0</mn></mtd></mtr><mtr><mtd><mo>-</mo><mi>x</mi></mtd><mtd><mtext>if</mtext><mspace width="1em"></mspace><mi>x</mi><mo>&lt;</mo><mn>0</mn></mtd></mtr></mtable></mrow></mrow><annotation encoding="TeX">{\mathtt{\operatorname{Math.abs}(x)}} = {|x|} = \begin{cases} x &amp; \text{if} \quad x \geq 0 \\ x &amp; \text{if} \quad x &lt; 0 \end{cases} </annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.abs(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>abs()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.abs()</code>, а не пытаться вызывать метод на созданном объекте <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Math.abs_behavior" name="Example:_Math.abs_behavior">Пример: поведение метода <code>Math.abs()</code></h3>
+
+<p>Метод вернёт {{jsxref("NaN")}}, если в него передать нечисловую строку или значение {{jsxref("undefined")}}/ничего не передавать. Метод вернёт 0, если в него передать значение {{jsxref("null")}}.</p>
+
+<pre class="brush: js">Math.abs('-1'); // 1
+Math.abs(-2); // 2
+Math.abs(null); // 0
+Math.abs(''); // 0
+Math.abs([]); // 0
+Math.abs([2]); // 2
+Math.abs([1,2]); // NaN
+Math.abs({}); // NaN
+Math.abs('string'); // NaN
+Math.abs(); // NaN
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.1', 'Math.abs')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.abs', 'Math.abs')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math.abs', 'Math.abs')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+
+
+<h2 id="Browser_compatibility" name="Browser_compatibility"><br>
+ Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Math.abs")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.ceil()")}}</li>
+ <li>{{jsxref("Math.floor()")}}</li>
+ <li>{{jsxref("Math.round()")}}</li>
+ <li>{{jsxref("Math.sign()")}}</li>
+ <li>{{jsxref("Math.trunc()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/acos/index.html b/files/ru/web/javascript/reference/global_objects/math/acos/index.html
new file mode 100644
index 0000000000..0506d944ab
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/acos/index.html
@@ -0,0 +1,125 @@
+---
+title: Math.acos()
+slug: Web/JavaScript/Reference/Global_Objects/Math/acos
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/acos
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.acos()</code></strong> возвращает арккосинус числа (в радианах), то есть</p>
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>∊</mo><mo stretchy="false">[</mo><mrow><mo>-</mo><mn>1</mn></mrow><mo>;</mo><mn>1</mn><mo stretchy="false">]</mo><mo>,</mo><mspace width="thickmathspace"></mspace><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.acos</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">arccos</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mo>∊</mo><mo stretchy="false">[</mo><mn>0</mn><mo>;</mo><mi>π</mi><mo stretchy="false">]</mo><mspace width="thinmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">cos</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.acos}(x)} = \arccos(x) = \text{ уникальный } \; y \in [0; \pi] \, \text{такой, что} \; \cos(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.acos(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.acos()</code> возвращает числовое значение между 0 и π радианами для значения <code>x</code>, лежащего в диапазоне от -1 до 1. Метод вернёт {{jsxref("NaN")}}, если значение <code>x</code> выйдет за этот диапазон.</p>
+<p>Поскольку метод <code>acos()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.acos()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.acos" name="Example:_Using_Math.acos">Пример: использование метода <code>Math.acos()</code></h3>
+<pre class="brush:js">Math.acos(-2); // NaN
+Math.acos(-1); // 3.141592653589793
+Math.acos(0); // 1.5707963267948966
+Math.acos(0.5); // 1.0471975511965979
+Math.acos(1); // 0
+Math.acos(2); // NaN
+</pre>
+<p>Для значений, меньших -1 или больших 1, метод <code>Math.acos()</code> возвращает {{jsxref("NaN")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.2', 'Math.acos')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.acos', 'Math.acos')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/acosh/index.html b/files/ru/web/javascript/reference/global_objects/math/acosh/index.html
new file mode 100644
index 0000000000..7dc0900c24
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/acosh/index.html
@@ -0,0 +1,136 @@
+---
+title: Math.acosh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/acosh
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/acosh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.acosh()</code></strong> возвращает гиперболический арккосинус числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>≥</mo><mn>1</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.acosh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="thinmathspace">arcosh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mo>≥</mo><mn>0</mn><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">cosh</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x \geq 1, \mathtt{\operatorname{Math.acosh}(x)} = \operatorname{arcosh}(x) = \text{ уникальный } \; y \geq 0 \; \text{такой, что} \; \cosh(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.acosh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>acosh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.acosh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.acosh" name="Example:_Using_Math.acosh">Пример: использование метода <code>Math.acosh()</code></h3>
+
+<pre class="brush: js">Math.acosh(-1); // NaN
+Math.acosh(0); // NaN
+Math.acosh(0.5) // NaN
+Math.acosh(1); // 0
+Math.acosh(2); // 1.3169578969248166
+</pre>
+
+<p>Для значений, меньших 1, метод <code>Math.acosh()</code> возвращает {{jsxref("NaN")}}.</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Для всех <math><semantics><mrow><mi>x</mi><mo>≥</mo><mn>1</mn></mrow><annotation encoding="TeX">x \geq 1</annotation></semantics></math>, мы имеем <math><semantics><mrow><mo lspace="0em" rspace="thinmathspace">arcosh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mrow><mo>(</mo><mrow><mi>x</mi><mo>+</mo><msqrt><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>-</mo><mn>1</mn></mrow></msqrt></mrow><mo>)</mo></mrow></mrow><annotation encoding="TeX">\operatorname {arcosh} (x) = \ln \left(x + \sqrt{x^{2} - 1} \right)</annotation></semantics></math>, так что этот метод может эмулироваться следующим образом:</p>
+
+<pre class="brush: js">Math.acosh = Math.acosh || function(x) {
+ return Math.log(x + Math.sqrt(x * x - 1));
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.acosh', 'Math.acosh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.asinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.atanh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.cosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.sinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.tanh()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/asin/index.html b/files/ru/web/javascript/reference/global_objects/math/asin/index.html
new file mode 100644
index 0000000000..beb9fcfe19
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/asin/index.html
@@ -0,0 +1,125 @@
+---
+title: Math.asin()
+slug: Web/JavaScript/Reference/Global_Objects/Math/asin
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/asin
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.asin()</code></strong> возвращает арксинус числа (в радианах), то есть</p>
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>∊</mo><mo stretchy="false">[</mo><mrow><mo>-</mo><mn>1</mn></mrow><mo>;</mo><mn>1</mn><mo stretchy="false">]</mo><mo>,</mo><mspace width="thickmathspace"></mspace><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.asin</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">arcsin</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mo>∊</mo><mrow><mo>[</mo><mrow><mo>-</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo>;</mo><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><mo>]</mo></mrow><mspace width="thinmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">sin</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x \in [{-1};1],\;\mathtt{\operatorname{Math.asin}(x)} = \arcsin(x) = \text{ уникальный } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{такой, что} \; \sin(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.asin(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.asin()</code> возвращает числовое значение между <math><semantics><mrow><mo>-</mo><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><annotation encoding="TeX">-\frac{\pi}{2}</annotation></semantics></math> и <math><semantics><mfrac><mi>π</mi><mn>2</mn></mfrac><annotation encoding="TeX">\frac{\pi}{2}</annotation></semantics></math> радианами для значения <code>x</code>, лежащего в диапазоне от -1 до 1. Метод вернёт {{jsxref("NaN")}}, если значение <code>x</code> выйдет за этот диапазон.</p>
+<p>Поскольку метод <code>asin()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.asin()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.asin" name="Example:_Using_Math.asin">Пример: использование метода <code>Math.asin()</code></h3>
+<pre class="brush: js">Math.asin(-2); // NaN
+Math.asin(-1); // -1.5707963267948966 (-pi/2)
+Math.asin(0); // 0
+Math.asin(0.5); // 0.5235987755982989
+Math.asin(1); // 1.570796326794897 (pi/2)
+Math.asin(2); // NaN
+</pre>
+<p>Для значений, меньших -1 или больших 1, метод <code>Math.asin()</code> возвращает {{jsxref("NaN")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.3', 'Math.asin')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.asin', 'Math.asin')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/asinh/index.html b/files/ru/web/javascript/reference/global_objects/math/asinh/index.html
new file mode 100644
index 0000000000..f1d1937d36
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/asinh/index.html
@@ -0,0 +1,135 @@
+---
+title: Math.asinh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/asinh
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/asinh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.asinh()</code></strong> возвращает гиперболический арксинус числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.asinh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="thinmathspace">arsinh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">sinh</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\mathtt{\operatorname{Math.asinh}(x)} = \operatorname{arsinh}(x) = \text{ уникальный } \; y \; \text{такой, что} \; \sinh(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.asinh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>asinh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.asinh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.asinh" name="Example:_Using_Math.asinh">Пример: использование метода <code>Math.asinh()</code></h3>
+
+<pre class="brush: js">Math.asinh(1); // 0.881373587019543
+Math.asinh(0); // 0
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Мы имеем <math><semantics><mrow><mo lspace="0em" rspace="thinmathspace">arsinh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mrow><mo>(</mo><mrow><mi>x</mi><mo>+</mo><msqrt><mrow><msup><mi>x</mi><mn>2</mn></msup><mo>+</mo><mn>1</mn></mrow></msqrt></mrow><mo>)</mo></mrow></mrow><annotation encoding="TeX">\operatorname {arsinh} (x) = \ln \left(x + \sqrt{x^{2} + 1} \right)</annotation></semantics></math>, так что этот метод может эмулироваться следующим образом:</p>
+
+<pre class="brush: js">Math.asinh = Math.asinh || function(x) {
+ if (x === -Infinity) {
+ return x;
+ } else {
+ return Math.log(x + Math.sqrt(x * x + 1));
+ }
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.asinh', 'Math.asinh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.acosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.atanh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.cosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.sinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.tanh()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/atan/index.html b/files/ru/web/javascript/reference/global_objects/math/atan/index.html
new file mode 100644
index 0000000000..78ece8df0f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/atan/index.html
@@ -0,0 +1,120 @@
+---
+title: Math.atan()
+slug: Web/JavaScript/Reference/Global_Objects/Math/atan
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.atan()</code></strong> возвращает арктангенс числа (в радианах), то есть</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.atan</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">arctan</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mo>∊</mo><mrow><mo>[</mo><mrow><mo>-</mo><mfrac><mi>π</mi><mn>2</mn></mfrac><mo>;</mo><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><mo>]</mo></mrow><mspace width="thinmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">tan</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\mathtt{\operatorname{Math.atan}(x)} = \arctan(x) = \text{ уникальный } \; y \in \left[-\frac{\pi}{2}; \frac{\pi}{2}\right] \, \text{такой, что} \; \tan(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.atan(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.atan()</code> возвращает числовое значение между <math><semantics><mrow><mo>-</mo><mfrac><mi>π</mi><mn>2</mn></mfrac></mrow><annotation encoding="TeX">-\frac{\pi}{2}</annotation></semantics></math> и <math><semantics><mfrac><mi>π</mi><mn>2</mn></mfrac><annotation encoding="TeX">\frac{\pi}{2}</annotation></semantics></math> радианами.</p>
+<p>Поскольку метод <code>atan()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.atan()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.atan" name="Example:_Using_Math.atan">Пример: использование метода <code>Math.atan()</code></h3>
+<pre class="brush: js">Math.atan(1); // 0.7853981633974483
+Math.atan(0); // 0
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.4', 'Math.atan')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.atan', 'Math.atan')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/atan2/index.html b/files/ru/web/javascript/reference/global_objects/math/atan2/index.html
new file mode 100644
index 0000000000..08cdb00c7e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/atan2/index.html
@@ -0,0 +1,134 @@
+---
+title: Math.atan2()
+slug: Web/JavaScript/Reference/Global_Objects/Math/atan2
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/atan2
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.atan2()</code></strong> возвращает арктангенс от частного своих аргументов.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.atan2(<var>y</var>, <var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>y</code></dt>
+ <dd>Первое число.</dd>
+ <dt><code>x</code></dt>
+ <dd>Второе число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.atan2()</code> возвращает числовое значение от -π до π, представляющее угол тета точки <code>(x, y)</code>. Это выраженный в радианах угол, отсчитываемый против часовой стрелки от положительного направления оси X до точки <code>(x, y)</code>. Обратите внимание, что первым в метод передаётся координата y, а только вторым — координата x.</p>
+<p>В метод <code>Math.atan2()</code> аргументы <code>x</code> и <code>y</code> передаются по отдельности, в то время, как в метод <code>Math.atan()</code> передаётся отношение этих двух аргументов.</p>
+<p>Поскольку метод <code>atan2()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.atan2()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.atan2" name="Example:_Using_Math.atan2">Пример: использование метода <code>Math.atan2()</code></h3>
+<pre class="brush: js">Math.atan2(90, 15); // 1.4056476493802699
+Math.atan2(15, 90); // 0.16514867741462683
+
+Math.atan2(±0, -0); // ±PI.
+Math.atan2(±0, +0); // ±0.
+Math.atan2(±0, -x); // ±PI для x &gt; 0.
+Math.atan2(±0, x); // ±0 дляx &gt; 0.
+Math.atan2(-y, ±0); // -PI/2 для y &gt; 0.
+Math.atan2(y, ±0); // PI/2 для y &gt; 0.
+Math.atan2(±y, -Infinity); // ±PI для конечного y &gt; 0.
+Math.atan2(±y, +Infinity); // ±0 для конечного y &gt; 0.
+Math.atan2(±Infinity, x); // ±PI/2 для конечного x.
+Math.atan2(±Infinity, -Infinity); // ±3*PI/4.
+Math.atan2(±Infinity, +Infinity); // ±PI/4.
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.5', 'Math.atan2')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.atan2', 'Math.atan2')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/atanh/index.html b/files/ru/web/javascript/reference/global_objects/math/atanh/index.html
new file mode 100644
index 0000000000..55aabd470e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/atanh/index.html
@@ -0,0 +1,137 @@
+---
+title: Math.atanh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/atanh
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/atanh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.atanh()</code></strong> возвращает гиперболический арктангенс числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>∊</mo><mrow><mo>(</mo><mrow><mo>-</mo><mn>1</mn><mo>,</mo><mn>1</mn></mrow><mo>)</mo></mrow><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.atanh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="thinmathspace">arctanh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext> уникальный </mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><mo lspace="0em" rspace="0em">tanh</mo><mo stretchy="false">(</mo><mi>y</mi><mo stretchy="false">)</mo><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x \in \left( -1, 1 \right), \mathtt{\operatorname{Math.atanh}(x)} = \operatorname{arctanh}(x) = \text{ уникальный } \; y \; \text{такой, что} \; \tanh(y) = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.atanh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>atanh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.atanh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.atanh" name="Example:_Using_Math.atanh">Пример: использование метода <code>Math.atanh()</code></h3>
+
+<pre class="brush: js">Math.atanh(-2); // NaN
+Math.atanh(-1); // -Infinity
+Math.atanh(0); // 0
+Math.atanh(0.5); // 0.5493061443340548
+Math.atanh(1); // Infinity
+Math.atanh(2); // NaN
+</pre>
+
+<p>Для значений, меньших -1 или больших 1, метод <code>Math.atanh()</code> возвращает {{jsxref("NaN")}}.</p>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Для <math><semantics><mrow><mrow><mo>|</mo><mi>x</mi><mo>|</mo></mrow><mo>&lt;</mo><mn>1</mn></mrow><annotation encoding="TeX">\left|x\right| &lt; 1</annotation></semantics></math>, мы имеем <math><semantics><mrow><mo lspace="0em" rspace="thinmathspace">artanh</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mo lspace="0em" rspace="0em">ln</mo><mrow><mo>(</mo><mfrac><mrow><mn>1</mn><mo>+</mo><mi>x</mi></mrow><mrow><mn>1</mn><mo>-</mo><mi>x</mi></mrow></mfrac><mo>)</mo></mrow></mrow><annotation encoding="TeX">\operatorname {artanh} (x) = \frac{1}{2}\ln \left( \frac{1 + x}{1 - x} \right)</annotation></semantics></math>, так что этот метод может эмулироваться следующим образом:</p>
+
+<pre class="brush: js">Math.atanh = Math.atanh || function(x) {
+ return Math.log((1+x)/(1-x)) / 2;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.atanh', 'Math.atanh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.acosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.asinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.cosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.sinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.tanh()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/cbrt/index.html b/files/ru/web/javascript/reference/global_objects/math/cbrt/index.html
new file mode 100644
index 0000000000..6eccb4f7f2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/cbrt/index.html
@@ -0,0 +1,134 @@
+---
+title: Math.cbrt()
+slug: Web/JavaScript/Reference/Global_Objects/Math/cbrt
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/cbrt
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.cbrt()</code></strong> возвращает кубический корень числа, то есть</p>
+<math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mrow><mi>M</mi><mi>a</mi><mi>t</mi><mi>h</mi><mo>.</mo><mi>c</mi><mi>b</mi><mi>r</mi><mi>t</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mroot><mi>x</mi><mn>3</mn></mroot><mo>=</mo><mtext>уникальный</mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><msup><mi>y</mi><mn>3</mn></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\mathtt{Math.cbrt(x)} = \sqrt[3]{x} = \text{уникальный} \; y \; \text{такой, что} \; y^3 = x</annotation></semantics></math><span style='font-family: x-locale-heading-primary,zillaslab,Palatino,"Palatino Linotype",x-locale-heading-secondary,serif; font-size: 2.33333rem; letter-spacing: -0.00278rem;'>Синтаксис</span>
+
+<pre class="syntaxbox"><code>Math.cbrt(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>cbrt()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.cbrt()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Math.cbrt" name="Example:_Using_Math.cbrt">Пример: использование метода <code>Math.cbrt()</code></h3>
+
+<pre class="brush: js">Math.cbrt(-1); // -1
+Math.cbrt(0); // 0
+Math.cbrt(1); // 1
+
+Math.cbrt(2); // 1.2599210498948734
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Для всех <math><semantics><mrow><mi>x</mi><mo>≥</mo><mn>0</mn></mrow><annotation encoding="TeX">x \geq 0</annotation></semantics></math>, мы имеем <math><semantics><mrow><mroot><mi>x</mi><mn>3</mn></mroot><mo>=</mo><msup><mi>x</mi><mrow><mn>1</mn><mo>/</mo><mn>3</mn></mrow></msup></mrow><annotation encoding="TeX">\sqrt[3]{x} = x^{1/3}</annotation></semantics></math>, так что этот метод может эмулироваться следующим образом:</p>
+
+<pre class="brush: js">Math.cbrt = Math.cbrt || function(x) {
+  if (x === 0 || x === +1 / 0 || x === -1 / 0 || x !== x) {
+    return x;
+  }
+  var a = Math.abs(x);
+  var y = Math.exp(Math.log(a) / 3);
+  // from http://en.wikipedia.org/wiki/Cube_root#Numerical_methods
+ return (x / a) * (y + (a / (y * y) - y) / 3);
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.cbrt', 'Math.cbrt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.pow()")}}</li>
+ <li>{{jsxref("Math.sqrt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/ceil/index.html b/files/ru/web/javascript/reference/global_objects/math/ceil/index.html
new file mode 100644
index 0000000000..afda2d9bd8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/ceil/index.html
@@ -0,0 +1,207 @@
+---
+title: Math.ceil()
+slug: Web/JavaScript/Reference/Global_Objects/Math/ceil
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/ceil
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.ceil()</code></strong> - округление вверх. Округляет аргумент до ближайшего большего целого.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.ceil(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>ceil()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.ceil()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.ceil" name="Example:_Using_Math.ceil">Пример: использование метода <code>Math.ceil()</code></h3>
+
+<p>Следующий пример показывает использование метода <code>Math.ceil()</code>.</p>
+
+<pre><code>Math.ceil(.95); // 1
+Math.ceil(4); // 4
+Math.ceil(7.004); // 8
+Math.ceil(-0.95); // -0
+Math.ceil(-4); // -4
+Math.ceil(-7.004); // -7</code></pre>
+
+<h3 id="Decimal_adjustment">Decimal adjustment</h3>
+
+<h3 id="Example:_Decimal_adjustment" name="Example:_Decimal_adjustment">Пример: корректировка округления десятичных дробей</h3>
+
+<pre class="brush: js">// Замыкание
+(function() {
+ /**
+ * Корректировка округления десятичных дробей.
+ *
+ * @param {String} type Тип корректировки.
+ * @param {Number} value Число.
+ * @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
+ * @returns {Number} Скорректированное значение.
+ */
+ function decimalAdjust(type, value, exp) {
+ // Если степень не определена, либо равна нулю...
+ if (typeof exp === 'undefined' || +exp === 0) {
+ return Math[type](value);
+ }
+ value = +value;
+ exp = +exp;
+ // Если значение не является числом, либо степень не является целым числом...
+ if (isNaN(value) || !(typeof exp === 'number' &amp;&amp; exp % 1 === 0)) {
+ return NaN;
+ }
+ // Сдвиг разрядов
+ value = value.toString().split('e');
+ value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+ // Обратный сдвиг
+ value = value.toString().split('e');
+ return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+ }
+
+ // Десятичное округление к ближайшему
+ if (!Math.round10) {
+ Math.round10 = function(value, exp) {
+ return decimalAdjust('round', value, exp);
+ };
+ }
+ // Десятичное округление вниз
+ if (!Math.floor10) {
+ Math.floor10 = function(value, exp) {
+ return decimalAdjust('floor', value, exp);
+ };
+ }
+ // Десятичное округление вверх
+ if (!Math.ceil10) {
+ Math.ceil10 = function(value, exp) {
+ return decimalAdjust('ceil', value, exp);
+ };
+ }
+})();
+
+// Округление к ближайшему
+Math.round10(55.55, -1); // 55.6
+Math.round10(55.549, -1); // 55.5
+Math.round10(55, 1); // 60
+Math.round10(54.9, 1); // 50
+Math.round10(-55.55, -1); // -55.5
+Math.round10(-55.551, -1); // -55.6
+Math.round10(-55, 1); // -50
+Math.round10(-55.1, 1); // -60
+// Округление вниз
+Math.floor10(55.59, -1); // 55.5
+Math.floor10(59, 1); // 50
+Math.floor10(-55.51, -1); // -55.6
+Math.floor10(-51, 1); // -60
+// Округление вверх
+Math.ceil10(55.51, -1); // 55.6
+Math.ceil10(51, 1); // 60
+Math.ceil10(-55.59, -1); // -55.5
+Math.ceil10(-59, 1); // -50
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.6', 'Math.ceil')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.ceil', 'Math.ceil')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.floor()")}}</li>
+ <li>{{jsxref("Math.round()")}}</li>
+ <li>{{jsxref("Math.sign()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.trunc()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/clz32/index.html b/files/ru/web/javascript/reference/global_objects/math/clz32/index.html
new file mode 100644
index 0000000000..127ae43179
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/clz32/index.html
@@ -0,0 +1,140 @@
+---
+title: Math.clz32()
+slug: Web/JavaScript/Reference/Global_Objects/Math/clz32
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/clz32
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.clz32()</code></strong> возвращает количество ведущих нулевых битов в 32-битном двоичном представлении числа.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.clz32(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Название <code>clz32</code> является сокращением для более длинного <code>CountLeadingZeroes32</code> (<code>ПосчтитатьВедущиеНули32</code>).</p>
+
+<p>Если значение <code>x</code> не является числом, оно будет сначала преобразовано в число, а потом в 32-битное беззнаковое целое число.</p>
+
+<p>Если преобразованое 32-битное беззнаковое целое число равно <code>0</code>, метод вернёт <code>32</code>, поскольку все биты в числе равны <code>0</code>.</p>
+
+<p>Этот метод особено полезен для систем, которые компилируются в JS, например, для <a href="/ru/docs/Emscripten">Emscripten</a>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.clz32" name="Example:_Using_Math.clz32">Пример: использование метода <code>Math.clz32()</code></h3>
+
+<pre class="brush: js">Math.clz32(1); // 31
+Math.clz32(1000); // 22
+Math.clz32(); // 32
+
+[NaN, Infinity, -Infinity, 0, -0, null, undefined, 'foo', {}, []].filter(
+function(n) {
+ return Math.clz32(n) !== 32
+}); // []
+
+Math.clz32(true); // 31
+Math.clz32(3.5); // 30
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">Math.clz32 = Math.clz32 || function(value) {
+ value = Number(value) &gt;&gt;&gt; 0;
+ return value !== 0 ? 31 - Math.floor(Math.log(value + 0.5) / Math.log(2)) : 32;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.clz32', 'Math.clz32')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("35")}}</td>
+ <td>{{CompatGeckoDesktop("31")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("31")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Math", "Math")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/cos/index.html b/files/ru/web/javascript/reference/global_objects/math/cos/index.html
new file mode 100644
index 0000000000..1e3bf2088c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/cos/index.html
@@ -0,0 +1,122 @@
+---
+title: Math.cos()
+slug: Web/JavaScript/Reference/Global_Objects/Math/cos
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/cos
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.cos()</code></strong> возвращает косинус числа.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.cos(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число радиан.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.cos()</code> возвращает числовое значение от -1 до 1, которое представляет косинус угла.</p>
+<p>Поскольку метод <code>cos()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.cos()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.cos" name="Example:_Using_Math.cos">Пример: использование метода <code>Math.cos()</code></h3>
+<pre class="brush: js">Math.cos(0); // 1
+Math.cos(1); // 0.5403023058681398
+
+Math.cos(Math.PI); // -1
+Math.cos(2 * Math.PI); // 1
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.7', 'Math.cos')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.cos', 'Math.cos')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/cosh/index.html b/files/ru/web/javascript/reference/global_objects/math/cosh/index.html
new file mode 100644
index 0000000000..548d793b7e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/cosh/index.html
@@ -0,0 +1,140 @@
+---
+title: Math.cosh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/cosh
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/cosh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.cosh()</code></strong> возвращает гиперболический косинус числа, который может быть выражен через {{jsxref("Math.E", "число e", "", 1)}}:</p>
+
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mo lspace="0em" rspace="thinmathspace">Math.cosh(x)</mo></mstyle><mo>=</mo><mfrac><mrow><msup><mi>e</mi><mi>x</mi></msup><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>x</mi></mrow></msup></mrow><mn>2</mn></mfrac></mrow><annotation encoding="TeX">\mathtt{\operatorname{Math.cosh(x)}} = \frac{e^x + e^{-x}}{2}</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.cosh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>cosh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.cosh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.cosh" name="Example:_Using_Math.cosh">Пример: использование метода <code>Math.cosh()</code></h3>
+
+<pre class="brush: js">Math.cosh(0); // 1
+Math.cosh(1); // 1.5430806348152437
+Math.cosh(-1); // 1.5430806348152437
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться при помощи двух вызовов метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.cosh = Math.cosh || function(x) {
+ return (Math.exp(x) + Math.exp(-x)) / 2;
+}
+</pre>
+
+<p>либо при помощи только одного вызова метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.cosh = Math.cosh || function(x) {
+ var y = Math.exp(x);
+ return (y + 1 / y) / 2;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.cosh', 'Math.cosh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.acosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.asinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.atanh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.sinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.tanh()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/e/index.html b/files/ru/web/javascript/reference/global_objects/math/e/index.html
new file mode 100644
index 0000000000..bcceeb4bc5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/e/index.html
@@ -0,0 +1,113 @@
+---
+title: Math.E
+slug: Web/JavaScript/Reference/Global_Objects/Math/E
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/E
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.E</code></strong> представляет основание натурального логарифма, e, приблизительно равное 2,718.</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.E</mi></mstyle><mo>=</mo><mi>e</mi><mo>≈</mo><mn>2,718</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.E}} = e \approx 2,718</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>E</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.E</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.E" name="Example:_Using_Math.E">Пример: использование свойства <code>Math.E</code></h3>
+<p>Следующая функция возвращает e:</p>
+<pre class="brush: js">function getNapier() {
+ return Math.E;
+}
+
+getNapier(); // 2.718281828459045
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.1', 'Math.E')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.e', 'Math.E')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log1p()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/exp/index.html b/files/ru/web/javascript/reference/global_objects/math/exp/index.html
new file mode 100644
index 0000000000..1d516d229e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/exp/index.html
@@ -0,0 +1,120 @@
+---
+title: Math.exp()
+slug: Web/JavaScript/Reference/Global_Objects/Math/exp
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/exp
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.exp()</code></strong> возвращает значение выражения <code>e<sup>x</sup></code>, где <code>x</code> — аргумент метода, а <code>e</code> — {{jsxref("Math.E", "число Эйлера", "", 1)}}, основание натурального логарифма.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.exp(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку метод <code>exp()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.exp()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.exp" name="Example:_Using_Math.exp">Пример: использование метода <code>Math.exp()</code></h3>
+<pre class="brush: js">Math.exp(-1); // 0.36787944117144233
+Math.exp(0); // 1
+Math.exp(1); // 2.718281828459045
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.8', 'Math.exp')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.exp', 'Math.exp')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.E")}}</li>
+ <li>{{jsxref("Math.expm1()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log1p()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/expm1/index.html b/files/ru/web/javascript/reference/global_objects/math/expm1/index.html
new file mode 100644
index 0000000000..26b21553ba
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/expm1/index.html
@@ -0,0 +1,132 @@
+---
+title: Math.expm1()
+slug: Web/JavaScript/Reference/Global_Objects/Math/expm1
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/expm1
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.expm1()</code></strong> возвращает значение выражения <code>e<sup>x</sup> - 1</code>, где <code>x</code> — аргумент метода, а {{jsxref("Math.E", "e", "", 1)}} — основание натурального логарифма.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.expm1(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>expm1()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.expm1()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.expm1" name="Example:_Using_Math.expm1">Пример: использование метода <code>Math.expm1()</code></h3>
+
+<pre class="brush: js">Math.expm1(-1); // -0.6321205588285577
+Math.expm1(0); // 0
+Math.expm1(1); // 1.718281828459045
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться при помощи метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.expm1 = Math.expm1 || function(x) {
+ return Math.exp(x) - 1;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.expm1', 'Math.expm1')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.E")}}</li>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log1p()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/floor/index.html b/files/ru/web/javascript/reference/global_objects/math/floor/index.html
new file mode 100644
index 0000000000..c11fe6420e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/floor/index.html
@@ -0,0 +1,200 @@
+---
+title: Math.floor()
+slug: Web/JavaScript/Reference/Global_Objects/Math/floor
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/floor
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.floor()</code></strong> - округление вниз. Округляет аргумент до ближайшего меньшего целого.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.floor(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>floor()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.floor()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Math.floor" name="Example:_Using_Math.floor">Пример: использование метода <code>Math.floor()</code></h3>
+
+<pre class="brush: js">Math.floor( 45.95); // 45
+Math.floor(-45.95); // -46
+</pre>
+
+<h3 id="Example_Decimal_adjustment" name="Example:_Decimal_adjustment">Пример: корректировка округления десятичных дробей</h3>
+
+<pre class="brush: js">// Замыкание
+(function() {
+ /**
+ * Корректировка округления десятичных дробей.
+ *
+ * @param {String} type Тип корректировки.
+ * @param {Number} value Число.
+ * @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
+ * @returns {Number} Скорректированное значение.
+ */
+ function decimalAdjust(type, value, exp) {
+ // Если степень не определена, либо равна нулю...
+ if (typeof exp === 'undefined' || +exp === 0) {
+ return Math[type](value);
+ }
+ value = +value;
+ exp = +exp;
+ // Если значение не является числом, либо степень не является целым числом...
+ if (isNaN(value) || !(typeof exp === 'number' &amp;&amp; exp % 1 === 0)) {
+ return NaN;
+ }
+ // Сдвиг разрядов
+ value = value.toString().split('e');
+ value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+ // Обратный сдвиг
+ value = value.toString().split('e');
+ return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+ }
+
+ // Десятичное округление к ближайшему
+ if (!Math.round10) {
+ Math.round10 = function(value, exp) {
+ return decimalAdjust('round', value, exp);
+ };
+ }
+ // Десятичное округление вниз
+ if (!Math.floor10) {
+ Math.floor10 = function(value, exp) {
+ return decimalAdjust('floor', value, exp);
+ };
+ }
+ // Десятичное округление вверх
+ if (!Math.ceil10) {
+ Math.ceil10 = function(value, exp) {
+ return decimalAdjust('ceil', value, exp);
+ };
+ }
+})();
+
+// Округление к ближайшему
+Math.round10(55.55, -1); // 55.6
+Math.round10(55.549, -1); // 55.5
+Math.round10(55, 1); // 60
+Math.round10(54.9, 1); // 50
+Math.round10(-55.55, -1); // -55.5
+Math.round10(-55.551, -1); // -55.6
+Math.round10(-55, 1); // -50
+Math.round10(-55.1, 1); // -60
+// Округление вниз
+Math.floor10(55.59, -1); // 55.5
+Math.floor10(59, 1); // 50
+Math.floor10(-55.51, -1); // -55.6
+Math.floor10(-51, 1); // -60
+// Округление вверх
+Math.ceil10(55.51, -1); // 55.6
+Math.ceil10(51, 1); // 60
+Math.ceil10(-55.59, -1); // -55.5
+Math.ceil10(-59, 1); // -50
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.9', 'Math.floor')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.floor', 'Math.floor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.ceil()")}}</li>
+ <li>{{jsxref("Math.round()")}}</li>
+ <li>{{jsxref("Math.sign()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.trunc()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/fround/index.html b/files/ru/web/javascript/reference/global_objects/math/fround/index.html
new file mode 100644
index 0000000000..b6dd9e242d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/fround/index.html
@@ -0,0 +1,128 @@
+---
+title: Math.fround()
+slug: Web/JavaScript/Reference/Global_Objects/Math/fround
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/fround
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.fround()</code></strong> возвращает ближайшее число с плавающей запятой <a href="https://ru.wikipedia.org/wiki/Число_одинарной_точности">одинарной точности</a>, представляющее указанное число.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.fround(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>fround()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.fround()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.fround" name="Example:_Using_Math.fround">Пример: использование метода <code>Math.fround()</code></h3>
+
+<pre class="brush: js">Math.fround(0); // 0
+Math.fround(1); // 1
+Math.fround(1.337); // 1.3370000123977661
+Math.fround(1.5); // 1.5
+Math.fround(NaN); // NaN
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим образом, при условии, что среда выполнения поддерживает объект {{jsxref("Float32Array")}}:</p>
+
+<pre class="brush: js">Math.fround = Math.fround || function(x) {
+ return new Float32Array([x])[0];
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.fround', 'Math.fround')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("26")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.round()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/hypot/index.html b/files/ru/web/javascript/reference/global_objects/math/hypot/index.html
new file mode 100644
index 0000000000..df3271d28c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/hypot/index.html
@@ -0,0 +1,149 @@
+---
+title: Math.hypot()
+slug: Web/JavaScript/Reference/Global_Objects/Math/hypot
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/hypot
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.hypot()</code></strong> возвращает квадратный корень суммы квадратов своих аргументов, то есть</p>
+
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.hypot</mo><mo stretchy="false">(</mo><msub><mi>v</mi><mn>1</mn></msub><mo>,</mo><msub><mi>v</mi><mn>2</mn></msub><mo>,</mo><mo>…</mo><mo>,</mo><msub><mi>v</mi><mi>n</mi></msub><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><msqrt><mrow><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msubsup><mi>v</mi><mi>i</mi><mn>2</mn></msubsup></mrow></msqrt><mo>=</mo><msqrt><mrow><msubsup><mi>v</mi><mn>1</mn><mn>2</mn></msubsup><mo>+</mo><msubsup><mi>v</mi><mn>2</mn><mn>2</mn></msubsup><mo>+</mo><mo>…</mo><mo>+</mo><msubsup><mi>v</mi><mi>n</mi><mn>2</mn></msubsup></mrow></msqrt></mrow><annotation encoding="TeX">\mathtt{\operatorname{Math.hypot}(v_1, v_2, \dots, v_n)} = \sqrt{\sum_{i=1}^n v_i^2} = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2}</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.hypot([<var>value1</var>[, <var>value2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value1, value2, ...</code></dt>
+ <dd>Числа.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>hypot()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.hypot()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<p>При вызове без аргументов результатом вызова будет значение +0.</p>
+
+<p>Если хотя бы один из аргументов не может быть преобразован в число, результатом будет {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<p>При вызове с одним аргументом, метод <code>Math.hypot()</code> то же самое значение, что и метод <code>Math.abs()</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.hypot" name="Example:_Using_Math.hypot">Пример: использование метода <code>Math.hypot()</code></h3>
+
+<pre class="brush: js">Math.hypot(3, 4); // 5
+Math.hypot(3, 4, 5); // 7.0710678118654755
+Math.hypot(); // 0
+Math.hypot(NaN); // NaN
+Math.hypot(3, 4, 'foo'); // NaN, +'foo' =&gt; NaN
+Math.hypot(3, 4, '5'); // 7.0710678118654755, +'5' =&gt; 5
+Math.hypot(-3); // 3, то же самое, что и Math.abs(-3)
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим образом:</p>
+
+<pre class="brush: js">Math.hypot = Math.hypot || function() {
+ var y = 0;
+ var length = arguments.length;
+
+ for (var i = 0; i &lt; length; i++) {
+ if (arguments[i] === Infinity || arguments[i] === -Infinity) {
+ return Infinity;
+ }
+ y += arguments[i] * arguments[i];
+ }
+ return Math.sqrt(y);
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.hypot', 'Math.hypot')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("27")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("27")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+ <li>{{jsxref("Math.sqrt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/imul/index.html b/files/ru/web/javascript/reference/global_objects/math/imul/index.html
new file mode 100644
index 0000000000..8c1480a99a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/imul/index.html
@@ -0,0 +1,130 @@
+---
+title: Math.imul()
+slug: Web/JavaScript/Reference/Global_Objects/Math/imul
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.imul()</code></strong> возвращает результат перемножения в стиле C двух 32-битных чисел.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.imul(<var>a</var>, <var>b</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>a</code></dt>
+ <dd>Первое число.</dd>
+ <dt><code>b</code></dt>
+ <dd>Второе число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Math.imul()</code> позволяет выполнять быстрое перемножение двух 32-битных чисел с семантикой C. Эта возможность полезна для таких проектов, как <a href="http://en.wikipedia.org/wiki/Emscripten">Emscripten</a>. Поскольку метод <code>imul()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.imul()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.imul" name="Example:_Using_Math.imul">Пример: использование метода <code>Math.imul()</code></h3>
+
+<pre class="brush: js">Math.imul(2, 4); // 8
+Math.imul(-1, 8); // -8
+Math.imul(-2, -2); // 4
+Math.imul(0xffffffff, 5); // -5
+Math.imul(0xfffffffe, 5); // -10
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим способом:</p>
+
+<pre class="brush: js">Math.imul = Math.imul || function(a, b) {
+ var ah = (a &gt;&gt;&gt; 16) &amp; 0xffff;
+ var al = a &amp; 0xffff;
+ var bh = (b &gt;&gt;&gt; 16) &amp; 0xffff;
+ var bl = b &amp; 0xffff;
+ // сдвиг на 0 бит закрепляет знак в старшей части числа
+ // окончательный |0 преобразует беззнаковое значение обратно в знаковое значение
+ return ((al * bl) + (((ah * bl + al * bh) &lt;&lt; 16) &gt;&gt;&gt; 0)|0);
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("28")}}</td>
+ <td>{{CompatGeckoDesktop("20")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera("16")}}</td>
+ <td>{{CompatSafari("7")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("20")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>iOS 7</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/math/index.html b/files/ru/web/javascript/reference/global_objects/math/index.html
new file mode 100644
index 0000000000..337e2229b2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/index.html
@@ -0,0 +1,198 @@
+---
+title: Math
+slug: Web/JavaScript/Reference/Global_Objects/Math
+tags:
+ - JavaScript
+ - Math
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<p>Объект <strong><code>Math</code></strong> является встроенным объектом, хранящим в своих свойствах и методах различные математические константы и функции. Объект <code>Math</code> не является функциональным объектом.</p>
+
+<p><code>Math</code> не работает с числами типа {{jsxref("BigInt")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>В отличие от других глобальных объектов, объект <code>Math</code> не является конструктором. Все свойства и методы объекта <code>Math</code> являются статическими. Вы ссылаетесь на константу π через <code>Math.PI</code> и вызываете функцию синуса через <code>Math.sin(x)</code>, где <code>x</code> является аргументом метода. Константы в JavaScript определены с полной точностью действительных чисел.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Math.E")}}</dt>
+ <dd>Число Эйлера или Непера, основание натуральных логарифмов, приблизительно равное 2,718.</dd>
+ <dt>{{jsxref("Math.LN2")}}</dt>
+ <dd>Натуральный логарифм из 2, приблизительно равен 0,693.</dd>
+ <dt>{{jsxref("Math.LN10")}}</dt>
+ <dd>Натуральный логарифм из 10, приблизительно равен 2,303.</dd>
+ <dt>{{jsxref("Math.LOG2E")}}</dt>
+ <dd>Двоичный логарифм из E, приблизительно равен 1,443.</dd>
+ <dt>{{jsxref("Math.LOG10E")}}</dt>
+ <dd>Десятичный логарифм из E, приблизительно равен 0,434.</dd>
+ <dt>{{jsxref("Math.PI")}}</dt>
+ <dd>Отношение длины окружности круга к его диаметру, приблизительно равно 3,14159.</dd>
+ <dt>{{jsxref("Math.SQRT1_2")}}</dt>
+ <dd>Квадратный корень из 1/2; или, что тоже самое, 1, делённая на квадратный корень из 2, приблизительно равен 0,707.</dd>
+ <dt>{{jsxref("Math.SQRT2")}}</dt>
+ <dd>Квадратный корень из 2, приблизительно равен 1,414.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<div class="note">
+<p>Обратите внимание, что тригонометрические функции (<code>sin()</code>, <code>cos()</code>, <code>tan()</code>, <code>asin()</code>, <code>acos()</code>, <code>atan()</code> и <code>atan2()</code>) принимают в параметрах или возвращают углы в радианах. Для преобразования радианов в градусы, поделите их на величину <code>(Math.PI / 180)</code>; для преобразования в обратном направлении, умножьте градусы на эту же величину.</p>
+</div>
+
+<div class="note">
+<p>Обратите внимание, что точность большинства математических функций зависит от реализации. Это означает, что различные браузеры могут дать разные результаты, более того, даже один и тот же движок JavaScript на различных операционных системах или архитектурах может выдать разные результаты.</p>
+</div>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/Math/abs", "Math.abs(x)")}}</dt>
+ <dd>Возвращает абсолютное значение числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/acos", "Math.acos(x)")}}</dt>
+ <dd>Возвращает арккосинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/acosh", "Math.acosh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический арккосинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/asin", "Math.asin(x)")}}</dt>
+ <dd>Возвращает арксинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/asinh", "Math.asinh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический арксинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atan", "Math.atan(x)")}}</dt>
+ <dd>Возвращает арктангенс числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atanh", "Math.atanh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический арктангенс числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atan2", "Math.atan2(y, x)")}}</dt>
+ <dd>Возвращает арктангенс от частного своих аргументов.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cbrt", "Math.cbrt(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает кубический корень числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/ceil", "Math.ceil(x)")}}</dt>
+ <dd>Возвращает значение числа, округлённое к большему целому.</dd>
+ <dt>{{jsxref("Global_Objects/Math/clz32", "Math.clz32(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает количество ведущих нулей 32-битного целого числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cos", "Math.cos(x)")}}</dt>
+ <dd>Возвращает косинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cosh", "Math.cosh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический косинус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/exp", "Math.exp(x)")}}</dt>
+ <dd>Возвращает E<sup>x</sup>, где <var>x</var> — аргумент, а E — число Эйлера (2,718…), основание натурального логарифма.</dd>
+ <dt>{{jsxref("Global_Objects/Math/expm1", "Math.expm1(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает <code>exp(x)</code>, из которого вычли единицу.</dd>
+ <dt>{{jsxref("Global_Objects/Math/floor", "Math.floor(x)")}}</dt>
+ <dd>Возвращает значение числа, округлённое к меньшему целому.</dd>
+ <dt>{{jsxref("Global_Objects/Math/fround", "Math.fround(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает ближайшее число с плавающей запятой <a href="https://ru.wikipedia.org/wiki/Число_одинарной_точности">одинарной точности</a>, представляюще это число.</dd>
+ <dt>{{jsxref("Global_Objects/Math/hypot", "Math.hypot([x[, y[, …]]])")}} {{experimental_inline}}</dt>
+ <dd>Возвращает квадратный корень из суммы квадратов своих аргументов.</dd>
+ <dt>{{jsxref("Global_Objects/Math/imul", "Math.imul(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает результат умножения 32-битных целых чисел.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log", "Math.log(x)")}}</dt>
+ <dd>Возвращает натуральный логарифм числа (log<sub>e</sub>, также известен как ln).</dd>
+ <dt>{{jsxref("Global_Objects/Math/log1p", "Math.log1p(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает натуральный логарифм числа <code>1 + x</code> (log<sub>e</sub>, также известен как ln).</dd>
+ <dt>{{jsxref("Global_Objects/Math/log10", "Math.log10(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает десятичный логарифм числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log2", "Math.log2(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает двоичный логарифм числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/max", "Math.max([x[, y[, …]]])")}}</dt>
+ <dd>Возвращает наибольшее число из своих аргументов.</dd>
+ <dt>{{jsxref("Global_Objects/Math/min", "Math.min([x[, y[, …]]])")}}</dt>
+ <dd>Возвращает наименьшее число из своих аргументов.</dd>
+ <dt>{{jsxref("Global_Objects/Math/pow", "Math.pow(x, y)")}}</dt>
+ <dd>Возвращает основание в степени экспоненты, то есть, значение выражения <code>основание<sup>экспонента</sup></code>.</dd>
+ <dt>{{jsxref("Global_Objects/Math/random", "Math.random()")}}</dt>
+ <dd>Возвращает псевдослучайное число в диапазоне от 0 до 1.</dd>
+ <dt>{{jsxref("Global_Objects/Math/round", "Math.round(x)")}}</dt>
+ <dd>Возвращает значение числа, округлённое до ближайшего целого.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sign", "Math.sign(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает знак числа, указывающий, является ли число положительным, отрицательным или нулём.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sin", "Math.sin(x)")}}</dt>
+ <dd>Возвращает синус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sinh", "Math.sinh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический синус числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sqrt", "Math.sqrt(x)")}}</dt>
+ <dd>Возвращает положительный квадратный корень числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/tan", "Math.tan(x)")}}</dt>
+ <dd>Возвращает тангенс числа.</dd>
+ <dt>{{jsxref("Global_Objects/Math/tanh", "Math.tanh(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает гиперболический тангенс числа.</dd>
+ <dt><code>Math.toSource()</code> {{non-standard_inline}}</dt>
+ <dd>Возвращает строку <code>"Math"</code>.</dd>
+ <dt>{{jsxref("Global_Objects/Math/trunc", "Math.trunc(x)")}} {{experimental_inline}}</dt>
+ <dd>Возвращает целую часть числа, убирая дробные цифры.</dd>
+</dl>
+
+<h2 id="Расширение_объекта_Math">Расширение объекта <code>Math</code></h2>
+
+<p>Как и большинство встроенных объектов в Javascript, объект <code>Math</code> может быть расширен пользовательскими способами и методами. Чтобы расширить объект <code>Math</code>, не используют <code>prototype</code>. Вместо этого, расширяют <code>Math</code> напрямую: </p>
+
+<pre><code>Math.propName = propValue;
+Math.methodName = methodRef;</code></pre>
+
+<p>Например, следующий код добавляет метод к объекту Math для вычисления наибольшего общего делителя списка аргументов.</p>
+
+<pre><code>/* Вариативная функция -- Возвращает наибольший общий делитель списка аргументов */
+Math.gcd = function() {
+ if (arguments.length == 2) {
+ if (arguments[1] == 0)
+ return arguments[0];
+ else
+ return Math.gcd(arguments[1], arguments[0] % arguments[1]);
+ } else if (arguments.length &gt; 2) {
+ var result = Math.gcd(arguments[0], arguments[1]);
+ for (var i = 2; i &lt; arguments.length; i++)
+ result = Math.gcd(result, arguments[i]);
+ return result;
+ }
+};</code></pre>
+
+<p>Попробуйте:</p>
+
+<pre><code>console.log(Math.gcd(20, 30, 15, 70, 40)); // `5`</code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8', 'Math')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math-object', 'Math')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Добавлены новые методы: {{jsxref("Math.log10()", "log10()")}}, {{jsxref("Math.log2()", "log2()")}}, {{jsxref("Math.log1p()", "log1p()")}}, {{jsxref("Math.expm1()", "expm1()")}}, {{jsxref("Math.cosh()", "cosh()")}}, {{jsxref("Math.sinh()", "sinh()")}}, {{jsxref("Math.tanh()", "tanh()")}}, {{jsxref("Math.acosh()", "acosh()")}}, {{jsxref("Math.asinh()", "asinh()")}}, {{jsxref("Math.atanh()", "atanh()")}}, {{jsxref("Math.hypot()", "hypot()")}}, {{jsxref("Math.trunc()", "trunc()")}}, {{jsxref("Math.sign()", "sign()")}}, {{jsxref("Math.imul()", "imul()")}}, {{jsxref("Math.fround()", "fround()")}}, {{jsxref("Math.cbrt()", "cbrt()")}} и {{jsxref("Math.clz32()", "clz32()")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math-object', 'Math')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Math")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Number", "Number")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/ln10/index.html b/files/ru/web/javascript/reference/global_objects/math/ln10/index.html
new file mode 100644
index 0000000000..e087dde110
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/ln10/index.html
@@ -0,0 +1,113 @@
+---
+title: Math.LN10
+slug: Web/JavaScript/Reference/Global_Objects/Math/LN10
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN10
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.LN10</code></strong> представляет натуральный логарифм из 10, приблизительно равный 2,302:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.LN10</mi></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mo stretchy="false">(</mo><mn>10</mn><mo stretchy="false">)</mo><mo>≈</mo><mn>2,302</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.LN10}} = \ln(10) \approx 2,302</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>LN10</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.LN10</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.LN10" name="Example:_Using_Math.LN10">Пример: использование свойства <code>Math.LN10</code></h3>
+<p>Следующая функция возвращает натуральный логарифм из 10:</p>
+<pre class="brush: js">function getNatLog10() {
+ return Math.LN10;
+}
+
+getNatLog10(); // 2.302585092994046
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.2', 'Math.LN10')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.ln10', 'Math.LN10')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/ln2/index.html b/files/ru/web/javascript/reference/global_objects/math/ln2/index.html
new file mode 100644
index 0000000000..0c94ff8c5c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/ln2/index.html
@@ -0,0 +1,113 @@
+---
+title: Math.LN2
+slug: Web/JavaScript/Reference/Global_Objects/Math/LN2
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/LN2
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.LN2</code></strong> представляет натуральный логарифм из 2, приблизительно равный 0,693:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.LN2</mi></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mo stretchy="false">(</mo><mn>2</mn><mo stretchy="false">)</mo><mo>≈</mo><mn>0,693</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.LN2}} = \ln(2) \approx 0,693</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>LN2</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.LN2</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.LN2" name="Example:_Using_Math.LN2">Пример: использование свойства <code>Math.LN2</code></h3>
+<p>Следующая функция возвращает натуральный логарифм из 2:</p>
+<pre class="brush: js">function getNatLog2() {
+ return Math.LN2;
+}
+
+getNatLog2(); // 0.6931471805599453
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.3', 'Math.LN2')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.ln2', 'Math.LN2')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log/index.html b/files/ru/web/javascript/reference/global_objects/math/log/index.html
new file mode 100644
index 0000000000..a106b53028
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log/index.html
@@ -0,0 +1,129 @@
+---
+title: Math.log()
+slug: Web/JavaScript/Reference/Global_Objects/Math/log
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/log
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.log()</code></strong> возвращает натуральный (по основанию {{jsxref("Math.E", "e")}}) логарифм числа, то есть</p>
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>&gt;</mo><mn>0</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.log</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext>уникальный</mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><msup><mi>e</mi><mi>y</mi></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x &gt; 0, \mathtt{\operatorname{Math.log}(x)} = \ln(x) = \text{уникальный} \; y \; \text{такой, что} \; e^y = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.log(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если значение <code>x</code> меньше 0, возвращаемое значение всегда будет равным {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+<p>Поскольку метод <code>log()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.log()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.log" name="Example:_Using_Math.log">Пример: использование метода <code>Math.log()</code></h3>
+<pre class="brush: js">Math.log(-1); // NaN, выход за пределы диапазона
+Math.log(0); // -Infinity
+Math.log(1); // 0
+Math.log(10); // 2.302585092994046
+</pre>
+
+<h3 id="Example:_Using_Math.log_with_a_different_base" name="Example:_Using_Math.log_with_a_different_base">Пример: использование метода <code>Math.log()</code> с различными основаниями</h3>
+<p>Следующая функция возвращает логарифм из <code>y</code> по основанию <code>x</code> (то есть, <math><semantics><mrow><msub><mo>log</mo><mi>x</mi></msub><mi>y</mi></mrow><annotation encoding="TeX">\log_x y</annotation></semantics></math>):</p>
+<pre class="brush: js">function getBaseLog(x, y) {
+ return Math.log(y) / Math.log(x);
+}
+</pre>
+<p>Если вы выполните <code>getBaseLog(10, 1000)</code>, функция вернёт <code>2.9999999999999996</code> из-за особенностей округления чисел с плавающей запятой, что довольно близко к правильному ответу — 3.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.10', 'Math.log')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log', 'Math.log')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log1p()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log10/index.html b/files/ru/web/javascript/reference/global_objects/math/log10/index.html
new file mode 100644
index 0000000000..8ae3c545bf
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log10/index.html
@@ -0,0 +1,137 @@
+---
+title: Math.log10()
+slug: Web/JavaScript/Reference/Global_Objects/Math/log10
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/log10
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.log10()</code></strong> возвращает десятичный (по основанию 10) логарифм числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>&gt;</mo><mn>0</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.log10</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><msub><mo lspace="0em" rspace="0em">log</mo><mn>10</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext>уникальный</mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><msup><mn>10</mn><mi>y</mi></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x &gt; 0, \mathtt{\operatorname{Math.log10}(x)} = \log_10(x) = \text{уникальный} \; y \; \text{такой, что} \; 10^y = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.log10(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если значение <code>x</code> меньше 0, возвращаемое значение всегда будет равным {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<p>Поскольку метод <code>log10()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.log10()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.log10" name="Example:_Using_Math.log10">Пример: использование метода <code>Math.log10()</code></h3>
+
+<pre class="brush: js">Math.log10(2); // 0.3010299956639812
+Math.log10(1); // 0
+Math.log10(0); // -Infinity
+Math.log10(-2); // NaN
+Math.log10(100000); // 5
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим способом:</p>
+
+<pre class="brush: js">Math.log10 = Math.log10 || function(x) {
+ return Math.log(x) / Math.LN10;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log10', 'Math.log10')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log1p()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log10e/index.html b/files/ru/web/javascript/reference/global_objects/math/log10e/index.html
new file mode 100644
index 0000000000..9c81d78641
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log10e/index.html
@@ -0,0 +1,113 @@
+---
+title: Math.LOG10E
+slug: Web/JavaScript/Reference/Global_Objects/Math/LOG10E
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG10E
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.LOG10E</code></strong> представляет десятичный логарифм из e, приблизительно равный 0,434:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.LOG10E</mi></mstyle><mo>=</mo><msub><mo lspace="0em" rspace="0em">log</mo><mn>10</mn></msub><mo stretchy="false">(</mo><mi>e</mi><mo stretchy="false">)</mo><mo>≈</mo><mn>0,434</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.LOG10E}} = \log_10(e) \approx 0,434</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>LOG10E</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.LOG10E</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.LOG10E" name="Example:_Using_Math.LOG10E">Пример: использование свойства <code>Math.LOG10E</code></h3>
+<p>Следующая функция возвращает десятичный логарифм из e:</p>
+<pre class="brush: js">function getLog10e() {
+ return Math.LOG10E;
+}
+
+getLog10e(); // 0.4342944819032518
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.5', 'Math.LOG10E')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log10e', 'Math.LOG10E')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log1p/index.html b/files/ru/web/javascript/reference/global_objects/math/log1p/index.html
new file mode 100644
index 0000000000..54a33e9e66
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log1p/index.html
@@ -0,0 +1,136 @@
+---
+title: Math.log1p()
+slug: Web/JavaScript/Reference/Global_Objects/Math/log1p
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/log1p
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.log1p()</code></strong> возвращает натуральный (по основанию {{jsxref("Math.E", "e")}}) логарифм 1 + числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>&gt;</mo><mo>-</mo><mn>1</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.log1p</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><mo lspace="0em" rspace="0em">ln</mo><mo stretchy="false">(</mo><mn>1</mn><mo>+</mo><mi>x</mi><mo stretchy="false">)</mo></mrow><annotation encoding="TeX">\forall x &gt; -1, \mathtt{\operatorname{Math.log1p}(x)} = \ln(1 + x)</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.log1p(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если значение <code>x</code> меньше -1, возвращаемое значение всегда будет равным {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<p>Поскольку метод <code>log1p()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.log1p()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.log1p" name="Example:_Using_Math.log1p">Пример: использование метода <code>Math.log1p()</code></h3>
+
+<pre class="brush: js">Math.log1p(1); // 0.6931471805599453
+Math.log1p(0); // 0
+Math.log1p(-1); // -Infinity
+Math.log1p(-2); // NaN
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим способом:</p>
+
+<pre class="brush: js">Math.log1p = Math.log1p || function(x) {
+ return Math.log(1 + x);
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log1p', 'Math.log1p')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log2/index.html b/files/ru/web/javascript/reference/global_objects/math/log2/index.html
new file mode 100644
index 0000000000..e07c3726c9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log2/index.html
@@ -0,0 +1,93 @@
+---
+title: Math.log2()
+slug: Web/JavaScript/Reference/Global_Objects/Math/log2
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/log2
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.log2()</code></strong> возвращает двоичный (по основанию 2) логарифм числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>&gt;</mo><mn>0</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mo lspace="0em" rspace="thinmathspace">Math.log2</mo><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><msub><mo lspace="0em" rspace="0em">log</mo><mn>2</mn></msub><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><mtext>уникальный</mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><msup><mn>2</mn><mi>y</mi></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x &gt; 0, \mathtt{\operatorname{Math.log2}(x)} = \log_2(x) = \text{уникальный} \; y \; \text{такой, что} \; 2^y = x</annotation></semantics></math></p>
+
+<div>{{EmbedInteractiveExample("pages/js/math-log2.html")}}</div>
+
+
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.log2(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если значение <code>x</code> меньше 0, возвращаемое значение всегда будет равным {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<p>Поскольку метод <code>log2()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.log2()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Math.log2" name="Example:_Using_Math.log2">Пример: использование метода <code>Math.log2()</code></h3>
+
+<pre class="brush: js">Math.log2(3); // 1.584962500721156
+Math.log2(2); // 1
+Math.log2(1); // 0
+Math.log2(0); // -Infinity
+Math.log2(-2); // NaN
+Math.log2(1024); // 10
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться следующим способом:</p>
+
+<pre class="brush: js">Math.log2 = Math.log2 || function(x) {
+ return Math.log(x) / Math.LN2;
+};
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log2', 'Math.log2')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Math.log2")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log10()")}}</li>
+ <li>{{jsxref("Math.log1p()")}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/log2e/index.html b/files/ru/web/javascript/reference/global_objects/math/log2e/index.html
new file mode 100644
index 0000000000..485913672a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/log2e/index.html
@@ -0,0 +1,113 @@
+---
+title: Math.LOG2E
+slug: Web/JavaScript/Reference/Global_Objects/Math/LOG2E
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/LOG2E
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.LOG2E</code></strong> представляет двоичный логарифм из e, приблизительно равный 1,442:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.LOG2E</mi></mstyle><mo>=</mo><msub><mo lspace="0em" rspace="0em">log</mo><mn>2</mn></msub><mo stretchy="false">(</mo><mi>e</mi><mo stretchy="false">)</mo><mo>≈</mo><mn>1,442</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.LOG2E}} = \log_2(e) \approx 1,442</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>LOG2E</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.LOG2E</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.LOG2E" name="Example:_Using_Math.LOG2E">Пример: использование свойства <code>Math.LOG2E</code></h3>
+<p>Следующая функция возвращает двоичный логарифм из e:</p>
+<pre class="brush:js">function getLog2e() {
+ return Math.LOG2E;
+}
+
+getLog2e(); // 1.4426950408889634
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.4', 'Math.LOG2E')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.log2e', 'Math.LOG2E')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.log2()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/max/index.html b/files/ru/web/javascript/reference/global_objects/math/max/index.html
new file mode 100644
index 0000000000..62ec25de32
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/max/index.html
@@ -0,0 +1,137 @@
+---
+title: Math.max()
+slug: Web/JavaScript/Reference/Global_Objects/Math/max
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/max
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.max()</code></strong> возвращает наибольшее из нуля или более чисел.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.max([<var>value1</var>[, <var>value2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value1, value2, ...</code></dt>
+ <dd>Числа.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>max()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.max()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<p>При вызове без аргументов результатом вызова будет значение -{{jsxref("Global_Objects/Infinity", "Infinity")}}.</p>
+
+<p>Если хотя бы один из аргументов не может быть преобразован в число, результатом будет {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_Math.max" name="Example:_Using_Math.max">Пример: использование метода <code>Math.max()</code></h3>
+
+<pre class="brush: js">Math.max(10, 20); // 20
+Math.max(-10, -20); // -10
+Math.max(-10, 20); // 20
+</pre>
+
+<h4 id="Нахождение_максимального_элемента_в_массиве"><strong>Нахождение максимального элемента в массиве</strong></h4>
+
+<p>Следующая функция использует метод {{jsxref("Function.prototype.apply()")}} для нахождения максимального элемента в числовом массиве. Вызов <code>getMaxOfArray([1, 2, 3])</code> эквивалентен вызову <code>Math.max(1, 2, 3)</code>, однако вы можете использовать функцию <code>getMaxOfArray()</code> вместе с программно сконструированными массивами любого размера. Рекомендуется использовать только в случае обработки массивов с небольшим количеством элементов.</p>
+
+<pre class="brush: js">function getMaxOfArray(numArray) {
+ return Math.max.apply(null, numArray);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.11', 'Math.max')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.max', 'Math.max')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.min()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/min/index.html b/files/ru/web/javascript/reference/global_objects/math/min/index.html
new file mode 100644
index 0000000000..b365ac5269
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/min/index.html
@@ -0,0 +1,147 @@
+---
+title: Math.min()
+slug: Web/JavaScript/Reference/Global_Objects/Math/min
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/min
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.min()</code></strong> возвращает наименьшее из нуля или более чисел.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.min([<var>value1</var>[, <var>value2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value1, value2, ...</code></dt>
+ <dd>Числа.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>min()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.min()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<p>При вызове без аргументов результатом вызова будет значение {{jsxref("Global_Objects/Infinity", "Infinity")}}.</p>
+
+<p>Если хотя бы один из аргументов не может быть преобразован в число, результатом будет {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.min" name="Example:_Using_Math.min">Пример: использование метода <code>Math.min()</code></h3>
+
+<p>В этом примере ищется минимум из <code>x</code> и <code>y</code> и присваивается переменной <code>z</code>:</p>
+
+<pre class="brush: js">var x = 10, y = -20;
+var z = Math.min(x, y);
+</pre>
+
+<h3 id="Example:_Clipping_a_value_with_Math.min" name="Example:_Clipping_a_value_with_Math.min">Пример: обрезание значения при помощи метода <code>Math.min()</code></h3>
+
+<p>Метод <code>Math.min()</code> часто используется для обрезания значения таким образом, чтобы оно всегда не превосходило некоторую границу. Например, такое условие</p>
+
+<pre class="brush: js">var x = f(foo);
+
+if (x &gt; boundary) {
+ x = boundary;
+}
+</pre>
+
+<p>может быть переписано в виде</p>
+
+<pre class="brush: js">var x = Math.min(f(foo), boundary);
+</pre>
+
+<p>Подобным образом может использоваться и метод {{jsxref("Math.max()")}} для обрезания значения по нижней границе.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.12', 'Math.min')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.min', 'Math.min')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.max()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/pi/index.html b/files/ru/web/javascript/reference/global_objects/math/pi/index.html
new file mode 100644
index 0000000000..ad0f0850c6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/pi/index.html
@@ -0,0 +1,111 @@
+---
+title: Math.PI
+slug: Web/JavaScript/Reference/Global_Objects/Math/PI
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/PI
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.PI</code></strong> представляет отношение длины окружности круга к его диаметру, приблизительно равное 3,14159:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.PI</mi></mstyle><mo>=</mo><mi>π</mi><mo>≈</mo><mn>3,14159</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.PI}} = \pi \approx 3,14159</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>PI</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.PI</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_PI" name="Example:_Using_PI">Пример: использование свойства <code>Math.PI</code></h3>
+<p>Следующая функция использует значение <code>Math.PI</code> для вычисления длины окружности по известному радиусу круга.</p>
+<pre class="brush: js">function calculateCircumference(radius) {
+ return 2 * Math.PI * radius;
+}
+
+calculateCircumference(1); // 6.283185307179586
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.6', 'Math.PI')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.pi', 'Math.PI')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/Math", "Math")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/pow/index.html b/files/ru/web/javascript/reference/global_objects/math/pow/index.html
new file mode 100644
index 0000000000..190d40b202
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/pow/index.html
@@ -0,0 +1,126 @@
+---
+title: Math.pow()
+slug: Web/JavaScript/Reference/Global_Objects/Math/pow
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/pow
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.pow()</code></strong> возвращает <code>основание</code>, возведённое в степень <code>показатель</code>, то есть, значение выражения <code>основание<sup>показатель</sup></code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.pow(<var>base</var>, <var>exponent</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>base</code></dt>
+ <dd>Основание степени.</dd>
+ <dt><code>exponent</code></dt>
+ <dd>Показатель степени, в которую возводится основание <code>base</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>pow()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.pow()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.pow" name="Example:_Using_Math.pow">Пример: использование метода <code>Math.pow()</code></h3>
+
+<pre class="brush: js">Math.pow(7, 2); // 49</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.13', 'Math.pow')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.pow', 'Math.pow')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.cbrt()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.sqrt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/random/index.html b/files/ru/web/javascript/reference/global_objects/math/random/index.html
new file mode 100644
index 0000000000..7b25fda4d1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/random/index.html
@@ -0,0 +1,110 @@
+---
+title: Math.random()
+slug: Web/JavaScript/Reference/Global_Objects/Math/random
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/random
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>Math.random()</code></strong> возвращает псевдослучайное число с плавающей запятой из диапазона <code>[0, 1)</code>, то есть, от 0 (включительно) до 1 (но не включая 1), которое затем можно отмасштабировать до нужного диапазона. Реализация сама выбирает начальное зерно для алгоритма генерации случайных чисел; оно не может быть выбрано или сброшено пользователем.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/math-random.html")}}</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> метод <code>Math.random()</code> <em>не предоставляет</em> криптографически стойкие случайные числа. Не используйте его ни для чего, связанного с безопасностью. Вместо него используйте Web Crypto API (API криптографии в вебе) и более точный метод {{domxref("RandomSource.getRandomValues()", "window.crypto.getRandomValues()")}}.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.random()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Возвращаемое значение</h3>
+
+<p>Псевдослучайное число с плавающей запятой от <code>0</code> (включительно) до 1 (не считая).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Обратите внимание, что поскольку числа в JavaScript являются числами с плавающей запятой стандарта IEEE 754 с поведением при округлении к ближайшему чётному, все эти диапазоны (исключая диапазон с простым вызовом <code>Math.random()</code>), не точны. Если заданы очень большие границы (2<sup>53</sup> или выше), возможен <em>крайне</em> редкий случай вычисления обычно исключённой верхней границы.</p>
+
+<h3 id="Получение_случайного_числа_от_0_(включительно)_до_1_(не_включая)">Получение случайного числа от 0 (включительно) до 1 (не включая)</h3>
+
+<pre class="brush: js">function getRandom() {
+ return Math.random();
+}</pre>
+
+<h3 id="Получение_случайного_числа_в_заданном_интервале">Получение случайного числа в заданном интервале</h3>
+
+<p>Этот пример возвращает случайное число в заданном интервале. Возвращаемое значение не менее (и может быть равно) <code>min</code> и не более (и не равно) <code>max</code>.</p>
+
+<pre class="brush: js">function getRandomArbitrary(min, max) {
+ return Math.random() * (max - min) + min;
+}</pre>
+
+<h3 id="Получение_случайного_целого_числа_в_заданном_интервале">Получение случайного целого числа в заданном интервале</h3>
+
+<p>Этот пример возвращает случайное <em>целое </em>число в заданном интервале. Возвращаемое значение не менее <code>min</code> (или следующее целое число, которое больше <code>min</code>, если <code>min</code> не целое) и не более (но не равно) <code>max</code>.</p>
+
+<pre class="brush: js">function getRandomInt(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min)) + min; //Максимум не включается, минимум включается
+}</pre>
+
+<div class="blockIndicator note">
+<p>Может показаться заманчивым использовать <code>Math.round()</code> для округления, но это может сделать распределение неравномерным, что может оказаться неприемлимым для ваших нужд.</p>
+</div>
+
+<h3 id="Получение_случайного_целого_числа_в_заданном_интервале_включительно">Получение случайного целого числа в заданном интервале, включительно</h3>
+
+<p>Функция <code>getRandomInt()</code> выше включает минимальное значение, но не включает максимальное. Но что если вам нужно, чтобы влючалось и минимальное, и максимальное значение? Функция <code>getRandomIntInclusive()</code> решает этот вопрос.</p>
+
+<pre class="brush: js">function getRandomIntInclusive(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min + 1)) + min; //Максимум и минимум включаются
+}</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. JavaScript 1.0 (только UNIX) / JavaScript 1.1 (все платформы).</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.14', 'Math.random')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.random', 'Math.random')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math.random', 'Math.random')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Math.random")}}</p>
+
+<div></div>
+
+<div id="compat-mobile"></div>
diff --git a/files/ru/web/javascript/reference/global_objects/math/round/index.html b/files/ru/web/javascript/reference/global_objects/math/round/index.html
new file mode 100644
index 0000000000..85400653b9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/round/index.html
@@ -0,0 +1,214 @@
+---
+title: Math.round()
+slug: Web/JavaScript/Reference/Global_Objects/Math/round
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/round
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.round()</code></strong> возвращает число, округлённое к ближайшему целому.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.round(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если дробная часть числа больше, либо равна 0,5, аргумент будет округлён до ближайшего большего целого. Если дробная часть числа меньше 0,5, аргумент будет округлён до ближайшего меньшего целого.</p>
+
+<p>Поскольку метод <code>round()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.round()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.round" name="Example:_Using_Math.round">Пример: использование метода <code>Math.round()</code></h3>
+
+<pre class="brush: js">// Вернёт значение 20
+x = Math.round(20.49);
+
+// Вернёт значение 21
+x = Math.round(20.5);
+
+// Вернёт значение -20
+x = Math.round(-20.5);
+
+// Вернёт значение -21
+x = Math.round(-20.51);
+
+// Вернёт значение 1 (!)
+// Обратите внимание на ошибку округления из-за неточности арифметики с плавающей запятой
+// Сравните этот результат с результатом Math.round(1.005, -2) из следующего примера
+x = Math.round(1.005*100)/100;
+</pre>
+
+<h3 id="Example:_Decimal_rounding" name="Example:_Decimal_rounding">Пример: корректировка округления десятичных дробей</h3>
+
+<pre class="brush: js">// Замыкание
+(function() {
+ /**
+ * Корректировка округления десятичных дробей.
+ *
+ * @param {String} type Тип корректировки.
+ * @param {Number} value Число.
+ * @param {Integer} exp Показатель степени (десятичный логарифм основания корректировки).
+ * @returns {Number} Скорректированное значение.
+ */
+ function decimalAdjust(type, value, exp) {
+ // Если степень не определена, либо равна нулю...
+ if (typeof exp === 'undefined' || +exp === 0) {
+ return Math[type](value);
+ }
+ value = +value;
+ exp = +exp;
+ // Если значение не является числом, либо степень не является целым числом...
+ if (isNaN(value) || !(typeof exp === 'number' &amp;&amp; exp % 1 === 0)) {
+ return NaN;
+ }
+ // Сдвиг разрядов
+ value = value.toString().split('e');
+ value = Math[type](+(value[0] + 'e' + (value[1] ? (+value[1] - exp) : -exp)));
+ // Обратный сдвиг
+ value = value.toString().split('e');
+ return +(value[0] + 'e' + (value[1] ? (+value[1] + exp) : exp));
+ }
+
+ // Десятичное округление к ближайшему
+ if (!Math.round10) {
+ Math.round10 = function(value, exp) {
+ return decimalAdjust('round', value, exp);
+ };
+ }
+ // Десятичное округление вниз
+ if (!Math.floor10) {
+ Math.floor10 = function(value, exp) {
+ return decimalAdjust('floor', value, exp);
+ };
+ }
+ // Десятичное округление вверх
+ if (!Math.ceil10) {
+ Math.ceil10 = function(value, exp) {
+ return decimalAdjust('ceil', value, exp);
+ };
+ }
+})();
+
+// Округление к ближайшему
+Math.round10(55.55, -1); // 55.6
+Math.round10(55.549, -1); // 55.5
+Math.round10(55, 1); // 60
+Math.round10(54.9, 1); // 50
+Math.round10(-55.55, -1); // -55.5
+Math.round10(-55.551, -1); // -55.6
+Math.round10(-55, 1); // -50
+Math.round10(-55.1, 1); // -60
+Math.round10(1.005, -2); // 1.01 -- сравните этот результат с результатом Math.round(1.005*100)/100 выше
+// Округление вниз
+Math.floor10(55.59, -1); // 55.5
+Math.floor10(59, 1); // 50
+Math.floor10(-55.51, -1); // -55.6
+Math.floor10(-51, 1); // -60
+// Округление вверх
+Math.ceil10(55.51, -1); // 55.6
+Math.ceil10(51, 1); // 60
+Math.ceil10(-55.59, -1); // -55.5
+Math.ceil10(-59, 1); // -50
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.15', 'Math.round')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.round', 'Math.round')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.ceil()")}}</li>
+ <li>{{jsxref("Math.floor()")}}</li>
+ <li>{{jsxref("Math.sign()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.trunc()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/sign/index.html b/files/ru/web/javascript/reference/global_objects/math/sign/index.html
new file mode 100644
index 0000000000..029bb3af31
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sign/index.html
@@ -0,0 +1,141 @@
+---
+title: Math.sign()
+slug: Web/JavaScript/Reference/Global_Objects/Math/sign
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/sign
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.sign()</code></strong> возвращает знак числа, указывающий на то, является ли число отрицательным, положительным или нулём.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.sign(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>sign()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.sign()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<p>Метод может вернуть одно из пяти значений: <code>1</code>, <code>-1</code>, <code>0</code>, <code>-0</code> и <code>NaN</code>, которые представляют, соответственно «положительное число», «отрицательное число», «положительный ноль», «отрицательный ноль» и {{jsxref("NaN")}}.</p>
+
+<p>Обратите внимание, что аргумент, переданный в этот метод, будет неявно преобразован в число.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.sign" name="Example:_Using_Math.sign">Пример: использование метода <code>Math.sign()</code></h3>
+
+<pre class="brush: js">Math.sign(3); // 1
+Math.sign(-3); // -1
+Math.sign('-3'); // -1
+Math.sign(0); // 0
+Math.sign(-0); // -0
+Math.sign(NaN); // NaN
+Math.sign('foo'); // NaN
+Math.sign(); // NaN
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">Math.sign = Math.sign || function(x) {
+ x = +x; // преобразуем в число
+ if (x === 0 || isNaN(x)) {
+ return x;
+ }
+ return x &gt; 0 ? 1 : -1;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sign', 'Math.sign')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.ceil()")}}</li>
+ <li>{{jsxref("Math.floor()")}}</li>
+ <li>{{jsxref("Math.round()")}}</li>
+ <li>{{jsxref("Math.trunc()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/sin/index.html b/files/ru/web/javascript/reference/global_objects/math/sin/index.html
new file mode 100644
index 0000000000..66516b8afa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sin/index.html
@@ -0,0 +1,121 @@
+---
+title: Math.sin()
+slug: Web/JavaScript/Reference/Global_Objects/Math/sin
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/sin
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.sin()</code></strong> возвращает синус числа.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.sin(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число радиан.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.sin()</code> возвращает числовое значение от -1 до 1, которое представляет синус переданного (в радианах) угла.</p>
+<p>Поскольку метод <code>sin()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.sin()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.sin" name="Example:_Using_Math.sin">Пример: использование метода <code>Math.sin()</code></h3>
+<pre class="brush: js">Math.sin(0); // 0
+Math.sin(1); // 0.8414709848078965
+
+Math.sin(Math.PI / 2); // 1
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.16', 'Math.sin')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sin', 'Math.sin')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.tan()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/sinh/index.html b/files/ru/web/javascript/reference/global_objects/math/sinh/index.html
new file mode 100644
index 0000000000..2ea2438584
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sinh/index.html
@@ -0,0 +1,140 @@
+---
+title: Math.sinh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/sinh
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/sinh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.sinh()</code></strong> возвращает гиперболический синус числа, который может быть выражен через {{jsxref("Math.E", "число e", "", 1)}}:</p>
+
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mo lspace="0em" rspace="thinmathspace">Math.sinh(x)</mo></mstyle><mo>=</mo><mfrac><mrow><msup><mi>e</mi><mi>x</mi></msup><mo>-</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>x</mi></mrow></msup></mrow><mn>2</mn></mfrac></mrow><annotation encoding="TeX">\mathtt{\operatorname{Math.sinh(x)}} = \frac{e^x - e^{-x}}{2}</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.sinh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>sinh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.sinh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.sinh" name="Example:_Using_Math.sinh">Пример: использование метода <code>Math.sinh()</code></h3>
+
+<pre class="brush: js">Math.sinh(0); // 0
+Math.sinh(1); // 1.1752011936438014
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться при помощи двух вызовов метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.sinh = Math.sinh || function(x) {
+ return (Math.exp(x) - Math.exp(-x)) / 2;
+}
+</pre>
+
+<p>либо при помощи только одного вызова метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.sinh = Math.sinh || function(x) {
+ var y = Math.exp(x);
+ return (y - 1 / y) / 2;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sinh', 'Math.sinh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.acosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.asinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.atanh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.cosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.tanh()")}} {{experimental_inline}}</li>
+</ul>
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
new file mode 100644
index 0000000000..28d145db02
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sqrt/index.html
@@ -0,0 +1,143 @@
+---
+title: Math.sqrt()
+slug: Web/JavaScript/Reference/Global_Objects/Math/sqrt
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/sqrt
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.sqrt()</code></strong> возвращает квадратный корень числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo>∀</mo><mi>x</mi><mo>≥</mo><mn>0</mn><mo>,</mo><mstyle mathvariant="monospace"><mrow><mi>M</mi><mi>a</mi><mi>t</mi><mi>h</mi><mo>.</mo><mi>s</mi><mi>q</mi><mi>r</mi><mi>t</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo></mrow></mstyle><mo>=</mo><msqrt><mi>x</mi></msqrt><mo>=</mo><mtext>уникальный</mtext><mspace width="thickmathspace"></mspace><mi>y</mi><mo>≥</mo><mn>0</mn><mspace width="thickmathspace"></mspace><mtext>такой, что</mtext><mspace width="thickmathspace"></mspace><msup><mi>y</mi><mn>2</mn></msup><mo>=</mo><mi>x</mi></mrow><annotation encoding="TeX">\forall x \geq 0, \mathtt{Math.sqrt(x)} = \sqrt{x} = \text{уникальный} \; y \geq 0 \; \text{такой, что} \; y^2 = x</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.sqrt(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Квадратный корень заданного числа. Если число отрицательное, то вернется {{jsxref("NaN")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если значение <code>x</code> отрицательно, метод <code>Math.sqrt()</code> вернёт {{jsxref("NaN")}}.</p>
+
+<p>Поскольку метод <code>sqrt()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.sqrt()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.sqrt" name="Example:_Using_Math.sqrt">Пример: использование метода <code>Math.sqrt()</code></h3>
+
+<pre class="brush: js">Math.sqrt(9); // 3
+Math.sqrt(2); // 1.414213562373095
+
+Math.sqrt(1); // 1
+Math.sqrt(0); // 0
+Math.sqrt(-1); // NaN
+Math.sqrt(-0); // -0</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.17', 'Math.sqrt')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sqrt', 'Math.sqrt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math.sqrt', 'Math.sqrt')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.cbrt()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.exp()")}}</li>
+ <li>{{jsxref("Math.log()")}}</li>
+ <li>{{jsxref("Math.pow()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/sqrt1_2/index.html b/files/ru/web/javascript/reference/global_objects/math/sqrt1_2/index.html
new file mode 100644
index 0000000000..25cc439d06
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sqrt1_2/index.html
@@ -0,0 +1,112 @@
+---
+title: Math.SQRT1_2
+slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT1_2
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.SQRT1_2</code></strong> представляет квадратный корень из 1/2, приблизительно равный 0,707:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.SQRT1_2</mi></mstyle><mo>=</mo><msqrt><mfrac><mn>1</mn><mn>2</mn></mfrac></msqrt><mo>=</mo><mfrac><mn>1</mn><msqrt><mn>2</mn></msqrt></mfrac><mo>≈</mo><mn>0,707</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.SQRT1_2}} = \sqrt{\frac{1}{2}} = \frac{1}{\sqrt{2}} \approx 0,707</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>SQRT1_2</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.SQRT1_2</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.SQRT1_2" name="Example:_Using_Math.SQRT1_2">Пример: использование свойства <code>Math.SQRT1_2</code></h3>
+<p>Следующая функция возвращает единицу, делённую на квадратный корень из двух:</p>
+<pre class="brush: js">function getRoot1_2() {
+ return Math.SQRT1_2;
+}
+
+getRoot1_2(); // 0.7071067811865476
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.7', 'Math.SQRT1_2')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sqrt1_2', 'Math.SQRT1_2')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.pow()")}}</li>
+ <li>{{jsxref("Math.sqrt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/sqrt2/index.html b/files/ru/web/javascript/reference/global_objects/math/sqrt2/index.html
new file mode 100644
index 0000000000..5adb33da4c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/sqrt2/index.html
@@ -0,0 +1,112 @@
+---
+title: Math.SQRT2
+slug: Web/JavaScript/Reference/Global_Objects/Math/SQRT2
+tags:
+ - JavaScript
+ - Math
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/SQRT2
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Math.SQRT2</code></strong> представляет квадратный корень из 2, приблизительно равный 1,414:</p>
+<p><math display="block"><semantics><mrow><mstyle mathvariant="monospace"><mi>Math.SQRT2</mi></mstyle><mo>=</mo><msqrt><mn>2</mn></msqrt><mo>≈</mo><mn>1,414</mn></mrow><annotation encoding="TeX">\mathtt{\mi{Math.SQRT2}} = \sqrt{2} \approx 1,414</annotation></semantics></math></p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Поскольку свойство <code>SQRT2</code> является статическим свойством объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.SQRT2</code>, а не пытаться создавать экземпляр объекта <code>Math</code> и получать свойство от него (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.SQRT2" name="Example:_Using_Math.SQRT2">Пример: использование свойства <code>Math.SQRT2</code></h3>
+<p>Следующая функция возвращает квадратный корень из двух:</p>
+<pre class="brush: js">function getRoot2() {
+ return Math.SQRT2;
+}
+
+getRoot2(); // 1.4142135623730951
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.1.8', 'Math.SQRT2')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.sqrt2', 'Math.SQRT2')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.pow()")}}</li>
+ <li>{{jsxref("Math.sqrt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/tan/index.html b/files/ru/web/javascript/reference/global_objects/math/tan/index.html
new file mode 100644
index 0000000000..eb596547e8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/tan/index.html
@@ -0,0 +1,124 @@
+---
+title: Math.tan()
+slug: Web/JavaScript/Reference/Global_Objects/Math/tan
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/tan
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Math.tan()</code></strong> возвращает тангенс числа.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Math.tan(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число, представляющее угол в радианах.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>Math.tan()</code> возвращает числовое значение, представляющее тангенс угла.</p>
+<p>Поскольку метод <code>tan()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.tan()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.tan" name="Example:_Using_Math.tan">Пример: использование метода <code>Math.tan()</code></h3>
+<pre class="brush: js">Math.tan(1); // 1.5574077246549023
+</pre>
+<p>Поскольку метод <code>Math.tan()</code> принимает радианы, а чаще проще работать с градусами, следующая функция принимает значение в градусах, преобразует их в радианы и возвращает тангенс.</p>
+<pre class="brush: js">function getTanDeg(deg) {
+ var rad = deg * Math.PI/180;
+ return Math.tan(rad);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.18', 'Math.tan')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.tan', 'Math.tan')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Math.acos()")}}</li>
+ <li>{{jsxref("Math.asin()")}}</li>
+ <li>{{jsxref("Math.atan()")}}</li>
+ <li>{{jsxref("Math.atan2()")}}</li>
+ <li>{{jsxref("Math.cos()")}}</li>
+ <li>{{jsxref("Math.sin()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/tanh/index.html b/files/ru/web/javascript/reference/global_objects/math/tanh/index.html
new file mode 100644
index 0000000000..51a6a05524
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/tanh/index.html
@@ -0,0 +1,153 @@
+---
+title: Math.tanh()
+slug: Web/JavaScript/Reference/Global_Objects/Math/tanh
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/tanh
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.tanh()</code></strong> возвращает гиперболический тангенс числа, то есть</p>
+
+<p><math display="block"><semantics><mrow><mo lspace="0em" rspace="0em">tanh</mo><mi>x</mi><mo>=</mo><mfrac><mrow><mo lspace="0em" rspace="0em">sinh</mo><mi>x</mi></mrow><mrow><mo lspace="0em" rspace="0em">cosh</mo><mi>x</mi></mrow></mfrac><mo>=</mo><mfrac><mrow><msup><mi>e</mi><mi>x</mi></msup><mo>-</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>x</mi></mrow></msup></mrow><mrow><msup><mi>e</mi><mi>x</mi></msup><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>x</mi></mrow></msup></mrow></mfrac><mo>=</mo><mfrac><mrow><msup><mi>e</mi><mrow><mn>2</mn><mi>x</mi></mrow></msup><mo>-</mo><mn>1</mn></mrow><mrow><msup><mi>e</mi><mrow><mn>2</mn><mi>x</mi></mrow></msup><mo>+</mo><mn>1</mn></mrow></mfrac></mrow><annotation encoding="TeX">\tanh x = \frac{\sinh x}{\cosh x} = \frac {e^x - e^{-x}} {e^x + e^{-x}} = \frac{e^{2x} - 1}{e^{2x}+1}</annotation></semantics></math></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.tanh(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>tanh()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.tanh()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.tanh" name="Example:_Using_Math.tanh">Пример: использование метода <code>Math.tanh()</code></h3>
+
+<pre class="brush: js">Math.tanh(0); // 0
+Math.tanh(Infinity); // 1
+Math.tanh(1); // 0.7615941559557649
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод может эмулироваться при помощи двух вызовов метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.tanh = Math.tanh || function(x) {
+ if (x === Infinity) {
+ return 1;
+ } else if (x === -Infinity) {
+ return -1;
+ } else {
+ return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x));
+ }
+}
+</pre>
+
+<p>либо при помощи только одного вызова метода {{jsxref("Math.exp()")}}:</p>
+
+<pre class="brush: js">Math.tanh = Math.tanh || function(x) {
+ if (x === Infinity) {
+ return 1;
+ } else if (x === -Infinity) {
+ return -1;
+ } else {
+ var y = Math.exp(2 * x);
+ return (y - 1) / (y + 1);
+ }
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.tanh', 'Math.tanh')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("38")}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("25")}}</td>
+ <td>{{CompatSafari("7.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>iOS 8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.acosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.asinh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.atanh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.cosh()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Math.sinh()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/trunc/index.html b/files/ru/web/javascript/reference/global_objects/math/trunc/index.html
new file mode 100644
index 0000000000..6e7b44147b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/trunc/index.html
@@ -0,0 +1,137 @@
+---
+title: Math.trunc()
+slug: Web/JavaScript/Reference/Global_Objects/Math/trunc
+tags:
+ - ECMAScript6
+ - Experimental
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+ - Функция
+ - целая часть
+translation_of: Web/JavaScript/Reference/Global_Objects/Math/trunc
+---
+<div>
+<div>{{JSRef}}</div>
+
+<p>Функция <strong><code>Math.trunc()</code></strong> возвращает целую часть числа путём удаления всех дробных знаков.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/math-trunc.html")}}</div>
+
+
+</div>
+
+<p>
+ </p><h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<p></p>
+
+<pre class="syntaxbox"><code>Math.trunc(<var>x</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Число.</dd>
+</dl>
+
+<h3 id="Parameters" name="Parameters">Возвращаемое значение</h3>
+
+<dl>
+ <dt><code>x</code></dt>
+ <dd>Целая часть данного числа.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>В отличие от других трёх методов объекта <code>Math</code> — {{jsxref("Math.floor()")}}, {{jsxref("Math.ceil()")}} и {{jsxref("Math.round()")}} — метод <code>Math.trunc()</code> работает очень просто. Отбрасывается запятая и все цифры после неё, не обращая внимания на знак аргумента.</p>
+
+<p>Аргумент, переданный в этот метод, будет неявно преобразован в число.</p>
+
+<p>Поскольку <code>trunc()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.trunc()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> ( <code>Math</code> не является конструктором).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.trunc" name="Example:_Using_Math.trunc">Использование <code>Math.trunc()</code></h3>
+
+<pre class="brush: js">Math.trunc(13.37); // 13
+Math.trunc(42.84); // 42
+Math.trunc(0.123); // 0
+Math.trunc(-0.123); // -0
+Math.trunc('-1.123'); // -1
+Math.trunc(NaN); // NaN
+Math.trunc('foo'); // NaN
+Math.trunc(); // NaN
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">if (!Math.trunc) {
+ Math.trunc = function(v) {
+ v = +v;
+ if (!isFinite(v)) return v;
+
+ return (v - v % 1) || (v &lt; 0 ? -0 : v === 0 ? v : 0);
+
+ // returns:
+ // 0 -&gt; 0
+ // -0 -&gt; -0
+ // 0.2 -&gt; 0
+ // -0.2 -&gt; -0
+ // 0.7 -&gt; 0
+ // -0.7 -&gt; -0
+ // Infinity -&gt; Infinity
+ // -Infinity -&gt; -Infinity
+ // NaN -&gt; NaN
+ // null -&gt; 0
+ };
+}
+</pre>
+
+<p>Либо:</p>
+
+<pre class="brush: js">if (!Math.trunc) {
+ Math.trunc = function(v) {
+ v = +v;
+ return (v - v % 1)   ||   (!isFinite(v) || v === 0 ? v : v &lt; 0 ? -0 : 0);
+ };
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-math.trunc', 'Math.trunc')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первое определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math.trunc', 'Math.trunc')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Math.trunc")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.abs()")}}</li>
+ <li>{{jsxref("Math.ceil()")}}</li>
+ <li>{{jsxref("Math.floor()")}}</li>
+ <li>{{jsxref("Math.round()")}}</li>
+ <li>{{jsxref("Math.sign()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/math/метод_math.max()_/index.html b/files/ru/web/javascript/reference/global_objects/math/метод_math.max()_/index.html
new file mode 100644
index 0000000000..ab66d8acb0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/math/метод_math.max()_/index.html
@@ -0,0 +1,136 @@
+---
+title: Метод Math.max()
+slug: Web/JavaScript/Reference/Global_Objects/Math/Метод_Math.max()_
+tags:
+ - JavaScript
+ - Math
+ - Method
+ - Reference
+---
+<div>{{JSRef("Global_Objects", "Math")}}</div>
+
+<div> </div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Math.max()</code></strong> возвращает наибольшее из нуля или более чисел.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Math.max([<var>value1</var>[, <var>value2</var>[, ...]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value1, value2, ...</code></dt>
+ <dd>Числа.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>max()</code> является статическим методом объекта <code>Math</code>, вы всегда должны использовать его как <code>Math.max()</code>, а не пытаться вызывать метод на созданном экземпляре объекта <code>Math</code> (поскольку объект <code>Math</code> не является конструктором).</p>
+
+<p>При вызове без аргументов результатом вызова будет значение -{{jsxref("Global_Objects/Infinity", "Infinity")}}.</p>
+
+<p>Если хотя бы один из аргументов не может быть преобразован в число, результатом будет {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Math.max" name="Example:_Using_Math.max">Пример: использование метода <code>Math.max()</code></h3>
+
+<pre class="brush: js">Math.max(10, 20); // 20
+Math.max(-10, -20); // -10
+Math.max(-10, 20); // 20
+</pre>
+
+<p>Следующая функция использует метод {{jsxref("Function.prototype.apply()")}} для нахождения максимального элемента в числовом массиве. Вызов <code>getMaxOfArray([1, 2, 3])</code> эквивалентен вызову <code>Math.max(1, 2, 3)</code>, однако вы можете использовать функцию <code>getMaxOfArray()</code> вместе с программно сконструированными массивами любого размера.</p>
+
+<pre class="brush: js">function getMaxOfArray(numArray) {
+ return Math.max.apply(null, numArray);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8.2.11', 'Math.max')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.max', 'Math.max')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Math.min()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/nan/index.html b/files/ru/web/javascript/reference/global_objects/nan/index.html
new file mode 100644
index 0000000000..7c91aebb62
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/nan/index.html
@@ -0,0 +1,103 @@
+---
+title: NaN
+slug: Web/JavaScript/Reference/Global_Objects/NaN
+tags:
+ - JavaScript
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/NaN
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Глобальное свойство <code><strong>NaN</strong></code> является значением, представляющим не-число (Not-A-Number).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<div></div>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-nan.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>NaN</code> является свойством <em>глобального объекта</em>.</p>
+
+<p>Начальным значением <code>NaN</code> является Not-A-Number (не-число) — то же самое значение, что и у {{jsxref("Number.NaN")}}. В современных браузерах <code>NaN</code> является ненастраиваемым и незаписываемым свойством. Даже когда это не так, избегайте его переопределения.</p>
+
+<p>В программах <code>NaN</code> используется довольно редко. Это возвращаемое значение в ситуациях, когда математические ({{jsxref("Math")}}) функции не срабатывают должным образом (например, при вызове <code>Math.sqrt(-1)</code>) или когда функция, пытающаяся считать число из строки, терпит неудачу по причине того, что в строке не число (<code>parseInt('blabla')</code>).</p>
+
+<h3 id="Testing_against_NaN" name="Testing_against_NaN">Проверка на равенство <code>NaN</code></h3>
+
+<p><code>NaN</code> является неравным (посредством сравнения через <code>==</code>, <code>!=</code>, <code>===</code>, and <code>!==</code>) любому другому значению, включая другое значение NaN. Используйте {{jsxref("Number.isNaN()")}} или {{jsxref("Global_Objects/isNaN", "isNaN()")}}, чтобы наиболее понятным образом определить является ли значение значением NaN. Или выполните само-сравнение: NaN, и только NaN, в результате такого сравнения будет неравным самому себе.</p>
+
+<pre><code>NaN === NaN; // false
+Number.NaN === NaN; // false
+isNaN(NaN); // true
+isNaN(Number.NaN); // true
+
+function valueIsNaN(v) { return v !== v; }
+valueIsNaN(1); // false
+valueIsNaN(NaN); // true
+valueIsNaN(Number.NaN); // true</code></pre>
+
+<p>Тем не менее, обратите внимание на разницу между функцией <code>isNaN()</code> и методом <code>Number.isNaN()</code>: первая вернет <code>true</code>, если значение в настоящий момент является <code>NaN</code>, или если оно станет <code>NaN</code> после того, как преобразуется в число, в то время как последний вернет <code>true</code>, только если текущим значением является <code>NaN</code>:</p>
+
+<pre><code>isNaN('hello world'); // true
+Number.isNaN('hello world'); // false</code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-value-properties-of-the-global-object-nan', 'NaN')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.1.1', 'NaN')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.3</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.NaN")}}</p>
+
+<div id="compat-desktop"></div>
+
+<div id="compat-mobile"></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.NaN")}}</li>
+ <li>{{jsxref("Number.isNaN()")}}</li>
+ <li>{{jsxref("isNaN", "isNaN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/null/index.html b/files/ru/web/javascript/reference/global_objects/null/index.html
new file mode 100644
index 0000000000..085018dc12
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/null/index.html
@@ -0,0 +1,106 @@
+---
+title: 'null'
+slug: Web/JavaScript/Reference/Global_Objects/null
+tags:
+ - JavaScript
+ - Literal
+ - Primitive
+translation_of: Web/JavaScript/Reference/Global_Objects/null
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<div></div>
+
+<p>Значение <code>null</code> представляет отсутствие какого-либо объектного значения. В JavaScript, <code>null</code> является {{Glossary("Primitive", "примитивом")}}, и в контексте логических операций, рассматривается как {{Glossary("Falsy", "ложное (falsy)")}}.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-null.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>null</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Значение <code>null</code> записывается литералом <code>null</code>. Оно является самостоятельным, а не свойством глобального объекта (как {{jsxref("Global_Objects/undefined", "undefined")}}). В API, <code>null</code> часто присутствует в местах где ожидается объект, но подходящего объекта нет.</p>
+
+<pre class="brush: js">// переменная foo не существует - она не была определена и никогда не инициализировалась:
+&gt; foo
+'ReferenceError: foo is not defined'
+
+// переменная foo существует, но она не имеет ни типа, ни значения:
+&gt; var foo = null; foo
+'null'
+</pre>
+
+
+
+<h3 id="Difference_between_null_and_undefined" name="Difference_between_null_and_undefined">Отличия между <code>null</code> и <code>undefined</code></h3>
+
+<p><code>null</code> является определенным значением отсутствия объекта, тогда как {{jsxref("Global_Objects/undefined", "undefined")}} обозначает неопределенность. Например: </p>
+
+<pre class="brush: js">var element;
+// значение переменной element до ее инициализации не определенно: undefined
+
+element = document.getElementById('not-exists');
+// здесь при попытке получения несуществующего элемента, метод getElementById возвращает null
+// переменная element теперь инициализирована значением null, ее значение определено
+</pre>
+
+<p>При проверке на <code>null</code> или {{jsxref("Global_Objects/undefined", "undefined")}}, помните о <a href="/ru/docs/Web/JavaScript/Reference/Operators/Операторы_сравнения#Использование_операторов_равенства">различии между операторами равенства (==) и идентичности (===)</a>: с первым, выполняется преобразование типов. </p>
+
+<pre class="brush: js">typeof null // object (не "null" из соображений обратной совместимости)
+typeof undefined // undefined
+null === undefined // false
+null == undefined // true
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-4.3.11', 'значение null')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-null-value', 'значение null')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-null-value', 'null value')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<div>{{Compat("javascript.builtins.null")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/undefined", "undefined")}}</li>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/epsilon/index.html b/files/ru/web/javascript/reference/global_objects/number/epsilon/index.html
new file mode 100644
index 0000000000..0b229290de
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/epsilon/index.html
@@ -0,0 +1,122 @@
+---
+title: Number.EPSILON
+slug: Web/JavaScript/Reference/Global_Objects/Number/EPSILON
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Number
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/EPSILON
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <strong><code>Number.EPSILON</code></strong> представляет собой разницу между единицей и наименьшим значением, большим единицы, которое может быть представлено типом {{jsxref("Number")}}.</p>
+
+<p>Вам не нужно создавать объект типа {{jsxref("Number")}} для доступа к этому статическому свойству (используйте <code>Number.EPSILON</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Свойство <code>EPSILON</code> имеет значение, приблизительно равное <code>2.2204460492503130808472633361816E-16</code> или <code>2<sup>-52</sup></code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Testing_equality" name="Example:_Testing_equality">Проверка на равенство</h3>
+
+<pre><code>x = 0.2;
+y = 0.3;
+z = 0.1;
+equal = (Math.abs(x - y + z) &lt; Number.EPSILON);</code></pre>
+
+
+
+<h2 id="Examples" name="Examples">Полифилл</h2>
+
+<pre class="brush: js">if (Number.EPSILON === undefined) {
+ Number.EPSILON = Math.pow(2, -52);
+}
+</pre>
+
+
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.epsilon', 'Number.EPSILON')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-number.epsilon', 'Number.EPSILON')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown }}</td>
+ <td>{{CompatGeckoDesktop("25.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatVersionUnknown }}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Number")}}, которому принадлежит это свойство.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/index.html b/files/ru/web/javascript/reference/global_objects/number/index.html
new file mode 100644
index 0000000000..b8ea32f7d5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/index.html
@@ -0,0 +1,181 @@
+---
+title: Number
+slug: Web/JavaScript/Reference/Global_Objects/Number
+tags:
+ - JavaScript
+ - Number
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Number
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<p>Объект <strong><code>Number</code></strong> является объектом-обёрткой, позволяющей вам работать с числовыми значениями. Объект <code>Number</code> создаётся через конструктор <code>Number()</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre>new Number(<em>value</em>);
+var <em>a</em> = new Number('123'); // a === 123 is false
+var <em>b</em> = Number('123'); // b === 123 is true
+<em>a</em> instanceof Number; // is true
+<em>b</em> instanceof Number; // is false</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Числовое значение, которое примет объект после создания.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Несколько замечаний относительно использования объекта <code>Number</code>:</p>
+
+<ul>
+ <li>Если аргумент не может быть преобразован в число, возвращается {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>В неконструкторном контексте (то есть, без оператора {{jsxref("Operators/new", "new")}}), объект <code>Number</code> может использоваться для проведения преобразования типов.</li>
+</ul>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Number.EPSILON")}} {{experimental_inline}}</dt>
+ <dd>Наименьший интервал между двумя представимыми числами.</dd>
+ <dt>{{jsxref("Number.MAX_SAFE_INTEGER")}} {{experimental_inline}}</dt>
+ <dd>Максимальное целое число, которое можно безопасно использовать в JavaScript (<code>2<sup>53</sup> - 1</code>).</dd>
+ <dt>{{jsxref("Number.MAX_VALUE")}}</dt>
+ <dd>Наибольшее представимое положительное число.</dd>
+ <dt>{{jsxref("Number.MIN_SAFE_INTEGER")}} {{experimental_inline}}</dt>
+ <dd>Минимальное целое число, которое можно безопасно использовать в (<code>-(2<sup>53</sup> - 1)</code>).</dd>
+ <dt>{{jsxref("Number.MIN_VALUE")}}</dt>
+ <dd>Наименьшее представимое положительное число — то есть, самое близкое к нулю положительное число (которое ещё не является нулём).</dd>
+ <dt>{{jsxref("Number.NaN")}}</dt>
+ <dd>Специальное значение для представления «не числа».</dd>
+ <dt>{{jsxref("Number.NEGATIVE_INFINITY")}}</dt>
+ <dd>Специальное значение для представления отрицательной бесконечности; возвращается при переполнении.</dd>
+ <dt>{{jsxref("Number.POSITIVE_INFINITY")}}</dt>
+ <dd>Специальное значение для представления положительной бесконечности; возвращается при переполнении.</dd>
+ <dt>{{jsxref("Number.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства к объекту <code>Number</code>.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "properties", "MAX_VALUE", "MIN_VALUE", "NaN", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "protoype")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Number.isNaN()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, является ли переданнное значение значением {{jsxref("Global_Objects/NaN", "NaN")}}.</dd>
+ <dt>{{jsxref("Number.isFinite()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, является ли переданное значение конечным числом.</dd>
+ <dt>{{jsxref("Number.isInteger()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, является ли тип переданного значения «числом», а само число — целым значением.</dd>
+ <dt>{{jsxref("Number.isSafeInteger()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, является ли переданное значение безопасным целым числом (числом в диапазоне от <code>-(2<sup>53</sup> - 1)</code> до <code>2<sup>53</sup> - 1</code>).</dd>
+ <dt><s class="obsoleteElement">{{jsxref("Number.toInteger()")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Использовался для вычисления переданного значения и преобразования его в целое число (или бесконечность {{jsxref("Global_Objects/Infinity", "Infinity")}}), но был удалён.</s></dd>
+ <dt>{{jsxref("Number.parseFloat()")}} {{experimental_inline}}</dt>
+ <dd>Представляет собой тот же самый метод, что и метод {{jsxref("Global_Objects/parseFloat", "parseFloat")}} глобального объекта.</dd>
+ <dt>{{jsxref("Number.parseInt()")}} {{experimental_inline}}</dt>
+ <dd>Представляет собой тот же самый метод, что и метод {{jsxref("Global_Objects/parseInt", "parseInt")}} глобального объекта.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "methods", "isNaN")}}</div>
+
+<h2 id="Number_instances" name="Number_instances">Экземпляры объекта <code>Number</code></h2>
+
+<p>Все экземпляры объекта <code>Number</code> наследуются от {{jsxref("Number.prototype")}}. Объект прототипа конструктора <code>Number</code> может быть изменён, чтобы затронуть все экземпляры объекта <code>Number</code>.</p>
+
+<h3 id="Methods_of_Number_instance" name="Methods_of_Number_instance">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Number/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_the_Number_object_to_assign_values_to_numeric_variables" name="Example:_Using_the_Number_object_to_assign_values_to_numeric_variables">Пример: использование объекта <code>Number</code> для присваивания значений числовым переменным</h3>
+
+<p>В следующем примере для присваивания значений числовым переменным используются свойства объекта <code>Number</code>:</p>
+
+<pre class="brush: js">var biggestNum = Number.MAX_VALUE;
+var smallestNum = Number.MIN_VALUE;
+var infiniteNum = Number.POSITIVE_INFINITY;
+var negInfiniteNum = Number.NEGATIVE_INFINITY;
+var notANum = Number.NaN;
+</pre>
+
+<h3 id="Example_Using_Number_to_convert_a_Date_object" name="Example:_Using_Number_to_convert_a_Date_object">Пример: целочисленный диапазон для объекта <code>Number</code></h3>
+
+<p>Следующий пример показывает, какие минимальное и максимальное целочисленные значения может представить объект <code>Number</code> (за подробностями обращайтесь к стандарту EcmaScript, главе <em>8.5 Тип Number</em>):</p>
+
+<pre class="brush: js">var biggestInt = 9007199254740992;
+var smallestInt = -9007199254740992;
+</pre>
+
+<p>При разборе данных, сериализованных в JSON, можно ожидать, что целые значения, выпадающие из этого диапазона будут повреждены, когда парсер JSON приведёт их к типу <code>Number</code>. Возможным обходным путём может быть использование объекта {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<h3 id="Example_Using_Number_to_convert_a_Date_object" name="Example:_Using_Number_to_convert_a_Date_object">Пример: использование <code>Number</code> для преобразования объекта <code>Date</code></h3>
+
+<p>В следующем примере объект {{jsxref("Global_Objects/Date", "Date")}} преобразуется в числовое значение с использование объекта <code>Number</code> в качестве функции:</p>
+
+<pre class="brush: js">var d = new Date('December 17, 1995 03:24:00');
+console.log(Number(d));
+</pre>
+
+<p>Пример выведет "819199440000".</p>
+
+<h3 id="Example_Convert_numeric_strings_to_numbers" name="Example:_Convert_numeric_strings_to_numbers">Пример: преобразование строк с числами в числа</h3>
+
+<pre class="brush: js">Number('123') // 123
+Number('') // 0
+Number('0x11') // 17
+Number('0b11') // 3
+Number('0o11') // 9
+Number('foo') // NaN
+Number('100a') // NaN
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7', 'Number')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number-objects', 'Number')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Добавлены новые методы и свойства: ({{jsxref("Number.EPSILON", "EPSILON")}}, {{jsxref("Number.isFinite", "isFinite")}}, {{jsxref("Number.isInteger", "isInteger")}}, {{jsxref("Number.isNaN", "isNaN")}}, {{jsxref("Number.parseFloat", "parseFloat")}} и {{jsxref("Number.parseInt", "parseInt")}})</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-number-objects', 'Number')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Number")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
+ <li>Глобальный объект {{jsxref("Global_Objects/Math", "Math")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/isfinite/index.html b/files/ru/web/javascript/reference/global_objects/number/isfinite/index.html
new file mode 100644
index 0000000000..26ed94a8c9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/isfinite/index.html
@@ -0,0 +1,130 @@
+---
+title: Number.isFinite()
+slug: Web/JavaScript/Reference/Global_Objects/Number/isFinite
+tags:
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Number
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/isFinite
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Number.isFinite()</code></strong> определяет, является ли переданное значение конечным числом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Number.isFinite(<var>testValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>testValue</code></dt>
+ <dd>Значение, проверяемое на конечность.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>В отличии от глобальной функции {{jsxref("Global_Objects/isFinite", "isFinite()")}}, этот метод принудительно не преобразует параметр в число. Это означает, что он возвращает <code>true</code> только для конечных значений числового типа.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Number.isFinite(Infinity); // false
+Number.isFinite(NaN); // false
+Number.isFinite(-Infinity); // false
+
+Number.isFinite(0); // true
+Number.isFinite(2e64); // true
+
+Number.isFinite('0'); // false, при использовании глобальной
+ // функции isFinite('0') было бы true
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">Number.isFinite = Number.isFinite || function(value) {
+ return typeof value === 'number' &amp;&amp; isFinite(value);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ES6', '#sec-number.isfinite', 'Number.isInteger')}}</p>
+ </td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("19")}}</td>
+ <td>{{CompatGeckoDesktop("16")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("16")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Global_Objects/Number", "Number")}}, которому принадлежит этот метод.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/isinteger/index.html b/files/ru/web/javascript/reference/global_objects/number/isinteger/index.html
new file mode 100644
index 0000000000..433a19f64b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/isinteger/index.html
@@ -0,0 +1,95 @@
+---
+title: Number.isInteger()
+slug: Web/JavaScript/Reference/Global_Objects/Number/isInteger
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/isInteger
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<p>Метод <strong><code>Number.isInteger()</code></strong> определяет, является ли переданное значение целым числом.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/number-isinteger.html")}}</p>
+
+
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Number.isInteger(<var>value</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, проверяемое на целочисленность.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Boolean")}} сообщающий о том, является ли переданное значение целочисленным числом.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если целевое значение является целым числом, возвращает <code>true</code>. Если значение {{jsxref("NaN")}} или {{jsxref("Infinity")}}, то возвращает <code>false</code>. Метод также возвращает <code>true</code>, если это вещественное число с точкой, которое может быть представлено в целочисленном виде.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Number.isInteger(0); // true
+Number.isInteger(1); // true
+Number.isInteger(-100000); // true
+Number.isInteger(99999999999999999999999); // true
+
+Number.isInteger(0.1); // false
+Number.isInteger(Math.PI); // false
+
+Number.isInteger(NaN); // false
+Number.isInteger(Infinity); // false
+Number.isInteger(-Infinity); // false
+Number.isInteger('10'); // false
+Number.isInteger(true); // false
+Number.isInteger(false); // false
+Number.isInteger([1]); // false
+
+Number.isInteger(5.0); // true
+Number.isInteger(5.000000000000001); // false
+Number.isInteger(5.0000000000000001); // true</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">Number.isInteger = Number.isInteger || function(value) {
+ return typeof value === 'number' &amp;&amp;
+  isFinite(value) &amp;&amp;
+  Math.floor(value) === value;
+};</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ESDraft', '#sec-number.isinteger', 'Number.isInteger')}}</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+
+
+<div></div>
+
+<div>{{Compat("javascript.builtins.Number.isInteger")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Number")}}, которому принадлежит этот метод.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/isnan/index.html b/files/ru/web/javascript/reference/global_objects/number/isnan/index.html
new file mode 100644
index 0000000000..173fd76c17
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/isnan/index.html
@@ -0,0 +1,96 @@
+---
+title: Number.isNaN()
+slug: Web/JavaScript/Reference/Global_Objects/Number/isNaN
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Number
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/isNaN
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Number.isNaN()</code></strong> определяет, является ли переданное значение {{jsxref("Global_Objects/NaN", "NaN")}}. Это более надёжная версия оригинальной глобальной функции {{jsxref("Global_Objects/isNaN", "isNaN()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Number.isNaN(<var>value</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, проверяемое на {{jsxref("Global_Objects/NaN", "NaN")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку оба оператора проверки на равенство, {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} и {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}, вычисляются в <code>false</code> при проверке, что {{jsxref("Global_Objects/NaN", "NaN")}} <em>и есть</em> {{jsxref("Global_Objects/NaN", "NaN")}}, появляется необходимость в функции <code>Number.isNaN()</code>. Эта ситуация отличается от всех других возможных сравнений в JavaScript.</p>
+
+<p>В отличие от глобальной функции {{jsxref("Global_Objects/isNaN", "isNaN()")}}, <code>Number.isNaN()</code> не имеет проблемы принудительного преобразования параметра в число. Это значит, что в него безопасно передавать значения, которые обычно превращаются в {{jsxref("Global_Objects/NaN", "NaN")}}, но на самом деле {{jsxref("Global_Objects/NaN", "NaN")}} не являются. Также это значит, что метод возвращает <code>true</code> только для числовых значений, имеющих значение {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Number.isNaN(NaN); // true
+Number.isNaN(Number.NaN); // true
+Number.isNaN(0 / 0) // true
+
+// При использовании глобальной функции isNaN() это всё будет true
+Number.isNaN('NaN'); // false
+Number.isNaN(undefined); // false
+Number.isNaN({}); // false
+Number.isNaN('blabla'); // false
+
+// А это всё в любом случае будет false
+Number.isNaN(true);
+Number.isNaN(null);
+Number.isNaN(37);
+Number.isNaN('37');
+Number.isNaN('37.37');
+Number.isNaN('');
+Number.isNaN(' ');
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">Number.isNaN = Number.isNaN || function(value) {
+ return typeof value === 'number' &amp;&amp; isNaN(value);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ES6', '#sec-number.isnan', 'Number.isnan')}}</p>
+ </td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Number.isNaN")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Number", "Number")}}</li>
+ <li>{{jsxref("Global_Objects/isNaN", "isNaN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/issafeinteger/index.html b/files/ru/web/javascript/reference/global_objects/number/issafeinteger/index.html
new file mode 100644
index 0000000000..9fbc3bb7d9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/issafeinteger/index.html
@@ -0,0 +1,95 @@
+---
+title: Number.isSafeInteger()
+slug: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Number
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/isSafeInteger
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>Number.isSafeInteger()</code></strong> определяет, является ли переданное значение <dfn>безопасным целым числом</dfn>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/number-issafeinteger.html")}}</div>
+
+
+
+<p>Безопасное целое число это такое число, которое:</p>
+
+<ul>
+ <li>может быть точно представлено числом IEEE-754 двойной точности и</li>
+ <li>чьё представление IEEE-754 не может быть результатом округления любого другого целого числа, соответствующего представлению IEEE-754.</li>
+</ul>
+
+<p>Например, число <code>2<sup>53</sup> - 1</code> является безопасным целым числом: оно может быть представлено точно и никакое другое целое число не округляется к нему ни в каком режиме округления IEEE-754. В противовес ему, число <code>2<sup>53</sup></code> <em>не является</em> безопасным целым числом: оно может быть точно представлено в IEEE-754, но целое число <code>2<sup>53</sup> + 1</code> не может быть напрямую представлено в IEEE-754 и округляется к числу <code>2<sup>53</sup></code> в режимах округления к ближайшему и к нулю. Безопасные целые числа состоят из всех целых чисел в диапазоне от <code>-(2<sup>53</sup> - 1)</code> до <code>2<sup>53</sup> - 1</code> включительно (± <code>9007199254740991</code> или ± 9,007,199,254,740,991).</p>
+
+<p>Обработка значений, больших или меньших чем ~9 квадриллионов, с высокой точностью требует использования <a href="https://ru.wikipedia.org/wiki/%D0%94%D0%BB%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%B0">библиотеки, умеющей работать с длиной арифметикой</a>. Ознакомьтесь с <a href="http://floating-point-gui.de/">Что Каждому Программисту Необходимо Знать об Арифметике с Вещественными числами</a> для получения дополнительной информации о представлении чисел, с плавающей запятой.</p>
+
+<p>Для больших целочисленных значений, рассмотрите возможность использования типа {{jsxref("BigInt")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>Number.isSafeInteger(<var>testValue</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>testValue</code></dt>
+ <dd>Значение, проверяемое на целочисленную «безопасность».</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Boolean")}} значение, сообщающее о том, является ли переданное значение безопасным целочисленным числом или же нет.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js notranslate">Number.isSafeInteger(3); // true
+Number.isSafeInteger(Math.pow(2, 53)); // false
+Number.isSafeInteger(Math.pow(2, 53) - 1); // true
+Number.isSafeInteger(NaN); // false
+Number.isSafeInteger(Infinity); // false
+Number.isSafeInteger('3'); // false
+Number.isSafeInteger(3.1); // false
+Number.isSafeInteger(3.0); // true
+</pre>
+
+<h2 id="Specifications" name="Specifications">Полифилл</h2>
+
+<pre class="brush: js notranslate">Number.isSafeInteger = Number.isSafeInteger || function (value) {
+ return Number.isInteger(value) &amp;&amp; Math.abs(value) &lt;= Number.MAX_SAFE_INTEGER;
+};</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ESDraft', '#sec-number.issafeinteger', 'Number.isSafeInteger')}}</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Number.isSafeInteger")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Number")}}, которому принадлежит этот метод.</li>
+ <li>{{jsxref("Number.MIN_SAFE_INTEGER")}}</li>
+ <li>{{jsxref("Number.MAX_SAFE_INTEGER")}}</li>
+ <li>{{jsxref("BigInt")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.html b/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.html
new file mode 100644
index 0000000000..652a6aa821
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/max_safe_integer/index.html
@@ -0,0 +1,65 @@
+---
+title: Number.MAX_SAFE_INTEGER
+slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Константа <strong><code>Number.MAX_SAFE_INTEGER</code></strong> представляет максимальное безопасное целочисленное значение в JavaScript (<code>2<sup>53</sup> - 1</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Константа <code>MAX_SAFE_INTEGER</code> имеет значение <code>9007199254740991</code>. Смысл этого числа в том, что в JavaScript используется <a href="https://ru.wikipedia.org/wiki/Число_двойной_точности">формат чисел с плавающей запятой двойной точности</a>, как определено в стандарте <a href="https://ru.wikipedia.org/wiki/IEEE_754">IEEE 754</a>, а он может безопасно представлять числа только в диапазоне от <code>-(2<sup>53</sup> - 1)</code> до <code>2<sup>53</sup> - 1</code>.</p>
+
+<p>Поскольку <code>MAX_SAFE_INTEGER</code> является статическим свойством объекта {{jsxref("Global_Objects/Number", "Number")}}, вы всегда должны использовать его как <code>Number.MAX_SAFE_INTEGER</code>, а не как свойство созданного вами объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Number.MAX_SAFE_INTEGER // 9007199254740991
+Math.pow(2, 53) - 1 // 9007199254740991
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">if (!Number.MAX_SAFE_INTEGER) {
+ Number.MAX_SAFE_INTEGER = 9007199254740991; // Math.pow(2, 53) - 1;
+}</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.max_safe_integer', 'Number.MAX_SAFE_INTEGER')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Number.MAX_SAFE_INTEGER")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.MIN_SAFE_INTEGER")}}</li>
+ <li>{{jsxref("Number.isSafeInteger()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/max_value/index.html b/files/ru/web/javascript/reference/global_objects/number/max_value/index.html
new file mode 100644
index 0000000000..7472d91e57
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/max_value/index.html
@@ -0,0 +1,110 @@
+---
+title: Number.MAX_VALUE
+slug: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE
+tags:
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Number.MAX_VALUE</code></strong> представляет максимальное числовое значение, представимое в JavaScript.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Свойство <code>MAX_VALUE</code> имеет значение, приблизительно равное <code>1.79E+308</code>. Значения, большие <code>MAX_VALUE</code> представляются как «бесконечность».</p>
+<p>Поскольку <code>MAX_VALUE</code> является статическим свойством объекта {{jsxref("Global_Objects/Number", "Number")}}, вы всегда должны использовать его как <code>Number.MAX_VALUE</code>, а не как свойство созданного вами объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_MAX_VALUE" name="Example:_Using_MAX_VALUE">Пример: использование <code>MAX_VALUE</code></h3>
+<p>В следующем примере кода производится умножение двух значений. Если результат меньше или равен <code>MAX_VALUE</code>, вызывается функция <code>func1</code>; в противном случае вызывается функция <code>func2</code>.</p>
+<pre class="brush: js">if (num1 * num2 &lt;= Number.MAX_VALUE) {
+ func1();
+} else {
+ func2();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.3.2', 'Number.MAX_VALUE')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.max_value', 'Number.MAX_VALUE')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Number.MIN_VALUE")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/min_safe_integer/index.html b/files/ru/web/javascript/reference/global_objects/number/min_safe_integer/index.html
new file mode 100644
index 0000000000..58a21e845c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/min_safe_integer/index.html
@@ -0,0 +1,105 @@
+---
+title: Number.MIN_SAFE_INTEGER
+slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_SAFE_INTEGER
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Константа <strong><code>Number.MIN_SAFE_INTEGER</code></strong> представляет минимальное безопасное целочисленное значение в JavaScript (<code>-(2<sup>53</sup> - 1)</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Константа <code>MIN_SAFE_INTEGER</code> имеет значение <code>-9007199254740991</code>. Смысл этого числа в том, что в JavaScript используется <a href="https://ru.wikipedia.org/wiki/Число_двойной_точности">формат чисел с плавающей запятой двойной точности</a>, как определено в стандарте <a href="https://ru.wikipedia.org/wiki/IEEE_754">IEEE 754</a>, а он может безопасно представлять числа только в диапазоне от <code>-(2<sup>53</sup> - 1)</code> до <code>2<sup>53</sup> - 1</code>.</p>
+
+<p>Поскольку <code>MIN_SAFE_INTEGER</code> является статическим свойством объекта {{jsxref("Global_Objects/Number", "Number")}}, вы всегда должны использовать его как <code>Number.MIN_SAFE_INTEGER</code>, а не как свойство созданного вами объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Number.MIN_SAFE_INTEGER // -9007199254740991
+-(Math.pow(2, 53) - 1) // -9007199254740991
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.min_safe_integer', 'Number.MIN_SAFE_INTEGER')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("34")}}</td>
+ <td>{{CompatGeckoDesktop("31")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("32")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.MAX_SAFE_INTEGER")}}</li>
+ <li>{{jsxref("Number.isSafeInteger()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/min_value/index.html b/files/ru/web/javascript/reference/global_objects/number/min_value/index.html
new file mode 100644
index 0000000000..0c9c2fded1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/min_value/index.html
@@ -0,0 +1,122 @@
+---
+title: Number.MIN_VALUE
+slug: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE
+tags:
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>Number.</code><span style="font-family: consolas,monaco,andale mono,monospace;">MIN_VALUE</span></strong> представляет минимальное положительное числовое значение, представимое в JavaScript.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Свойство <code>MIN_VALUE</code> является положительным ближайшим к нулю числом, которое может быть представлено в JavaScript.</p>
+
+<p><code>MIN_VALUE</code> имеет значение, приблизительно равное <code>5e-324</code>. Значения, меньшие <code>MIN_VALUE</code>, преобразуются в 0 (так называемое «исчезновение порядка» или «антипереполнение»).</p>
+
+<p>Поскольку <code>MIN_VALUE</code> является статическим свойством объекта {{jsxref("Global_Objects/Number", "Number")}}, вы всегда должны использовать его как <code>Number.MIN_VALUE</code>, а не как свойство созданного вами объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_MIN_VALUE" name="Example:_Using_MIN_VALUE">Пример: использование <code>MIN_VALUE</code></h3>
+
+<p>В следующем примере кода производится деление одного значения на другое. Если результат больше или равен <code>MIN_VALUE</code>, вызывается функция <code>func1</code>; в противном случае вызывается функция <code>func2</code>.</p>
+
+<pre class="brush: js">if (num1 / num2 &gt;= Number.MIN_VALUE) {
+ func1();
+} else {
+ func2();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.3.3', 'Number.MIN_VALUE')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.min_value', 'Number.MIN_VALUE')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.MAX_VALUE")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/nan/index.html b/files/ru/web/javascript/reference/global_objects/number/nan/index.html
new file mode 100644
index 0000000000..c85c806eb3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/nan/index.html
@@ -0,0 +1,97 @@
+---
+title: Number.NaN
+slug: Web/JavaScript/Reference/Global_Objects/Number/NaN
+tags:
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/NaN
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Number.NaN</code></strong> представляет «не число». Эквивалентно глобальному объекту {{jsxref("Global_Objects/NaN", "NaN")}}.</p>
+<p>Вам не нужно создавать объект {{jsxref("Global_Objects/Number", "Number")}} для доступа к этому статическому свойству (используйте <code>Number.NaN</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.3.4', 'Number.NaN')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.nan', 'Number.NaN')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>Глобальный объект {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>Объект {{jsxref("Global_Objects/Number", "Number")}}, которому принадлежит это свойство.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/negative_infinity/index.html b/files/ru/web/javascript/reference/global_objects/number/negative_infinity/index.html
new file mode 100644
index 0000000000..7f65de76b3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/negative_infinity/index.html
@@ -0,0 +1,125 @@
+---
+title: Number.NEGATIVE_INFINITY
+slug: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY
+tags:
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/NEGATIVE_INFINITY
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Number.NEGATIVE_INFINITY</code></strong> представляет значение отрицательной бесконечности.</p>
+<p>Вам не нужно создавать объект {{jsxref("Global_Objects/Number", "Number")}} для доступа к этому статическому свойству (используйте <code>Number.NEGATIVE_INFINITY</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение <code>Number.NEGATIVE_INFINITY</code> является тем же самым по модулю, только отрицательным значением, что содержит свойство {{jsxref("Global_Objects/Infinity", "Infinity")}} глобального объекта.</p>
+<p>Это значение ведёт себя несколько иначе, нежели математическая бесконечность:</p>
+<ul>
+ <li>Любое положительное значение, включая {{jsxref("Number.POSITIVE_INFINITY", "POSITIVE_INFINITY")}}, умноженное на <code>NEGATIVE_INFINITY</code> даёт <code>NEGATIVE_INFINITY</code>.</li>
+ <li>Любое отрицательное значение, включая <code>NEGATIVE_INFINITY</code>, умноженное на <code>NEGATIVE_INFINITY</code> даёт {{jsxref("Number.POSITIVE_INFINITY", "POSITIVE_INFINITY")}}.</li>
+ <li>Ноль, умноженный на <code>NEGATIVE_INFINITY</code>, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}, умноженный на <code>NEGATIVE_INFINITY</code>, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li><code>NEGATIVE_INFINITY</code>, делённое на любое отрицательное значение, исключая <code>NEGATIVE_INFINITY</code>, даёт {{jsxref("Number.POSITIVE_INFINITY", "POSITIVE_INFINITY")}}.</li>
+ <li><code>NEGATIVE_INFINITY</code>, делённое на любое положительное значение, исключая {{jsxref("Number.POSITIVE_INFINITY", "POSITIVE_INFINITY")}}, даёт <code>NEGATIVE_INFINITY</code>.</li>
+ <li><code>NEGATIVE_INFINITY</code>, делённое на <code>NEGATIVE_INFINITY</code> или {{jsxref("Number.POSITIVE_INFINITY", "POSITIVE_INFINITY")}}, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>Любое число, делённое на <code>NEGATIVE_INFINITY</code>, даёт ноль.</li>
+</ul>
+<p>Вы можете использовать свойство <code>Number.NEGATIVE_INFINITY</code> для проверки на ошибки и возвращать конечное число в случае успеха. Однако, обратите внимание, что в этом случае более уместным было бы использование функции {{jsxref("Global_Objects/isFinite", "isFinite")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_NEGATIVE_INFINITY" name="Example:_Using_NEGATIVE_INFINITY">Пример: использование <code>NEGATIVE_INFINITY</code></h3>
+<p>В следующем примере переменной <code>smallNumber</code> присваивается значение, меньшее минимального. Когда выполняется инструкция {{jsxref("Statements/if...else", "if")}}, переменная <code>smallNumber</code> имеет значение <code>-Infinity</code>, так что перед продолжением вычислений она устанавливается в более приемлимое значение.</p>
+<pre class="brush: js">var smallNumber = (-Number.MAX_VALUE) * 2;
+
+if (smallNumber == Number.NEGATIVE_INFINITY) {
+ smallNumber = returnFinite();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.3.5', 'Number.NEGATIVE_INFINITY')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.negative_infinity', 'Number.NEGATIVE_INFINITY')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Number.POSITIVE_INFINITY")}}</li>
+ <li>{{jsxref("Number.isFinite()")}}</li>
+ <li>{{jsxref("Global_Objects/Infinity", "Infinity")}}</li>
+ <li>{{jsxref("Global_Objects/isFinite", "isFinite()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/parsefloat/index.html b/files/ru/web/javascript/reference/global_objects/number/parsefloat/index.html
new file mode 100644
index 0000000000..ab4a2e0dc7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/parsefloat/index.html
@@ -0,0 +1,108 @@
+---
+title: Number.parseFloat()
+slug: Web/JavaScript/Reference/Global_Objects/Number/parseFloat
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Number
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseFloat
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Number.parseFloat()</code></strong> разбирает строковый аргумент и возвращает число с плавающей запятой. Этот метод ведёт себя идентично глобальной функции {{jsxref("Global_Objects/parseFloat", "parseFloat()")}} и является частью ECMAScript 6 (его целью является модуляризация глобальных сущностей).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Number.parseFloat(<var>string</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>string</code></dt>
+ <dd>Строка, представляющая значение, которое вы хотите разобрать.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Пожалуйста, обратитесь к документации по глобальной функции {{jsxref("Global_Objects/parseFloat", "parseFloat()")}} для просмотра подробного описания и примеров.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ES6', '#sec-number.parsefloat', 'Number.parseFloat')}}</p>
+ </td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("25")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Global_Objects/Number", "Number")}}, которому принадлежит этот метод.</li>
+ <li>Глобальная функция {{jsxref("Global_Objects/parseFloat", "parseFloat()")}}.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/parseint/index.html b/files/ru/web/javascript/reference/global_objects/number/parseint/index.html
new file mode 100644
index 0000000000..66bc26675f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/parseint/index.html
@@ -0,0 +1,82 @@
+---
+title: Number.parseInt()
+slug: Web/JavaScript/Reference/Global_Objects/Number/parseInt
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Number
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/parseInt
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Number.parseInt()</code></strong> разбирает строковый аргумент и возвращает целое число. Этот метод ведёт себя идентично глобальной функции {{jsxref("Global_Objects/parseInt", "parseInt()")}} и является частью ECMAScript 6 (его целью является модуляризация глобальных сущностей).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Number.parseInt(<var>string</var>[, <var>radix</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>string</code></dt>
+ <dd>Значение для разбора. Если параметр не является строкой, он будет в неё преобразован. Ведущие пробельные символы в строке игнорируются.</dd>
+ <dt><code>radix</code></dt>
+ <dd>Необязательный параметр. Целое число, представляющее основание системы счисления для числа в указанной выше строке. Для избежания непонятностей при чтении кода и гарантии предсказуемого поведения <strong>всегда определяйте этот параметр</strong>. Различные реализации дадут разные результаты, если основание системы счисления не будет указано.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Целое число, полученное парсингом (разбором и интерпретацией) переданной строки. Если первый символ строки не может быть преобразован в число, то возвращается <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="Глобальное свойство NaN является значением, представляющим не-число (Not-A-Number)."><code>NaN</code></a>. </p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод имеет ту же функциональность, что и глобальная функция {{jsxref("parseInt", "parseInt()")}}:</p>
+
+<pre class="brush: js">Number.parseInt === parseInt; // true</pre>
+
+<p>Пожалуйства, обратитесь к документации по глобальной функции {{jsxref("Global_Objects/parseInt", "parseInt()")}} для просмотра подробного описания и примеров.</p>
+
+<h2 id="Полифилл">Полифилл</h2>
+
+<pre class="brush: js">if (Number.parseInt === undefined) {
+ Number.parseInt = window.parseInt;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>
+ <p>{{SpecName('ES6', '#sec-number.parseint', 'Number.parseInt')}}</p>
+ </td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-number.parseint', 'Number.parseInt')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Number.parseInt")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Объект {{jsxref("Global_Objects/Number", "Number")}}, которому принадлежит этот метод.</li>
+ <li>Глобальная функция {{jsxref("Global_Objects/parseInt", "parseInt()")}}.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/positive_infinity/index.html b/files/ru/web/javascript/reference/global_objects/number/positive_infinity/index.html
new file mode 100644
index 0000000000..fd87dde80a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/positive_infinity/index.html
@@ -0,0 +1,125 @@
+---
+title: Number.POSITIVE_INFINITY
+slug: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY
+tags:
+ - JavaScript
+ - Number
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Number.POSITIVE_INFINITY</code></strong> представляет значение положительной бесконечности.</p>
+<p>Вам не нужно создавать объект {{jsxref("Global_Objects/Number", "Number")}} для доступа к этому статическому свойству (используйте <code>Number.POSITIVE_INFINITY</code>).</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение <code>Number.POSITIVE_INFINITY</code> является тем же самым значением, что содержит свойство {{jsxref("Global_Objects/Infinity", "Infinity")}} глобального объекта.</p>
+<p>Это значение ведёт себя несколько иначе, нежели математическая бесконечность:</p>
+<ul>
+ <li>Любое положительное значение, включая <code>POSITIVE_INFINITY</code>, умноженное на <code>POSITIVE_INFINITY</code> даёт <code>POSITIVE_INFINITY</code>.</li>
+ <li>Любое отрицательное значение, включая {{jsxref("Number.NEGATIVE_INFINITY", "NEGATIVE_INFINITY")}}, умноженное на <code>POSITIVE_INFINITY</code> даёт {{jsxref("Number.NEGATIVE_INFINITY", "NEGATIVE_INFINITY")}}.</li>
+ <li>Ноль, умноженный на <code>POSITIVE_INFINITY</code>, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}, умноженный на <code>POSITIVE_INFINITY</code>, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li><code>POSITIVE_INFINITY</code>, делённое на любое отрицательное значение, исключая {{jsxref("Number.NEGATIVE_INFINITY", "NEGATIVE_INFINITY")}}, даёт {{jsxref("Number.NEGATIVE_INFINITY", "NEGATIVE_INFINITY")}}.</li>
+ <li><code>POSITIVE_INFINITY</code>, делённое на любое положительное значение, исключая <code>POSITIVE_INFINITY</code>, даёт <code>POSITIVE_INFINITY</code>.</li>
+ <li><code>POSITIVE_INFINITY</code>, делённое на {{jsxref("Number.NEGATIVE_INFINITY", "NEGATIVE_INFINITY")}} или <code>POSITIVE_INFINITY</code>, даёт {{jsxref("Global_Objects/NaN", "NaN")}}.</li>
+ <li>Любое число, делённое на <code>POSITIVE_INFINITY</code>, даёт ноль.</li>
+</ul>
+<p>Вы можете использовать свойство <code>Number.POSITIVE_INFINITY</code> для проверки на ошибки и возвращать конечное число в случае успеха. Однако, обратите внимание, что в этом случае более уместным было бы использование функции {{jsxref("Global_Objects/isFinite", "isFinite")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_POSITIVE_INFINITY" name="Example:_Using_POSITIVE_INFINITY">Пример: использование <code>POSITIVE_INFINITY</code></h3>
+<p>В следующем примере переменной <code>bigNumber</code> присваивается значение, большее максимального. Когда выполняется инструкция {{jsxref("Statements/if...else", "if")}}, переменная <code>bigNumber</code> имеет значение <code>Infinity</code>, так что перед продолжением вычислений она устанавливается в более приемлимое значение.</p>
+<pre class="brush: js">var bigNumber = Number.MAX_VALUE * 2;
+
+if (bigNumber == Number.POSITIVE_INFINITY) {
+ bigNumber = returnFinite();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.3.6', 'Number.POSITIVE_INFINITY')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.positive_infinity', 'Number.POSITIVE_INFINITY')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Number.NEGATIVE_INFINITY")}}</li>
+ <li>{{jsxref("Number.isFinite()")}}</li>
+ <li>{{jsxref("Global_Objects/Infinity", "Infinity")}}</li>
+ <li>{{jsxref("Global_Objects/isFinite", "isFinite()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/prototype/index.html b/files/ru/web/javascript/reference/global_objects/number/prototype/index.html
new file mode 100644
index 0000000000..640e7ce716
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/prototype/index.html
@@ -0,0 +1,123 @@
+---
+title: Number.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Number/prototype
+tags:
+ - JavaScript
+ - Number
+ - Property
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Number
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>Number.prototype</code></strong> представляет прототип конструктора {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("Global_Objects/Number", "Number")}} наследуются от <code>Number.prototype</code>. Объект прототипа конструктора {{jsxref("Global_Objects/Number", "Number")}} может быть изменён для затрагивания всех экземпляров объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>Number.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создавшую этот экземпляр объекта. По умолчанию ей является объект {{jsxref("Global_Objects/Number", "Number")}}.</dd>
+</dl>
+
+<div>{{jsOverrides("Object", "properties", "constructor")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<dl>
+ <dt>{{jsxref("Number.prototype.toExponential()")}}</dt>
+ <dd>Возвращает строку, представляющую число в экспоненциальной записи.</dd>
+ <dt>{{jsxref("Number.prototype.toFixed()")}}</dt>
+ <dd>Возвращает строку, представляющую число в записи с фиксированной запятой.</dd>
+ <dt>{{jsxref("Number.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает строку с языко-зависимым представлением числа. Переопределяет метод {{jsxref("Object.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("Number.prototype.toPrecision()")}}</dt>
+ <dd>Возвращает строку, представляющую число с указанной точностью в экспоненциальной записи, либо записи с фиксированной запятой.</dd>
+ <dt>{{jsxref("Number.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает объектный литерал, представляющий объект {{jsxref("Global_Objects/Number", "Number")}}; вы можете использовать это значение для создания нового объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Number.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, представляющую указанный объект по указанному основанию системы счисления. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("Number.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение указанного объекта. Переопределяет метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
+</dl>
+
+<div>{{jsOverrides("Object", "methods", "toExponential", "toFixed", "toLocaleString", "toPrecision", "toSource", "toString", "valueOf")}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4', 'Number')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-the-number-prototype-object', 'Number')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/number/toexponential/index.html b/files/ru/web/javascript/reference/global_objects/number/toexponential/index.html
new file mode 100644
index 0000000000..0f24f36542
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/toexponential/index.html
@@ -0,0 +1,131 @@
+---
+title: Number.prototype.toExponential()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toExponential
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toExponential
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toExponential()</code></strong> возвращает строку, представляющую объект {{jsxref("Global_Objects/Number", "Number")}} в экспоненциальной записи.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>numObj</var>.toExponential([<var>fractionDigits</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>fractionDigits</code></dt>
+ <dd>Необязательный параметр. Целое число, определяющее количество цифр после десятичной запятой. По умолчанию используется столько цифр, сколько необходимо для указания числа.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Строка, представляющая объект {{jsxref("Global_Objects/Number", "Number")}} в экспоненциальной записи с одной цифрой перед десятичной запятой, округлённое до <code>fractionDigits</code> цифр после десятичной запятой. Если аргумент <code>fractionDigits</code> опущен, количество цифр после десятичной запятой по умолчанию устанавливается в количество цифр, необходимых для однозначного представления значения.</p>
+<p>Если вы используете метод <code>toExponential()</code> с числовыми литералами и числовой литерал не имеет экспоненты и десятичной запятой, оставьте пробел перед точкой, предшествующей вызову метода для предотвращения интерпретации этой точки как десятичной запятой.</p>
+<p>Если число имеет больше цифр, чем запрошено параметром <code>fractionDigits</code>, оно будет округлено к ближайшему числу, представляемому <code>fractionDigits</code> цифрами. Смотрите обсуждение округления в описании метода {{jsxref("Number.prototype.toFixed", "toFixed()")}}, которое так же применяется и к методу <code>toExponential()</code>.</p>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Если параметр <code>fractionDigits</code> слишком маленький или слишком большой. Значения между 0 и 20 включительно не будут порождать исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}. Также реализации могут поддерживать большие и меньшие значения.</dd>
+ <dt>{{jsxref("Global_Objects/TypeError", "TypeError")}}</dt>
+ <dd>Если этот метод вызывается на объекте, не являющимся объектом {{jsxref("Global_Objects/Number", "Number")}}.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toExponential" name="Example:_Using_toExponential">Пример: использование <code>toExponential</code></h3>
+<pre class="brush: js">var numObj = 77.1234;
+
+
+console.log(numObj.toExponential()); // выведет 7.71234e+1
+console.log(numObj.toExponential(4)); // выведет 7.7123e+1
+console.log(numObj.toExponential(2)); // выведет 7.71e+1
+console.log(77.1234.toExponential()); // выведет 7.71234e+1
+console.log(77 .toExponential()); // выведет 7.7e+1
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.6', 'Number.prototype.toExponential')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.toexponential', 'Number.prototype.toExponential')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Number.prototype.toFixed()")}}</li>
+ <li>{{jsxref("Number.prototype.toPrecision()")}}</li>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/tofixed/index.html b/files/ru/web/javascript/reference/global_objects/number/tofixed/index.html
new file mode 100644
index 0000000000..a7beb2afcc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/tofixed/index.html
@@ -0,0 +1,143 @@
+---
+title: Number.prototype.toFixed()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toFixed
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toFixed
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toFixed()</code></strong> форматирует число, используя запись с фиксированной запятой.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>numObj</var>.toFixed([<var>digits</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>digits</code></dt>
+ <dd>Необязательный параметр. Количество цифр после десятичной запятой; может быть значением между 0 и 20 включительно, хотя реализации могут поддерживать и больший диапазон значений. Если аргумент опущен, он считается равным 0.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Строка, представляющая <code>numObj</code>, не использующая экспоненциальную запись и содержащая ровно <code>digits</code> цифр после десятичной запятой. Число округляется при необходимости, а дробная часть дополняется нулями таким образом, чтобы иметь указанную длину. Если <code>numObj</code> больше или равно <code>1e+21</code>, этот метод просто вызывает метод {{jsxref("Number.prototype.toString()")}} и возвращает строку в экспоненциальной записи.</p>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Если параметр <code>digits</code> слишком маленький или слишком большой. Значения между 0 и 20 включительно не будут порождать исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}. Также реализации могут поддерживать большие и меньшие значения.</dd>
+ <dt>{{jsxref("Global_Objects/TypeError", "TypeError")}}</dt>
+ <dd>Если этот метод вызывается на объекте, не являющимся объектом {{jsxref("Global_Objects/Number", "Number")}}.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toFixed" name="Example:_Using_toFixed">Пример: использование <code>toFixed</code></h3>
+
+<pre class="brush: js">var numObj = 12345.6789;
+
+numObj.toFixed(); // Вернёт '12346': обратите внимание на округление, дробной части нет
+numObj.toFixed(1); // Вернёт '12345.7': обратите внимание на округление
+numObj.toFixed(6); // Вернёт '12345.678900': обратите внимание на дополнение нулями
+(1.23e+20).toFixed(2); // Вернёт '123000000000000000000.00'
+(1.23e-10).toFixed(2); // Вернёт '0.00'
+2.34.toFixed(1); // Вернёт '2.3'
+-2.34.toFixed(1); // Вернёт -2.3 (в соответствии с приоритетом операций,
+ // отрицательные числовые литералы не возвращают строку...)
+(-2.34).toFixed(1); // Вернёт '-2.3' (...до тех пор, пока вы не заключите их в круглые скобки)
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.5', 'Number.prototype.toFixed')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.tofixed', 'Number.prototype.toFixed')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toExponential()")}}</li>
+ <li>{{jsxref("Number.prototype.toPrecision()")}}</li>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/tointeger/index.html b/files/ru/web/javascript/reference/global_objects/number/tointeger/index.html
new file mode 100644
index 0000000000..14260df0d5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/tointeger/index.html
@@ -0,0 +1,94 @@
+---
+title: Number.toInteger()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toInteger
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Number
+ - Obsolete
+translation_of: Archive/Web/JavaScript/Number.toInteger
+---
+<div>{{JSRef("Global_Objects", "Number")}} {{obsolete_header("33")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Number.toInteger()</code></strong> использовался для вычисления переданного значения и преобразования его в целое число, но его реализация была удалена.</p>
+<p>Если целевым значением является {{jsxref("Global_Objects/NaN", "NaN")}}, {{jsxref("Global_Objects/null", "null")}} или {{jsxref("Global_Objects/undefined", "undefined")}}, возвращается 0. Если целевым значением является <code>false</code>, возвращается 0, а если <code>true</code>, то 1.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Number.toInteger(<var>number</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>number</code></dt>
+ <dd>Значение, преобразуемое в целое число.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toInteger" name="Example:_Using_toInteger">Пример: использование <code>toInteger</code></h3>
+<p>Вывод на некоторых тестовых значениях:</p>
+<pre class="brush:js">Number.toInteger(0.1); // 0
+Number.toInteger(1); // 1
+Number.toInteger(Math.PI); // 3
+Number.toInteger(null); // 0
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<ul>
+ <li><code>Number.toInteger()</code> был частью черновика спецификации ECMAScript 6, но он был удалён 23 августа 2013 г. в 17 ревизии черновика.</li>
+</ul>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>Firefox с версии 16 по версию 32</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>Firefox с версии 16 по версию 32</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>Объект {{jsxref("Global_Objects/Number", "Number")}}, которому принадлежит этот метод.</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/tolocalestring/index.html b/files/ru/web/javascript/reference/global_objects/number/tolocalestring/index.html
new file mode 100644
index 0000000000..1c6048805a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/tolocalestring/index.html
@@ -0,0 +1,164 @@
+---
+title: Number.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toLocaleString()</code></strong> возвращает строку с языко-зависимым представлением числа.</p>
+
+<p>Новые аргументы <code>locales</code> и <code>options</code> позволяют приложениям определять язык, чьё поведение и соглашения по форматированию которого оно хочет использовать. В старых реализациях, игнорирующих аргументы <code>locales</code> и <code>options</code>, используемая локаль и форма возвращённой строки целиком зависит от реализации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>numObj</var>.toLocaleString([<var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Проверьте раздел <a href="#Browser_compatibility">Совместимость с браузерами</a>, чтобы увидеть, какие браузеры поддерживают аргументы <code>locales</code> и <code>options</code>, и <a href="#Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></a> для определения этой возможности.</p>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> API интернационализации ECMAScript, реализованное в Firefox 29, добавляет аргумент <code>locales</code> к методу <code>Number.toLocaleString()</code>. Если этот аргумент равен {{jsxref("Global_Objects/undefined", "undefined")}}, этот метод возвращает локализованные цифры на языке, определяемом ОС, в то время, как предыдущие версии Firefox возвращали цифры на английском языке. Это изменение было помечено, как регрессия, затрагивающая обратную совместимость, которая скоро может быть исправлена. ({{bug(999003)}})</p>
+</div>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat', 'Parameters')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_toLocaleString" name="Example:_Using_toLocaleString">Пример: использование <code>toLocaleString</code></h3>
+
+<p>При базовом использовании без указания локали возвращается строка, отформатированная в соответствии с локалью и опциями по умолчанию.</p>
+
+<pre class="brush: js">var number = 3500;
+
+console.log(number.toLocaleString()); // Отобразит '3,500' в локали U.S. English
+</pre>
+
+<h3 id="Example_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></h3>
+
+<p>Аргументы <code>locales</code> и <code>options</code> поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:</p>
+
+<pre class="brush: js">function toLocaleStringSupportsLocales() {
+ var number = 0;
+ try {
+ number.toLocaleString('i');
+ } catch (e) {
+ return e​.name === 'RangeError';
+ }
+ return false;
+}
+</pre>
+
+<h3 id="Example_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Этот пример показывает некоторые локализованные числовые форматы. Для получения формата языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js">var number = 123456.789;
+
+// В Германии в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - точка
+console.log(number.toLocaleString('de-DE'));
+// → 123.456,789
+
+// В России в качестве разделителя целой и дробной части используется запятая, а в качестве разделителя разрядов - пробел
+console.log(number.toLocaleString('ru-RU'));
+// → 123 456,789
+
+// В большинстве арабоговорящих стран используют настоящие арабские цифры
+console.log(number.toLocaleString('ar-EG'));
+// → ١٢٣٤٥٦٫٧٨٩
+
+// В Индии используют разделители для тысяч/лакх/крор
+console.log(number.toLocaleString('en-IN'));
+// → 1,23,456.789
+
+// Ключ расширения nu запрашивает систему нумерации, например, китайскую десятичную
+console.log(number.toLocaleString('zh-Hans-CN-u-nu-hanidec'));
+// → 一二三,四五六.七八九
+
+// Если запрашиваемый язык может не поддерживаться, например
+// балийский, откатываемся на запасной язык, в данном случае индонезийский
+console.log(number.toLocaleString(['ban', 'id']));
+// → 123.456,789
+</pre>
+
+<h3 id="Example_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Результат, предоставляемый методом <code>toLocaleString()</code>, может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js">var number = 123456.789;
+
+// Запрашиваем формат валюты
+console.log(number.toLocaleString('de-DE', { style: 'currency', currency: 'EUR' }));
+// → 123.456,79 €
+
+console.log(number.toLocaleString('ru-RU', { style: 'currency', currency: 'RUB' }));
+// → 123 456,79 ₽
+
+// Японская йена не использует младшие единицы
+console.log(number.toLocaleString('ja-JP', { style: 'currency', currency: 'JPY' }))
+// → ¥123,457
+
+// Ограничиваем до трёх значащих цифр
+console.log(number.toLocaleString('en-IN', { maximumSignificantDigits: 3 }));
+// → 1,23,000
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+
+<p>При форматировании большого количества чисел лучшим вариантом будет создание объекта {{jsxref("Global_Objects/NumberFormat", "NumberFormat")}} и использование функции, предоставляемой его свойством {{jsxref("NumberFormat.format")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.3', 'Number.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.tolocalestring', 'Number.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-13.2.1', 'Number.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Number.toLocaleString")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>
+
+<div id="gtx-trans" style="position: absolute; left: 47px; top: 4182px;">
+<div class="gtx-trans-icon"></div>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/number/toprecision/index.html b/files/ru/web/javascript/reference/global_objects/number/toprecision/index.html
new file mode 100644
index 0000000000..83157bf3d2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/toprecision/index.html
@@ -0,0 +1,150 @@
+---
+title: Number.prototype.toPrecision()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toPrecision
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toPrecision
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toPrecision()</code></strong> возвращает строку, представляющую объект {{jsxref("Global_Objects/Number", "Number")}} с указанной точностью.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>numObj</var>.toPrecision([<var>precision</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>precision</code></dt>
+ <dd>Необязательный параметр. Целое число, определяющее количество значащих цифр.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Строка, представляющая объект {{jsxref("Global_Objects/Number", "Number")}} в записи с фиксированной запятой или в экспоненциальной записи, округлённое до <code>precision</code> значащих цифр. Смотрите обсуждение округления в описании метода {{jsxref("Number.prototype.toFixed", "toFixed()")}}, которое таким же образом применяется и к методу <code>toPrecision()</code>.</p>
+
+<p>Если аргумент <code>precision</code> опущен, поведение аналогично методу {{jsxref("Number.prototype.toString()")}}. Если он не является целым числом, он будет округлён к ближайшему целому числу.</p>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Если параметр <code>precison</code> не находится в диапазоне от 1 до 100 (включительно), будет выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}. Также реализации могут поддерживать большие и меньшие значения. ECMA-262 требует точности только до 21 значащей цифры.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_toPrecision" name="Example:_Using_toPrecision">Пример: использование <code>toPrecision</code></h3>
+
+<pre class="brush: js">var numObj = 5.123456;
+
+console.log(numObj.toPrecision()); // выведет '5.123456'
+console.log(numObj.toPrecision(5)); // выведет '5.1235'
+console.log(numObj.toPrecision(2)); // выведет '5.1'
+console.log(numObj.toPrecision(1)); // выведет '5'<code class="language-js">
+
+numObj <span class="operator token">=</span> <span class="number token">0.000123;</span>
+
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>numObj<span class="punctuation token">.</span><span class="function token">toPrecision</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// выведет '0.000123'</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>numObj<span class="punctuation token">.</span><span class="function token">toPrecision</span><span class="punctuation token">(</span><span class="number token">5</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// выведет '0.00012300'</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>numObj<span class="punctuation token">.</span><span class="function token">toPrecision</span><span class="punctuation token">(</span><span class="number token">2</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// выведет '0.00012'</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>numObj<span class="punctuation token">.</span><span class="function token">toPrecision</span><span class="punctuation token">(</span><span class="number token">1</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// выведет '0.0001' </span></code>
+
+// Обратите внимание, что если заданного количества разрядов
+// недостаточно для точного отображения целой части числа,
+// значение может быть возвращено в экспоненциальной записи.
+console.log((1234.5).toPrecision(2)); // выведет '1.2e+3'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.7', 'Number.prototype.toPrecision')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.toprecision', 'Number.prototype.toPrecision')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toFixed()")}}</li>
+ <li>{{jsxref("Number.prototype.toExponential()")}}</li>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/tosource/index.html b/files/ru/web/javascript/reference/global_objects/number/tosource/index.html
new file mode 100644
index 0000000000..780652ac86
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/tosource/index.html
@@ -0,0 +1,104 @@
+---
+title: Number.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toSource
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toSource
+---
+<div>{{JSRef("Global_Objects", "Number")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toSource()</code></strong> возвращает строку, представляющую исходный код объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>numObj</var>.toSource()
+Number.toSource()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>toSource</code> возвращает следующие значения:</p>
+
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Number", "Number")}} метод <code>toSource</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+
+ <pre class="brush: js">function Number() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров {{jsxref("Global_Objects/Number", "Number")}}, метод <code>toSource</code> возвращает строку, представляющую их исходный код.</li>
+</ul>
+
+<p>Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/tostring/index.html b/files/ru/web/javascript/reference/global_objects/number/tostring/index.html
new file mode 100644
index 0000000000..e3bfee048a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/tostring/index.html
@@ -0,0 +1,148 @@
+---
+title: Number.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Number/toString
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/toString
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toString()</code></strong> возвращает строковое представление указанного объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>numObj</var>.toString([<var>radix</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>radix</code></dt>
+ <dd>Необязательный параметр. Целое число между 2 и 36, определяющее основание системы счисления, используемой для представления числового значения.</dd>
+</dl>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Если в метод <code>toString()</code> передано основание не в диапазоне от 2 до 36, будет выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объект {{jsxref("Global_Objects/Number", "Number")}} переопределяет метод {{jsxref("Object.prototype.toString", "toString")}}, унаследованный из объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString")}}. Для объектов {{jsxref("Global_Objects/Number", "Number")}} метод <code>toString()</code> возвращает строку, представляющую объект в определённой системе счисления.</p>
+
+<p>Метод <code>toString()</code> разбирает свой первый аргумент и пытается вернуть строковое представление в системе счисления с указанным основанием. Для оснований, больших 10, при обозначении цифр, больших 9, используются буквы латинского алфавита. Например, для шестнадцатеричных чисел (основание 16), используются буквы с <code>a</code> по <code>f</code>.</p>
+
+<p>Если параметр <code>radix</code> не указан, предпочитаемое основание предполагается равным 10.</p>
+
+<p>Если число <code>numObj</code> отрицательно, его знак сохраняется. Это правило действует даже если основание равно 2; возвращённая строка является двоичным представлением положительного числа <code>numObj</code>, перед которым ставится знак <code>-</code>, а <strong>не</strong> дополнительным кодом числа <code>numObj</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toString" name="Example:_Using_toString">Пример: использование <code>toString</code></h3>
+
+<pre class="brush: js">var count = 10;
+
+console.log(count.toString()); // Выведет '10'
+console.log((17).toString()); // Выведет '17'
+
+var x = 6;
+
+console.log(x.toString(2)); // Выведет '110'
+console.log((254).toString(16)); // Выведет 'fe'
+
+console.log((-10).toString(2));   // Выведет '-1010'
+console.log((-0xff).toString(2)); // Выведет '-11111111'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.2', 'Number.prototype.tostring')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.tostring', 'Number.prototype.tostring')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Number.prototype.toFixed()")}}</li>
+ <li>{{jsxref("Number.prototype.toExponential()")}}</li>
+ <li>{{jsxref("Number.prototype.toPrecision()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/number/valueof/index.html b/files/ru/web/javascript/reference/global_objects/number/valueof/index.html
new file mode 100644
index 0000000000..33c284df26
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/number/valueof/index.html
@@ -0,0 +1,115 @@
+---
+title: Number.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Number/valueOf
+tags:
+ - JavaScript
+ - Method
+ - Number
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Number/valueOf
+---
+<div>{{JSRef("Global_Objects", "Number")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>valueOf()</code></strong> возвращает примитивное значение объекта {{jsxref("Global_Objects/Number", "Number")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>numObj</var>.valueOf()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование <code>valueOf()</code></h3>
+<pre class="brush: js">var numObj = new Number(10);
+console.log(typeof numObj); // object
+
+var num = numObj.valueOf();
+console.log(num); // 10
+console.log(typeof num); // number
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.7.4.4', 'Number.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-number.prototype.valueof', 'Number.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Number.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/__definegetter__/index.html b/files/ru/web/javascript/reference/global_objects/object/__definegetter__/index.html
new file mode 100644
index 0000000000..ecf5773d2e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/__definegetter__/index.html
@@ -0,0 +1,119 @@
+---
+title: Object.prototype.__defineGetter__()
+slug: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineGetter__
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>__defineGetter__()</code></strong> привязывает свойство объекта к функции, вызываемой каждый раз при поиске этого свойства.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__defineGetter__(<var>prop</var>, <var>func</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Строка, содержащая имя свойства, привязываемого к заданной функции.</dd>
+ <dt><code>func</code></dt>
+ <dd>Функция, привязываемая к поиску указанного свойства.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>__defineGetter__()</code> позволяет определить {{jsxref("Operators/get", "геттер", "", 1)}} на уже существующем объекте.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">// Нестандартный и устаревший способ
+
+var o = {};
+o.__defineGetter__('gimmeFive', function() { return 5; });
+console.log(o.gimmeFive); // 5
+
+
+// Способы, совместимые со стандартом
+
+// Использование оператора get
+var o = { get gimmeFive() { return 5; } };
+console.log(o.gimmeFive); // 5
+
+
+// Использование Object.defineProperty()
+var o = {};
+Object.defineProperty(o, 'gimmeFive', {
+ get: function() {
+ return 5;
+ }
+});
+console.log(o.gimmeFive); // 5
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.__defineSetter__()")}}</li>
+ <li>оператор {{jsxref("Operators/get", "get")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.prototype.__lookupGetter__()")}}</li>
+ <li>{{jsxref("Object.prototype.__lookupSetter__()")}}</li>
+ <li><a href="ru/docs/Web/JavaScript/Guide_ru/Working_with_Objects#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B3.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2_.D0.B8_.D1.81.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2">Руководство по JS: определение геттеров и сеттеров</a></li>
+ <li><a href="http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/">[Запись в блоге] Устаревание __defineGetter__ и __defineSetter__</a> (англ.)</li>
+ <li>{{bug(647423)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/__definesetter__/index.html b/files/ru/web/javascript/reference/global_objects/object/__definesetter__/index.html
new file mode 100644
index 0000000000..4d93278a6d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/__definesetter__/index.html
@@ -0,0 +1,132 @@
+---
+title: Object.prototype.__defineSetter__()
+slug: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/__defineSetter__
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>__defineSetter__()</code></strong> привязывает свойство объекта к функции, вызываемой каждый раз при попытке установить значение этого свойства.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__defineSetter__(<var>prop</var>, <var>fun</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Строка, содержащая имя свойства, привязываемого к заданной функции.</dd>
+ <dt><code>fun</code></dt>
+ <dd>Функция, вызываемая при попытке установить значение указанному свойству. Эта функция имеет вид:</dd>
+ <dd>
+ <pre>function(<var>val</var>) { . . . }</pre>
+ <dl>
+ <dt><code>val</code></dt>
+ <dd>Псевдоним переменной, содержащей значение, которое пытаются присвоить свойству <code>prop</code>.</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>__defineSetter__()</code> позволяет определять {{jsxref("Operators/set", "сеттер", "", 1)}} на уже существующем объекте.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">// Нестандартный и устаревший способ
+
+var o = {};
+o.__defineSetter__('value', function(val) { this.anotherValue = val; });
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+
+
+// Способ, совместимый со стандартом
+
+// Использование оператора set
+var o = { set value(val) { this.anotherValue = val; } };
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+
+// Использование метода Object.defineProperty()
+var o = {};
+Object.defineProperty(o, 'value', {
+ set: function(val) {
+ this.anotherValue = val;
+ }
+});
+o.value = 5;
+console.log(o.value); // undefined
+console.log(o.anotherValue); // 5
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.__defineGetter__()")}}</li>
+ <li>оператор {{jsxref("Operators/set", "set")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.prototype.__lookupGetter__()")}}</li>
+ <li>{{jsxref("Object.prototype.__lookupSetter__()")}}</li>
+ <li><a href="ru/docs/Web/JavaScript/Guide_ru/Working_with_Objects#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B3.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2_.D0.B8_.D1.81.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2">Руководство по JS: определение геттеров и сеттеров</a></li>
+ <li><a href="http://whereswalden.com/2010/04/16/more-spidermonkey-changes-ancient-esoteric-very-rarely-used-syntax-for-creating-getters-and-setters-is-being-removed/">[Запись в блоге] Устаревание __defineGetter__ и __defineSetter__</a> (англ.)</li>
+ <li>{{bug(647423)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/__lookupgetter__/index.html b/files/ru/web/javascript/reference/global_objects/object/__lookupgetter__/index.html
new file mode 100644
index 0000000000..c08c8d1dde
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/__lookupgetter__/index.html
@@ -0,0 +1,110 @@
+---
+title: Object.prototype.__lookupGetter__()
+slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupGetter__
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>__lookupGetter__()</code></strong> возвращает функцию, привязанную к геттеру указанного свойства.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__lookupGetter__(<var>sprop</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>sprop</code></dt>
+ <dd>Строка, содержащая имя свойства, чей геттер должен быть возвращён.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если для свойства объекта был определён геттер, то на него невозможно сослаться через это свойство, поскольку оно ссылается на возвращаемое значение геттера. Метод <code>__lookupGetter__()</code> может использоваться для получения ссылки на геттер.</p>
+<p>Сегодня это возможно сделать стандартным способом через {{jsxref("Object.getOwnPropertyDescriptor()")}} и {{jsxref("Object.getPrototypeOf()")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">var obj = {
+ get foo() {
+ return Math.random() &gt; 0.5 ? 'foo' : 'bar';
+ }
+};
+
+
+// Нестандартный и устаревший способ
+obj.__lookupGetter__('foo');
+// (function() { return Math.random() &gt; 0.5 ? 'foo' : 'bar'; })
+
+
+// Способ, совместимый со стандартом
+Object.getOwnPropertyDescriptor(obj, 'foo').get;
+// (function() { return Math.random() &gt; 0.5 ? 'foo' : 'bar'; })
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.__lookupSetter__()")}}</li>
+ <li>оператор {{jsxref("Operators/get", "get")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyDescriptor()")}} и {{jsxref("Object.getPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.prototype.__defineGetter__()")}}</li>
+ <li>{{jsxref("Object.prototype.__defineSetter__()")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide_ru/Working_with_Objects#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B3.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2_.D0.B8_.D1.81.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2">Руководство по JS: определение геттеров и сеттеров</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/__lookupsetter__/index.html b/files/ru/web/javascript/reference/global_objects/object/__lookupsetter__/index.html
new file mode 100644
index 0000000000..1d9f91bf11
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/__lookupsetter__/index.html
@@ -0,0 +1,110 @@
+---
+title: Object.prototype.__lookupSetter__()
+slug: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/__lookupSetter__
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>__lookupSetter__()</code></strong> возвращает функцию, привязанную к сеттеру указанного свойства.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__lookupSetter__(<var>sprop</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>sprop</code></dt>
+ <dd>Строка, содержащая имя свойства, чей сеттер должен быть возвращён.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Если для свойства объекта был определён сеттер, то на него невозможно сослаться через это свойство, поскольку оно ссылается на возвращаемое значение сеттера. Метод <code>__lookupSetter__()</code> может использоваться для получения ссылки на сеттер.</p>
+<p>Сегодня это возможно сделать стандартным способом через {{jsxref("Object.getOwnPropertyDescriptor()")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">var obj = {
+ set foo(value) {
+ return this.bar = value;
+ }
+};
+
+
+// Нестандартный и устаревший способ
+obj.__lookupSetter__('foo')
+// (function(value) { this.bar = value; })
+
+
+// Способ, совместимый со стандартом
+Object.getOwnPropertyDescriptor(obj, 'foo').set;
+// (function(value) { this.bar = value; })
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.__lookupGetter__()")}}</li>
+ <li>оператор {{jsxref("Operators/set", "set")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyDescriptor()")}} и {{jsxref("Object.getPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.prototype.__defineGetter__()")}}</li>
+ <li>{{jsxref("Object.prototype.__defineSetter__()")}}</li>
+ <li><a href="ru/docs/Web/JavaScript/Guide_ru/Working_with_Objects#.D0.9E.D0.BF.D1.80.D0.B5.D0.B4.D0.B5.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.B3.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2_.D0.B8_.D1.81.D0.B5.D1.82.D1.82.D0.B5.D1.80.D0.BE.D0.B2">Руководство по JS: определение геттеров и сеттеров</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/assign/index.html b/files/ru/web/javascript/reference/global_objects/object/assign/index.html
new file mode 100644
index 0000000000..f4c222cc26
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/assign/index.html
@@ -0,0 +1,216 @@
+---
+title: Object.assign()
+slug: Web/JavaScript/Reference/Global_Objects/Object/assign
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/assign
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Object.assign()</strong></code> используется для копирования значений всех собственных перечисляемых свойств из одного или более исходных объектов в целевой объект. После копирования он возвращает целевой объект.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.assign(<var>target</var>, ...<var>sources</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Целевой объект.</dd>
+ <dt><code>sources</code></dt>
+ <dd>Исходные объекты.</dd>
+</dl>
+
+<h3 id="Return_value" name="Return_value">Возвращаемое значение</h3>
+
+<p>Возвращается получившийся целевой объект.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Object.assign()</code> копирует из исходных объектов в целевой объект только <em>перечисляемые</em> и <em>собственные</em> свойства. Он использует внутренний метод <code>[[Get]]</code> на исходных объектах и внутренний метод <code>[[Set]]</code> на целевом объекте, так что он также вызывает геттеры и сеттеры. Именно поэтому он <em>присваивает</em> свойства вместо простого копирования или определения новых свойств. Это поведение может сделать метод непригодным для вливания новых свойств в прототип, если вливаемые исходные объекты содержат геттеры. Вместо него для копирования в прототипы определений свойств, включая признак их перечисляемости, следует использовать методы {{jsxref("Object.getOwnPropertyDescriptor()")}} и {{jsxref("Object.defineProperty()")}}.</p>
+
+<p>Копируются свойства типов как {{jsxref("String")}}, так и {{jsxref("Symbol")}}.</p>
+
+<p>В случае возникновения ошибки, например, когда свойство является незаписываемым, возбуждается исключение {{jsxref("TypeError")}}, а целевой объект <code>target</code> остаётся неизменным.</p>
+
+<p>Обратите внимание, что метод <code>Object.assign()</code> не выкидывает исключения, если в качестве исходных значений выступают {{jsxref("null")}} или {{jsxref("undefined")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Cloning_an_object" name="Example:_Cloning_an_object">Пример: клонирование объекта</h3>
+
+<pre class="brush: js">var obj = { a: 1 };
+var copy = Object.assign({}, obj);
+console.log(copy); // { a: 1 }
+</pre>
+
+<h3 id="Example:_Merging_objects" name="Example:_Merging_objects">Пример: слияние объектов</h3>
+
+<pre class="brush: js">var o1 = { a: 1 };
+var o2 = { b: 2 };
+var o3 = { c: 3 };
+
+var obj = Object.assign(o1, o2, o3);
+console.log(obj); // { a: 1, b: 2, c: 3 }
+console.log(o1); // { a: 1, b: 2, c: 3 }, изменился и сам целевой объект.
+</pre>
+
+<h3 id="Example:_Symbol_properties" name="Example:_Symbol_properties">Пример: копирование символьных свойств</h3>
+
+<pre class="brush: js">var o1 = { a: 1 };
+var o2 = { [Symbol('foo')]: 2 };
+
+var obj = Object.assign({}, o1, o2);
+console.log(obj); // { a: 1, [Symbol("foo")]: 2 }
+</pre>
+
+<h3 id="Example:_Only_own_enumerable_properties" name="Example:_Only_own_enumerable_properties">Пример: наследуемые и неперечисляемые свойства не копируются</h3>
+
+<pre class="brush: js">var obj = Object.create({ foo: 1 }, { // foo является унаследованным свойством.
+ bar: {
+ value: 2 // bar является неперечисляемым свойством.
+ },
+ baz: {
+ value: 3,
+ enumerable: true // baz является собственным перечисляемым свойством.
+ }
+});
+
+var copy = Object.assign({}, obj);
+console.log(copy); // { baz: 3 }
+</pre>
+
+<h3 id="Example:_Primitives" name="Example:_Primitives">Пример: примитивы оборачиваются в объекты</h3>
+
+<pre class="brush: js">var v1 = '123';
+var v2 = true;
+var v3 = 10;
+var v4 = Symbol('foo')
+
+var obj = Object.assign({}, v1, null, v2, undefined, v3, v4);
+// Примитивы будут обёрнуты, а null и undefined - проигнорированы.
+// Обратите внимание, что собственные перечисляемые свойства имеет только обёртка над строкой.
+console.log(obj); // { "0": "1", "1": "2", "2": "3" }
+</pre>
+
+<h3 id="Example:_Exceptions" name="Example:_Exceptions">Пример: исключения прерывают текущую задачу копирования</h3>
+
+<pre class="brush: js">var target = Object.defineProperty({}, 'foo', {
+ value: 1,
+ writable: false
+}); // target.foo является свойством только-для-чтения
+
+Object.assign(target, { bar: 2 }, { foo2: 3, foo: 3, foo3: 3 }, { baz: 4 });
+// TypeError: "foo" is read-only
+// При присваивании свойству target.foo выбрасывается исключение
+
+console.log(target.bar); // 2, первый исходный объект успешно скопировался.
+console.log(target.foo2); // 3, первое свойство второго исходного объекта успешно скопировалось.
+console.log(target.foo); // 1, здесь было выброшено исключение.
+console.log(target.foo3); // undefined, метод assign завершился, свойство foo3 не скопировалось.
+console.log(target.baz); // undefined, третий исходный объект так же не скопировался.
+</pre>
+
+<h3 id="Example:_Copy_accessors" name="Example:_Copy_accessors">Пример: копирование методов доступа</h3>
+
+<pre class="brush: js">var obj = {
+ foo: 1,
+ get bar() {
+ return 2;
+ }
+};
+
+var copy = Object.assign({}, obj);
+console.log(copy);
+// { foo: 1, bar: 2 }, значением свойства copy.bar является значение, возвращаемое геттером obj.bar.
+
+// Такой вариант функции присваивания позволяет копировать методы доступа.
+function myAssign(target, ...sources) {
+ sources.forEach(source =&gt; {
+ Object.defineProperties(target, Object.keys(source).reduce((descriptors, key) =&gt; {
+ descriptors[key] = Object.getOwnPropertyDescriptor(source, key);
+ return descriptors;
+ }, {}));
+ });
+ return target;
+}
+
+var copy = myAssign({}, obj);
+console.log(copy);
+// { foo:1, get bar() { return 2 } }
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот полифилл не поддерживает символьные свойства, поскольку ES5 всё равно не поддерживает символы:</p>
+
+<pre class="brush: js">if (!Object.assign) {
+ Object.defineProperty(Object, 'assign', {
+ enumerable: false,
+ configurable: true,
+ writable: true,
+ value: function(target, firstSource) {
+ 'use strict';
+ if (target === undefined || target === null) {
+ throw new TypeError('Cannot convert first argument to object');
+ }
+
+ var to = Object(target);
+ for (var i = 1; i &lt; arguments.length; i++) {
+ var nextSource = arguments[i];
+ if (nextSource === undefined || nextSource === null) {
+ continue;
+ }
+
+ var keysArray = Object.keys(Object(nextSource));
+ for (var nextIndex = 0, len = keysArray.length; nextIndex &lt; len; nextIndex++) {
+ var nextKey = keysArray[nextIndex];
+ var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
+ if (desc !== undefined &amp;&amp; desc.enumerable) {
+ to[nextKey] = nextSource[nextKey];
+ }
+ }
+ }
+ return to;
+ }
+ });
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.assign', 'Object.assign')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div> </div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Object.assign")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.defineProperties()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/constructor/index.html b/files/ru/web/javascript/reference/global_objects/object/constructor/index.html
new file mode 100644
index 0000000000..4db5ef3987
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/constructor/index.html
@@ -0,0 +1,173 @@
+---
+title: Object.prototype.constructor
+slug: Web/JavaScript/Reference/Global_Objects/Object/constructor
+tags:
+ - JavaScript
+ - Object
+ - Property
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Возвращает ссылку на функцию {{jsxref("Global_Objects/Object", "Object")}}, создавшую прототип экземпляра. Обратите внимание, что значение этого свойства является ссылкой на саму функцию, а не строкой, содержащей имя функции. Для примитивных значений, вроде <code>1</code>, <code>true</code> или <code>"test"</code>, значение доступно только для чтения.</p>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все объекты наследуют свойство <code>constructor</code> из своего прототипа:</p>
+<pre class="brush: js">var o = {};
+o.constructor === Object; // true
+
+var a = [];
+a.constructor === Array; // true
+
+var n = new Number(3);
+n.constructor === Number; // true
+</pre>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<h3 id="Example:_Displaying_the_constructor_of_an_object" name="Example:_Displaying_the_constructor_of_an_object">Пример: отображение конструктора объекта</h3>
+<p>В следующем примере создаётся прототип <code>Tree</code> и объект этого типа <code>theTree</code>. Затем в примере отображается свойство <code>constructor</code> объекта <code>theTree</code>.</p>
+<pre class="brush: js">function Tree(name) {
+ this.name = name;
+}
+
+var theTree = new Tree("Красное дерево");
+console.log("theTree.constructor равен " + theTree.constructor);
+</pre>
+<p>Вывод примера будет следующим:</p>
+<pre class="brush: js">theTree.constructor равен function Tree(name) {
+ this.name = name;
+}
+</pre>
+<h3 id="Example:_Changing_the_constructor_of_an_object" name="Example:_Changing_the_constructor_of_an_object">Пример: изменение конструктора объекта</h3>
+<p>Следующий пример показывает, как изменить конструктор значений общих объектов. Не затрагиваются только значения <code>true</code>, <code>1</code> и <code>"тест"</code>, поскольку они имеют родные конструкторы только для чтения. Этот пример показывает, что полагаться на свойство <code>constructor</code> объекта не всегда безопасно.</p>
+<pre class="brush: js">function Type() {}
+
+var types = [
+ new Array(),
+ [],
+ new Boolean(),
+ true, // останется неизменным
+ new Date(),
+ new Error(),
+ new Function(),
+ function() {},
+ Math,
+ new Number(),
+ 1, // останется неизменным
+ new Object(),
+ {},
+ new RegExp(),
+ /(?:)/,
+ new String(),
+ 'тест' // останется неизменным
+];
+
+for (var i = 0; i &lt; types.length; i++) {
+ types[i].constructor = Type;
+ types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
+}
+
+console.log(types.join('\n'));
+</pre>
+<p>Вывод примера будет следующим:</p>
+<pre class="brush: js">function Type() {},false,
+function Type() {},false,
+function Type() {},false,false
+function Boolean() {
+ [native code]
+},false,true
+function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600
+function Type() {},false,Error
+function Type() {},false,function anonymous() {
+
+}
+function Type() {},false,function () {}
+function Type() {},false,[object Math]
+function Type() {},false,0
+function Number() {
+ [native code]
+},false,1
+function Type() {},false,[object Object]
+function Type() {},false,[object Object]
+function Type() {},false,/(?:)/
+function Type() {},false,/(?:)/
+function Type() {},false,
+function String() {
+ [native code]
+},false,тест
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.1', 'Object.prototype.constructor')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p> </p>
diff --git a/files/ru/web/javascript/reference/global_objects/object/count/index.html b/files/ru/web/javascript/reference/global_objects/object/count/index.html
new file mode 100644
index 0000000000..7308b40b0f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/count/index.html
@@ -0,0 +1,83 @@
+---
+title: Object.prototype.__count__
+slug: Web/JavaScript/Reference/Global_Objects/Object/count
+tags:
+ - JavaScript
+ - Object
+ - Obsolete
+ - Property
+ - Prototype
+ - Reference
+translation_of: Archive/Web/JavaScript/Object.count
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{obsolete_header("2")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>__count__</code></strong> использовалось для хранения количества перечисляемых свойств объекта, но было удалено.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__count__</code></pre>
+
+<h2 id="Description" name="Description">Пример</h2>
+<pre class="brush: js">{ 1: 1 }.__count__ // 1
+[].__count__ // 0
+[1].__count__ // 1
+[1, /* дыра */, 2, 3].__count__ // 3
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a class="external" href="http://whereswalden.com/2010/04/06/more-changes-coming-to-spidermonkey-the-magical-__count__-property-of-objects-is-being-removed/">[Запись в блоге] В SpiderMonkey грядут большие изменения: магическое свойство __count__ будет удалено</a> (англ.)</li>
+</ul>
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
new file mode 100644
index 0000000000..d17862e00d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/create/index.html
@@ -0,0 +1,240 @@
+---
+title: Object.create()
+slug: Web/JavaScript/Reference/Global_Objects/Object/create
+tags:
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/create
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Object.create()</strong></code> создаёт новый объект с указанным прототипом и свойствами.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>Object.create(<var>proto</var>[, <var>propertiesObject</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>proto</code></dt>
+ <dd>Объект, который станет прототипом вновь созданного объекта.</dd>
+ <dt><code>propertiesObject</code></dt>
+ <dd>Необязательный параметр. Если указан и не равен {{jsxref("Global_Objects/undefined", "undefined")}}, должен быть объектом, чьи собственные перечисляемые свойства (то есть такие, которые определены на самом объекте, а не унаследованы по цепочке прототипов) указывают дескрипторы свойств, добавляемых в новый объект. Имена добавляемых свойств совпадают с именами свойств в этом объекте. Эти свойства соответствуют второму аргументу метода {{jsxref("Object.defineProperties()")}}.</dd>
+</dl>
+
+<h3 id="Возвращаемые_значения">Возвращаемые значения</h3>
+
+<p>Новый объект с заданным прототипом и свойствами</p>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<p>Выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}, если параметр <code>proto</code> не является {{jsxref("Global_Objects/null", "null")}} или объектом (исключение составляют объекты-обертки примитивных типов).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example.3A_Classical_inheritance_with_Object.create" name="Example.3A_Classical_inheritance_with_Object.create()">Пример: классическое наследование с <code>Object.create()</code></h3>
+
+<p>Ниже показан пример использования <code>Object.create()</code> для имитации классического наследования. Это пример одиночного наследования, поскольку только его поддерживает JavaScript.</p>
+
+<pre class="brush: js notranslate">// Shape — суперкласс
+function Shape() {
+ this.x = 0;
+ this.y = 0;
+}
+
+// метод суперкласса
+Shape.prototype.move = function(x, y) {
+ this.x += x;
+ this.y += y;
+ console.info('Фигура переместилась.');
+};
+
+// Rectangle — подкласс
+function Rectangle() {
+ Shape.call(this); // вызываем конструктор суперкласса
+}
+
+// подкласс расширяет суперкласс
+Rectangle.prototype = Object.create(Shape.prototype);
+Rectangle.prototype.constructor = Rectangle;
+
+var rect = new Rectangle();
+
+console.log('Является ли rect экземпляром Rectangle? ' + (rect instanceof Rectangle)); // true
+console.log('Является ли rect экземпляром Shape? ' + (rect instanceof Shape)); // true
+rect.move(1, 1); // выведет 'Фигура переместилась.'
+</pre>
+
+<p>Если вы хотите унаследоваться от нескольких объектов, то это возможно сделать при помощи примесей.</p>
+
+<pre class="brush: js notranslate">function MyClass() {
+ SuperClass.call(this);
+ OtherSuperClass.call(this);
+}
+
+MyClass.prototype = Object.create(SuperClass.prototype); // наследование
+mixin(MyClass.prototype, OtherSuperClass.prototype); // примешивание
+
+MyClass.prototype.myMethod = function() {
+ // что-то делаем
+};
+</pre>
+
+<p>Функция примешивания должна копировать функции из прототипа суперкласса в прототип подкласса, она должна предоставляться пользователем. Примером примеси может служить функция <a href="http://api.jquery.com/jQuery.extend/">jQuery.extend()</a>.</p>
+
+<h3 id="Example.3A_Using_propertiesObject_argument_with_Object.create" name="Example.3A_Using_propertiesObject_argument_with_Object.create()">Пример: использование аргумента <code>propertiesObject</code> с <code>Object.create()</code></h3>
+
+<pre class="brush: js notranslate">var o;
+
+// создаём объект с нулевым прототипом
+o = Object.create(null);
+
+
+o = {};
+// эквивалентно этому:
+o = Object.create(Object.prototype);
+
+
+// В этом примере мы создаём объект с несколькими свойствами.
+// (Обратите внимание, что второй параметр отображает ключи на *дескрипторы свойств*.)
+o = Object.create(Object.prototype, {
+ // foo является рядовым 'свойством-значением'
+ foo: { writable: true, configurable: true, value: 'привет' },
+ // bar является свойством с геттером и сеттером (свойством доступа)
+ bar: {
+ configurable: false,
+ get: function() { return 10; },
+ set: function(value) { console.log('Установка `o.bar` в', value); }
+/* при использовании методов доступа ES5 наш код мог бы выглядеть так:
+ get function() { return 10; },
+ set function(value) { console.log('Установка `o.bar` в', value); } */
+ }
+});
+
+
+function Constructor() {}
+o = new Constructor();
+// эквивалентно этому:
+o = Object.create(Constructor.prototype);
+// Конечно, если бы в функции Constructor был бы реальный код инициализации,
+// метод с Object.create() не был бы эквивалентным
+
+
+// создаём новый объект, чей прототип является новым пустым объектом
+// и добавляем простое свойство 'p' со значением 42
+o = Object.create({}, { p: { value: 42 } });
+
+// по умолчанию свойства НЕ ЯВЛЯЮТСЯ записываемыми, перечисляемыми или настраиваемыми:
+o.p = 24;
+o.p;
+// 42
+
+o.q = 12;
+for (var prop in o) {
+ console.log(prop);
+}
+// 'q'
+
+delete o.p;
+// false
+
+// для определения свойства ES3
+o2 = Object.create({}, {
+ p: {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+});
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Для этого полифилла необходима правильно работающая Object.prototype.hasOwnProperty.</p>
+
+<pre class="brush: js notranslate">if (typeof Object.create != 'function') {
+ // Этапы производства ECMA-262, издание 5, 15.2.3.5
+ // Ссылка: http://es5.github.io/#x15.2.3.5
+ Object.create = (function() {
+  // Чтобы сэкономить память, используйте общий конструктор
+ function Temp() {}
+
+  // делает безопасную ссылку на Object.prototype.hasOwnProperty
+  var hasOwn = Object.prototype.hasOwnProperty;
+
+ return function (O) {
+  // 1. Если Type(O) не является Object or Null выдается исключениеTypeError.
+ if (typeof O != 'object') {
+ throw TypeError('Object prototype may only be an Object or null');
+ }
+
+  // 2. Пусть obj будет результатом создания нового объекта, как если бы
+  // выражение new Object(), где Object является стандартным встроенным
+  // конструктором с таким именем
+  // 3. Установите для внутреннего свойства [[Prototype]] объекта obj значение O.
+ Temp.prototype = O;
+ var obj = new Temp();
+ Temp.prototype = null; // Давайте не будем держать случайные ссылки на О...
+
+  // 4.  Если аргумент Properties присутствует и не определен, добавляем
+  // собственные свойства к obj, как будто вызывая стандартную встроенную
+  // функцию Object.defineProperties с аргументами obj и
+  // Properties.
+  if (arguments.length &gt; 1) {
+  // Object.defineProperties делает ToObject своим первым аргументом.
+  var Properties = Object(arguments[1]);
+  for (var prop in Properties) {
+  if (hasOwn.call(Properties, prop)) {
+  obj[prop] = Properties[prop];
+  }
+  }
+  }
+
+  // 5. Возращает obj
+ return obj;
+ };
+ })();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.create', 'Object.create')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.create")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.defineProperties()")}}</li>
+ <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li>
+ <li>Запись в блоге Джона Резига о <a href="http://ejohn.org/blog/objectgetprototypeof/">getPrototypeOf()</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/defineproperties/index.html b/files/ru/web/javascript/reference/global_objects/object/defineproperties/index.html
new file mode 100644
index 0000000000..30e95e65a1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/defineproperties/index.html
@@ -0,0 +1,236 @@
+---
+title: Object.defineProperties()
+slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperties
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperties
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Object.defineProperties()</strong></code> определяет новые или изменяет существующие свойства, непосредственно на объекте, возвращая этот объект.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.defineProperties(<var>obj</var>, <var>props</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, на котором определяются новые или изменяются существующие свойства.</dd>
+ <dt><code>props</code></dt>
+ <dd>Объект, чьи собственные перечисляемые свойства представляют собой дескрипторы для создаваемых или изменяемых свойств. Дескрипторы свойств обладают следующими дополнительными ключами:
+ <dl>
+ <dt><code>configurable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если тип этого дескриптора свойства может быть изменён и если свойство может быть удалено из содержащего его объекта.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+ <dt><code>enumerable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если это свойство можно увидеть через перечисление свойств содержащего его объекта.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+ <dt><code>value</code></dt>
+ <dd>Значение, ассоциированное со свойством. Может быть любым допустимым значением JavaScript (числом, объектом, функцией и т.д.).<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+ <dt><code>writable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если значение, ассоциированное со свойством, может быть изменено с помощью {{jsxref("Operators/Assignment_Operators", "оператора присваивания", "", 1)}}.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+ <dt><code>get</code></dt>
+ <dd>Функция, используемая как геттер свойства, либо {{jsxref("Global_Objects/undefined", "undefined")}}, если свойство не имеет геттера. Возвращаемое значение функции будет использоваться как значение свойства.<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+ <dt><code>set</code></dt>
+ <dd>Функция, используемая как сеттер свойства, либо {{jsxref("Global_Objects/undefined", "undefined")}}, если свойство не имеет сеттера. Функция принимает единственным аргументом новое значение, присваиваемое свойству.<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+ <p>Объект, переданный в функцию.</p>
+ </dt>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Object.defineProperties()</code>, по сути, определяет все свойства, соответствующие собственным свойствам объекта <code>props</code>, на объекте <code>obj</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Object.defineProperties(obj, {
+ 'property1': {
+ value: true,
+ writable: true
+ },
+ 'property2': {
+ value: 'Hello',
+ writable: false
+ }
+ // и т.д.
+});
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Предполагается, что среда выполнения осталась нетронутой, все имена и свойства ссылаются на свои изначальные значения. Оригинальный метод <code>Object.defineProperties</code> почти полностью эквивалентен (смотрите комментарий в функции <code>isCallable</code>) следующей реализации на JavaScript:</p>
+
+<pre class="brush: js; highlight: [8];">function defineProperties(obj, properties) {
+ function convertToDescriptor(desc) {
+ function hasProperty(obj, prop) {
+ return Object.prototype.hasOwnProperty.call(obj, prop);
+ }
+
+ function isCallable(v) {
+ // NB: изменить при необходимости считать вызываемым что-то ещё, кроме функций.
+ return typeof v === 'function';
+ }
+
+ if (typeof desc !== 'object' || desc === null) {
+ throw new TypeError('bad desc');
+ }
+
+ var d = {};
+
+ if (hasProperty(desc, 'enumerable')) {
+ d.enumerable = !!obj.enumerable;
+ }
+ if (hasProperty(desc, 'configurable')) {
+ d.configurable = !!obj.configurable;
+ }
+ if (hasProperty(desc, 'value')) {
+ d.value = obj.value;
+ }
+ if (hasProperty(desc, 'writable')) {
+ d.writable = !!desc.writable;
+ }
+ if (hasProperty(desc, 'get')) {
+ var g = desc.get;
+
+ if (!isCallable(g) &amp;&amp; g !== 'undefined') {
+ throw new TypeError('bad get');
+ }
+ d.get = g;
+ }
+ if (hasProperty(desc, 'set')) {
+ var s = desc.set;
+ if (!isCallable(s) &amp;&amp; s !== 'undefined') {
+ throw new TypeError('bad set');
+ }
+ d.set = s;
+ }
+
+ if (('get' in d || 'set' in d) &amp;&amp; ('value' in d || 'writable' in d)) {
+ throw new TypeError('identity-confused descriptor');
+ }
+
+ return d;
+ }
+
+ if (typeof obj !== 'object' || obj === null) {
+ throw new TypeError('bad obj');
+ }
+
+ properties = Object(properties);
+
+ var keys = Object.keys(properties);
+ var descs = [];
+
+ for (var i = 0; i &lt; keys.length; i++) {
+ descs.push([keys[i], convertToDescriptor(properties[keys[i]])]);
+ }
+
+ for (var i = 0; i &lt; descs.length; i++) {
+ Object.defineProperty(obj, descs[i][0], descs[i][1]);
+ }
+
+ return obj;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.7', 'Object.defineProperties')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.defineproperties', 'Object.defineProperties')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Firefox (Gecko)</th>
+ <th>Chrome</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>{{CompatChrome("5")}} (предыдущие версии не проверялись)</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("11.60")}}</td>
+ <td>{{CompatSafari("5")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>Android</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatGeckoMobile("2")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOperaMobile("11.50")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html b/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html
new file mode 100644
index 0000000000..41accdbee2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/defineproperty/index.html
@@ -0,0 +1,399 @@
+---
+title: Object.defineProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Object/defineProperty
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/defineProperty
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Object.defineProperty()</strong></code> определяет новое или изменяет существующее свойство непосредственно на объекте, возвращая этот объект.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.defineProperty(<var>obj</var>, <var>prop</var>, <var>descriptor</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, на котором определяется свойство.</dd>
+ <dt><code>prop</code></dt>
+ <dd>Имя определяемого или изменяемого свойства.</dd>
+ <dt><code>descriptor</code></dt>
+ <dd>Дескриптор определяемого или изменяемого свойства.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод позволяет точно добавлять или изменять свойства объекта. Обычное добавление свойств через присваивание создаёт свойства, которые можно увидеть через перечисление свойств (с помощью цикла {{jsxref("Statements/for...in", "for...in")}} или метода {{jsxref("Object.keys")}}), чьи значения могут быть изменены и которые могут быть {{jsxref("Operators/delete", "удалены", "", 1)}}. Этот же метод позволяет настроить эти дополнительные детали свойства.</p>
+
+<p>Дескрипторы свойств, присутствующие в объектах, бывают двух основных типов: дескрипторы данных и дескрипторы доступа. <em><dfn>Дескриптор данных</dfn></em> — это свойство, имеющее значение, которое может быть (а может и не быть) записываемым. <em><dfn>Дескриптор доступа</dfn></em> — это свойство, описываемое парой функций — геттером и сеттером. Дескриптор может быть только чем-то одним из этих двух типов; он не может быть одновременно обоими.</p>
+
+<p>И дескриптор данных, и дескриптор доступа являются объектами. Они обладают следующими обязательными ключами:</p>
+
+<dl>
+ <dt><code>configurable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если тип этого дескриптора свойства может быть изменён и если свойство может быть удалено из содержащего его объекта.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+ <dt><code>enumerable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если это свойство можно увидеть через перечисление свойств содержащего его объекта.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+</dl>
+
+<p>Дескриптор данных также может содержать следующие дополнительные ключи:</p>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, ассоциированное со свойством. Может быть любым допустимым значением JavaScript (числом, объектом, функцией и т.д.).<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+ <dt><code>writable</code></dt>
+ <dd>Равен <code>true</code> только в том случае, если значение, ассоциированное со свойством, может быть изменено с помощью {{jsxref("Operators/Assignment_Operators", "оператора присваивания", "", 1)}}.<br>
+ <strong>Значение по умолчанию установлено в <code>false</code>.</strong></dd>
+</dl>
+
+<p>Дескриптор доступа также может содержать следующие дополнительные ключи:</p>
+
+<dl>
+ <dt><code>get</code></dt>
+ <dd>Функция, используемая как геттер свойства, либо {{jsxref("Global_Objects/undefined", "undefined")}}, если свойство не имеет геттера. Возвращаемое значение функции будет использоваться как значение свойства.<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+ <dt><code>set</code></dt>
+ <dd>Функция, используемая как сеттер свойства, либо {{jsxref("Global_Objects/undefined", "undefined")}}, если свойство не имеет сеттера. Функция принимает единственным аргументом новое значение, присваиваемое свойству.<br>
+ <strong>Значение по умолчанию установлено в {{jsxref("Global_Objects/undefined", "undefined")}}.</strong></dd>
+</dl>
+
+<p>Имейте в виду, что эти ключи не обязательно должны принадлежать самому дескриптору свойства, если они унаследованы, они так же будут приниматься во внимание. Для сохранения этих ключей по умолчанию неизменными, вы можете заранее заморозить {{jsxref("Object.prototype")}}, явно определив все ключи, либо установить свойство {{jsxref("Object.prototype.__proto__", "__proto__")}} в {{jsxref("Global_Objects/null", "null")}}.</p>
+
+<pre class="brush:js">// Использование __proto__
+Object.defineProperty(obj, 'key', {
+ __proto__: null, // нет унаследованных свойств
+ value: 'static' // по умолчанию
+ // не перечисляется,
+ // не настраивается и
+ // не перезаписывается
+});
+
+// Явное определение свойства
+Object.defineProperty(obj, 'key', {
+ enumerable: false,
+ configurable: false,
+ writable: false,
+ value: 'static'
+});
+
+// Переиспользование одного и того же объекта
+function withValue(value) {
+ var d = withValue.d || (
+ withValue.d = {
+ enumerable: false,
+ writable: false,
+ configurable: false,
+ value: null
+ }
+ );
+ d.value = value;
+ return d;
+}
+// ... и ...
+Object.defineProperty(obj, 'key', withValue('static'));
+
+// Если доступен метод freeze, предотвращаем добавление свойств
+// value, get, set, enumerable, writable и configurable
+// к прототипу Object
+(Object.freeze || Object)(Object.prototype);
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Если вы хотите посмотреть, как использовать метод <code>Object.defineProperty()</code> с синтаксисом <em>похожим-на-бинарные-флаги</em>, смотрите <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty/Additional_examples">дополнительные примеры</a>.</p>
+
+<h3 id="Example:_Creating_a_property" name="Example:_Creating_a_property">Пример: создание свойства</h3>
+
+<p>Если указанное свойство не существует в объекте, метод <code>Object.defineProperty()</code> создаст новое свойство по переданному описанию. Поля в дескрипторе могут быть опущены, в этом случае их значения будут значениями по умолчанию. Все логические поля будут по-умолчанию установлены в <code>false</code>. Поля <code>value</code>, <code>get</code> и <code>set</code> по умолчанию будут установлены в {{jsxref("Global_Objects/undefined", "undefined")}}. Свойство, определённое без атрибутов <code>get</code>/<code>set</code>/<code>value</code>/<code>writable</code> называется «общим», а дескриптор данных — «типовым».</p>
+
+<pre class="brush: js">var o = {}; // Создаём новый объект
+
+// Пример добавления свойства к объекту через defineProperty()
+// с дескриптором данных
+Object.defineProperty(o, 'a', {
+ value: 37,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+// Свойство 'a' существует в объекте o и имеет значение, равное 37
+
+// Пример добавления свойства к объекту через defineProperty()
+// с дескриптором доступа
+var bValue = 38;
+Object.defineProperty(o, 'b', {
+ get: function() { return bValue; },
+ set: function(newValue) { bValue = newValue; },
+ enumerable: true,
+ configurable: true
+});
+o.b; // 38
+// Свойство 'b' существует в объекте o и имеет значение, равное 38
+// Значение свойства o.b теперь идентично значению bValue до тех пор,
+// пока свойство o.b не будет переопределено
+
+// Вы не можете смешать два этих подхода:
+Object.defineProperty(o, 'conflict', {
+ value: 0x9f91102,
+ get: function() { return 0xdeadbeef; }
+});
+// Выкинет исключение TypeError: свойство value применимо только в
+// дескрипторах данных, свойство get применимо только в дескрипторах
+// доступа
+</pre>
+
+<h3 id="Example:_Modifying_a_property" name="Example:_Modifying_a_property">Пример: изменение свойства</h3>
+
+<p>Если свойство уже существует, метод <code>Object.defineProperty()</code> попытается изменить свойство в соответствии со значениями в дескрипторе и текущим состоянием объекта. Если у старого дескриптора атрибут <code>configurable</code> был установлен в <code>false</code> (говорит, что свойство является «ненастраиваемым»), то никакие атрибуты, кроме атрибута <code>writable</code>, не смогут быть изменены. В этом случае так же невозможно переключаться между типами дескрипторов.</p>
+
+<p>Если свойство является ненастраиваемым, его атрибут <code>writable</code> может быть изменён только на значение <code>false</code>.</p>
+
+<p>При попытке изменить ненастраиваемые атрибуты свойства будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} (кроме случая изменения атрибута <code>writable</code>), даже в том случае, если текущее и новое значения идентичны.</p>
+
+<h4 id="Writable_attribute" name="Writable_attribute">Атрибут <code>writable</code></h4>
+
+<p>Если атрибут <code>writable</code> свойства установлен в <code>false</code>, свойство становится «незаписываемым». Ему невозможно будет присвоить новое значение.</p>
+
+<pre class="brush: js">var o = {}; // Создаём новый объект
+
+Object.defineProperty(o, 'a', {
+ value : 37,
+ writable : false
+});
+
+console.log(o.a); // Выведет 37
+o.a = 25; // Исключение не будет выброшено (будет выброшено только в
+ // строгом режиме, даже если значение будет тем же самым)
+console.log(o.a); // Выведет 37. Присваивание не сработало.
+</pre>
+
+<p>Как видно в этом примере, попытка записи в незаписываемое свойство его не изменило, но и исключение так же не было выброшено.</p>
+
+<h4 id="Enumerable_attribute" name="Enumerable_attribute">Атрибут <code>enumerable</code></h4>
+
+<p>Атрибут <code>enumerable</code> свойства определяет, просматривается ли свойство в цикле {{jsxref("Statements/for...in", "for...in")}} и методом {{jsxref("Object.keys()")}} или нет.</p>
+
+<pre class="brush: js">var o = {};
+Object.defineProperty(o, 'a', { value: 1, enumerable: true });
+Object.defineProperty(o, 'b', { value: 2, enumerable: false });
+// Атрибут enumerable по умолчанию установлен в false
+Object.defineProperty(o, 'c', { value: 3 });
+
+o.d = 4; // При создании свойства путём присваивания, атрибут enumerable
+  // по умолчанию установливается в true
+
+for (var i in o) {
+ console.log(i);
+}
+// Выведет 'a' и 'd' (порядок вывода не определён)
+
+Object.keys(o); // ['a', 'd']
+
+o.propertyIsEnumerable('a'); // true
+o.propertyIsEnumerable('b'); // false
+o.propertyIsEnumerable('c'); // false
+</pre>
+
+<h4 id="Configurable_attribute" name="Configurable_attribute">Атрибут <code>configurable</code></h4>
+
+<p>Атрибут <code>configurable</code> одновременно контролирует, может ли свойство быть удалено из объекта и могут ли быть изменены его атрибуты (кроме контроля изменения атрибута <code>writable</code>).</p>
+
+<pre class="brush: js">var o = {};
+Object.defineProperty(o, 'a', {
+ get: function() { return 1; },
+ configurable: false
+});
+
+Object.defineProperty(o, 'a', { configurable: true }); // Выкинет TypeError
+Object.defineProperty(o, 'a', { enumerable: true }); // Выкинет TypeError
+Object.defineProperty(o, 'a', { set: function() {} }); // Выкинет TypeError (ранее свойство set дескриптора не было определено)
+Object.defineProperty(o, 'a', { get: function() { return 1; } }); // Выкинет TypeError (даже несмотря на то, что get делает то же, что и раньше)
+Object.defineProperty(o, 'a', { value: 12 }); // Выкинет TypeError
+
+console.log(o.a); // Выведет 1
+delete o.a; // Ничего не произойдёт
+console.log(o.a); // Выведет 1
+</pre>
+
+<p>Если бы атрибут <code>configurable</code> объекта <code>o.a</code> был установлен в <code>true</code>, никакие ошибки не были бы выброшены и в конце свойство было бы удалено.</p>
+
+<h3 id="Example:_Adding_properties_and_default_values" name="Example:_Adding_properties_and_default_values">Пример: добавление свойств и значений по умолчанию</h3>
+
+<p>Важно понимать, как устанавливаются значения по умолчанию атрибутам свойств. Часто существует разница между простым назначением значения посредством точечной нотации и использованием метода <code>Object.defineProperty()</code>, что и показывает пример ниже.</p>
+
+<pre class="brush: js">var o = {};
+
+o.a = 1;
+// Эквивалентно записи:
+Object.defineProperty(o, 'a', {
+ value: 1,
+ writable: true,
+ configurable: true,
+ enumerable: true
+});
+
+
+// С другой стороны,
+Object.defineProperty(o, 'a', { value: 1 });
+// эквивалентно записи:
+Object.defineProperty(o, 'a', {
+ value: 1,
+ writable: false,
+ configurable: false,
+ enumerable: false
+});
+</pre>
+
+<h3 id="Example:_Custom_setters_and_getters" name="Example:_Custom_setters_and_getters">Пример: пользовательские сеттеры и геттеры</h3>
+
+<p>Пример ниже показывает, как реализовать самоархивирующийся объект. При установке свойства <code>temperature</code> в массив <code>archive</code> попадает запись журнала.</p>
+
+<pre class="brush: js">function Archiver() {
+ var temperature = null;
+ var archive = [];
+
+ Object.defineProperty(this, 'temperature', {
+ get: function() {
+ console.log('get!');
+ return temperature;
+ },
+ set: function(value) {
+ temperature = value;
+ archive.push({ val: temperature });
+ }
+ });
+
+ this.getArchive = function() { return archive; };
+}
+
+var arc = new Archiver();
+arc.temperature; // 'get!'
+arc.temperature = 11;
+arc.temperature = 13;
+arc.getArchive(); // [{ val: 11 }, { val: 13 }]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.6', 'Object.defineProperty')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.defineproperty', 'Object.defineProperty')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Firefox (Gecko)</th>
+ <th>Chrome</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>{{CompatChrome("5")}} (предыдущие версии не проверялись)</td>
+ <td>{{CompatIE("9")}} ({{CompatIE("8")}}, но только на объектах DOM с нестандартным поведением. <a href="#Internet_Explorer_8_specific_notes">Подробности смотрите ниже</a>.)</td>
+ <td>{{CompatOpera("11.60")}}</td>
+ <td>{{CompatSafari("5.1")}} ({{CompatSafari("5")}}, кроме объектов DOM)</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>Android</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatGeckoMobile("2")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatIE("9")}} и выше</td>
+ <td>{{CompatOperaMobile("11.50")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h3 id="Redefining_the_length_property_of_an_Array_object" name="Redefining_the_length_property_of_an_Array_object">Переопределение свойства <code>length</code> на объекте <code>Array</code></h3>
+
+<p>На массивах возможно переопределить свойство {{jsxref("Array.length", "length")}}, при условии соблюдения обычных ограничений на переопределение. (Изначально свойство {{jsxref("Array.length", "length")}} является ненастраиваемым, неперечисляемым и записываемым. Таким образом, на неизменнённом массиве возможно изменить значение свойства {{jsxref("Array.length", "length")}} либо сделать его незаписываемым. Его перечисляемость или настраиваемость изменить нельзя, так же как и его записываемость, если оно сделано не записываемым.) Однако не все браузеры поддерживают такое переопределение.</p>
+
+<p>Firefox с версии 4 по версию 22 бросает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} на любую попытку (вне зависимости от того, разрешена ли она или нет) переопределить свойство {{jsxref("Array.length", "length")}} массива.</p>
+
+<p>Версии Chrome, реализующие метод <code>Object.defineProperty()</code>, в некоторых случаях игнорируют значение <code>length</code> отличное от текущего значения свойства {{jsxref("Array.length", "length")}} массива. В некоторых случаях изменение записываемости свойства просто не работает без каких-либо сообщений об ошибках (и выбрасываемых исключений). Также, в связи с вышесказанным, некоторые методы изменения массива, вроде метода {{jsxref("Array.prototype.push")}}, не обращают внимания на незаписываемое свойство {{jsxref("Array.length", "length")}}.</p>
+
+<p>Версии Safari, реализующие метод <code>Object.defineProperty()</code>, игнорируют значение <code>length</code>, отличное от текущего значения свойства {{jsxref("Array.length", "length")}} массива, и попытка изменить записываемость свойства выполнится без ошибок, но на самом деле записываемость свойства не изменится.</p>
+
+<p>Только Internet Explorer 9 и выше, а так же Firefox 23 и выше, по-видимому, полностью и правильно реализуют переопределение свойства {{jsxref("Array.length", "length")}} массивов. В настоящее время не стоит полагаться на работу переопределения свойства {{jsxref("Array.length", "length")}} массива, или что оно работает определённым образом. И даже если вы <em>можете</em> положиться на это, <a href="http://whereswalden.com/2013/08/05/new-in-firefox-23-the-length-property-of-an-array-can-be-made-non-writable-but-you-shouldnt-do-it/">есть действительно веская причина не делать этого</a>.</p>
+
+<h3 id="Internet_Explorer_8_specific_notes" name="Internet_Explorer_8_specific_notes">Примечания по Internet Explorer 8</h3>
+
+<p>Реализация метода <code>Object.defineProperty()</code> в Internet Explorer 8 предусматривает, что он может быть <a class="external" href="http://msdn.microsoft.com/en-us/library/dd229916%28VS.85%29.aspx">использован только для объектов DOM</a>. Нужно также отметить несколько моментов:</p>
+
+<ul>
+ <li>Попытка использовать <code>Object.defineProperty()</code> на родных объектах приведёт к ошибке.</li>
+ <li>Атрибуты свойств должны быть равны определённым значениям. Атрибуты <code>configurable</code>, <code>enumerable</code> и <code>writable</code> дескриптора данных должны содержать значения <code>true</code>, <code>true</code> и <code>true</code>, а атрибуты <code>configurable</code> и <code>enumerable</code> дескриптора доступа должны содержать значения <code>true</code> и <code>false</code> соответственно.(?) Любая попытка присвоить атрибутам другие значения приведёт к ошибке.</li>
+ <li>Для того, чтобы изменить конфигурацию свойства, сначала его нужно удалить. Если свойство не будет удалено, оно останется в том же виде, что и до попытки изменения его конфигурации.</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+ <li>{{jsxref("Object.defineProperties()")}}</li>
+ <li>{{jsxref("Object.propertyIsEnumerable()")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li>
+ <li>{{jsxref("Object.prototype.watch()")}}</li>
+ <li>{{jsxref("Object.prototype.unwatch()")}}</li>
+ <li>{{jsxref("Operators/get", "get")}}</li>
+ <li>{{jsxref("Operators/set", "set")}}</li>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty/Additional_examples">Дополнительные примеры по <code>Object.defineProperty()</code></a></li>
+</ul>
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
new file mode 100644
index 0000000000..505065970b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/entries/index.html
@@ -0,0 +1,121 @@
+---
+title: Object.entries()
+slug: Web/JavaScript/Reference/Global_Objects/Object/entries
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/entries
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Object.entries()</strong></code> метод возвращает массив собственных перечисляемых свойств указанного объекта в формате <code>[key, value]</code>, в том же порядке, что и в цикле {{jsxref("Statements/for...in", "for...in")}} (разница в том, что for-in перечисляет свойства из цепочки прототипов). Порядок элементов в массиве который возвращается <code><strong>Object.entries()</strong></code> не зависит от того как объект обьявлен. Если существует необходимость в определенном порядке, то  массив должен быть отсортирован до вызова метода, например <code>Object.entries(obj).sort((a, b) =&gt; a[0] - b[0]);</code>.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-entries.html")}}</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>Object.entries(<var>obj</var>)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чьи перечислимые свойства будут возвращены в виде массива <code>[key, value]</code>.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+ </dt>
+ <dd>Массив перечислений собственных свойств объекта с парами <code>[key, value]</code>.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Object.entries()</code> возвращает массив, элементами которого являются массивы, соответсвующие перечисляемому свойству пары <code>[key, value],</code> найденной прямо в <code>object</code>. Порядок свойств тот же, что и при прохождении циклом по свойствам объекта вручную.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js notranslate">var obj = { foo: "bar", baz: 42 };
+console.log(Object.entries(obj)); // [ ['foo', 'bar'], ['baz', 42] ]
+
+// массив как объект
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.entries(obj)); // [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ]
+
+// массив как объект c random сортировкой ключей
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.entries(an_obj)); // [ ['2', 'b'], ['7', 'c'], ['100', 'a'] ]
+
+// getFoo is property which isn't enumerable
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = "bar";
+console.log(Object.entries(my_obj)); // [ ['foo', 'bar'] ]
+
+// non-object argument will be coerced to an object
+console.log(Object.entries("foo")); // [ ['0', 'f'], ['1', 'o'], ['2', 'o'] ]</pre>
+
+<pre class="notranslate"><code>// returns an empty array for any primitive type, since primitives have no own properties
+console.log(Object.entries(100)); // [ ]
+
+// iterate through key-value gracefully
+const obj = { a: 5, b: 7, c: 9 };
+for (const [key, value] of Object.entries(obj)) {
+ console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
+}
+
+// Or, using array extras
+Object.entries(obj).forEach(([key, value]) =&gt; {
+ console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
+});</code></pre>
+
+<h3 id="Преобразование_Object_в_Map">Преобразование <code>Object</code> в <code>Map</code></h3>
+
+<p>Конструктор {{jsxref("Map", "new Map()")}} принимает повторение <em>значений</em>. С <code>Object.entries </code>вы легко можете преобразовать {{jsxref("Object")}} в {{jsxref("Map")}}:</p>
+
+<pre class="brush: js notranslate">var obj = { foo: "bar", baz: 42 };
+var map = new Map(Object.entries(obj));
+console.log(map); // Map { foo: "bar", baz: 42 }</pre>
+
+<h3 id="Итерация_по_Object">Итерация по <code>Object</code></h3>
+
+<p>Используя <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#%D0%A0%D0%B0%D0%B7%D0%B1%D0%BE%D1%80_%D0%BC%D0%B0%D1%81%D1%81%D0%B8%D0%B2%D0%BE%D0%B2">метод Разбора Массивов</a> Вы можете легко итерировать объекты.</p>
+
+<pre class="notranslate"><code>const obj = { foo: 'bar', baz: 42 };
+Object.entries(obj).forEach(([key, value]) =&gt; console.log(`${key}: ${value}`)); // "foo: bar", "baz: 42"</code></pre>
+
+<h2 id="Полифил">Полифил</h2>
+
+<p>Чтобы добавить поддержку <code>Object.entries</code> в более старых окружениях, которые не поддерживают его нативно, вы можете найти полифил в <a href="https://github.com/tc39/proposal-object-values-entries">tc39/proposal-object-values-entries</a> или <a href="https://github.com/es-shims/Object.entries">es-shims/Object.entries</a> репозиториях.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.entries', 'Object.entries')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Пока не включена в официальный проект. Смотрите это  <a href="https://github.com/tc39/proposal-object-values-entries">предложение stage3</a> для проекта текста текущей спецификации</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div>
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на извлечение.</div>
+
+<p>{{Compat("javascript.builtins.Object.entries")}}</p>
+</div>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">Enumerability and ownership of properties</a></li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li>{{jsxref("Object.values()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/eval/index.html b/files/ru/web/javascript/reference/global_objects/object/eval/index.html
new file mode 100644
index 0000000000..e6b8e3668f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/eval/index.html
@@ -0,0 +1,81 @@
+---
+title: Object.prototype.eval()
+slug: Web/JavaScript/Reference/Global_Objects/Object/eval
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Obsolete
+ - Prototype
+translation_of: Archive/Web/JavaScript/Object.eval
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}} {{obsolete_header}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>Object.eval()</strong></code> использовался для вычисления строки JavaScript-кода в контексте объекта, однако, был удалён.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.eval(<var>string</var>)</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt>
+ <code>string</code></dt>
+ <dd>
+ Любая строка, представляющая выражение, инструкцию или последовательность инструкций JavaScript. Выражение может содержать переменые и свойства существующих объектов.</dd>
+</dl>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>eval</code> больше не используется как метод объекта. Вместо него используйте глобальную функцию {{jsxref("Global_Objects/eval", "eval()")}}.</p>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Global_Objects/eval", "eval()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/freeze/index.html b/files/ru/web/javascript/reference/global_objects/object/freeze/index.html
new file mode 100644
index 0000000000..bd987a2915
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/freeze/index.html
@@ -0,0 +1,165 @@
+---
+title: Object.freeze()
+slug: Web/JavaScript/Reference/Global_Objects/Object/freeze
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/freeze
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<p>Метод <code><strong>Object.freeze()</strong></code> замораживает объект: это значит, что он предотвращает добавление новых свойств к объекту, удаление старых свойств из объекта и изменение существующих свойств или значения их атрибутов перечисляемости, настраиваемости и записываемости. В сущности, объект становится эффективно неизменным. Метод возвращает замороженный объект.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.freeze(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект для заморозки.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Замороженный объект</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>К замороженному объекту нельзя добавить никаких свойств, так же как и удалить свойства из замороженного объекта. Любые попытки сделать это потерпят неудачу, либо молча, либо выбросив исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} (как правило, но не обязательно, это происходит в {{jsxref("Functions_and_function_scope/Strict_mode", "строгом режиме", "", 1)}}).</p>
+
+<p>Значения свойств-данных не могут быть изменены. Свойства-доступы (геттеры и сеттеры) работают как положено (и всё ещё создают иллюзию, что вы изменили значение). Обратите внимание, что значения, являющиеся объектами, всё ещё могут быть изменены, если только они так же не были заморожены.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var obj = {
+ prop: function() {},
+ foo: 'bar'
+};
+
+// Можно добавлять новые свойства, существующие свойства можно изменять или удалять
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+// Оба объекта эквивалентны, а также возвращаемый объект будет заморожен.
+// Необязательно сохранять возвращаемый объект при заморозке оригинала.
+var o = Object.freeze(obj);
+
+o === obj; // true
+Object.isFrozen(obj); // === true;
+
+// Теперь все изменения будут заканчиваться с ошибкой
+obj.foo = 'quux'; // тихо ничего не делает
+obj.quaxxor = 'the friendly duck'; // тихо не добавляет свойство
+
+// ...а в строгом режиме такие попытки вызовут выброс исключения TypeError
+function fail() {
+ 'use strict';
+ obj.foo = 'sparky'; // выбросит TypeError
+ delete obj.quaxxor; // выбросит TypeError
+ obj.sparky = 'arf'; // выбросит TypeError
+}
+
+fail();
+
+// Попытки внести изменения через метод Object.defineProperty также выбросят исключение
+Object.defineProperty(obj, 'ohai', { value: 17 }); // выбросит TypeError
+Object.defineProperty(obj, 'foo', { value: 'eit' }); // выбросит TypeError
+</pre>
+
+<p>Следующий пример показывает, что значения-объекты в замороженном объекте могут быть изменены (заморозка неглубокая).</p>
+
+<pre class="brush: js">obj = {
+ internal: {}
+};
+
+Object.freeze(obj);
+obj.internal.a = 'значениеA';
+
+obj.internal.a // 'значениеA'
+
+// Чтобы сделать объект obj полностью неизменяемым, замораживаем каждый объект в объекте obj.
+// Для этого воспользуемся этой функцией.
+function deepFreeze(obj) {
+
+ // Получаем имена свойств из объекта obj
+ var propNames = Object.getOwnPropertyNames(obj);
+
+ // Замораживаем свойства для заморозки самого объекта
+ propNames.forEach(function(name) {
+ var prop = obj[name];
+
+ // Заморозка свойства prop, если оно объект
+ if (typeof prop == 'object' &amp;&amp; prop !== null)
+ deepFreeze(prop);
+ });
+
+ // Заморозить сам объект obj (ничего не произойдёт, если он уже заморожен)
+ return Object.freeze(obj);
+}
+
+obj2 = {
+ internal: {}
+};
+
+deepFreeze(obj2);
+obj2.internal.a = 'другоеЗначение';
+obj2.internal.a; // undefined
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5 если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES2015 такой аргумент будет рассматриваться, как простой замороженный объект и метод его просто вернёт.</p>
+
+<pre class="brush: js">&gt; Object.freeze(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.freeze(1)
+1 // код ES2015
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.9', 'Object.freeze')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-object.freeze', 'Object.freeze')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.freeze', 'Object.freeze')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.freeze")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.isFrozen()")}}</li>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+ <li>{{jsxref("Object.seal()")}}</li>
+ <li>{{jsxref("Object.isSealed()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..6935cd3ec6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/fromentries/index.html
@@ -0,0 +1,108 @@
+---
+title: Object.fromEntries()
+slug: Web/JavaScript/Reference/Global_Objects/Object/fromEntries
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/fromEntries
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Object.fromEntries()</strong></code> преобразует список пар ключ-значение в объект.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/object-fromentries.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на извлечение.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Object.fromEntries(<var>iterable</var>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Итерируемый объект, такой как {{jsxref("Array")}} или {{jsxref("Map")}} или другие объекты, реализующие <a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">iterable протокол</a>.</dd>
+</dl>
+
+<h3 id="Возращаемое_значение">Возращаемое значение</h3>
+
+<p>Новый объект, свойства которого задаются записями iterable.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>Object.fromEntries()</code> принимает список пар ключ-значение и возвращает новый объект, свойства которого задаются этими записями. Ожидается, что аргумент <em>iterable </em>будет объектом, который реализует метод <code>@@iterator</code>, который возращает объект итератора, который создает двуэлементный массивоподобный объект, первый элемент которого является значением, которое будет использоваться в качестве ключа свойства, а второй элемент — значением связанного с этим ключом свойства.</p>
+
+<p><code>Object.fromEntries()</code> выполняет процедуру, обратную {{jsxref("Object.entries()")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Преобразование_Map_в_Object">Преобразование <code>Map</code> в <code>Object</code></h3>
+
+<p>С <code>Object.fromEntries</code> вы можете преобразовать {{jsxref("Map")}} в {{jsxref("Object")}}:</p>
+
+<pre class="brush: js">const map = new Map([ ['foo', 'bar'], ['baz', 42] ]);
+const obj = Object.fromEntries(map);
+console.log(obj); // { foo: "bar", baz: 42 }
+</pre>
+
+<h3 id="Преобразование_Array_в_Object">Преобразование <code>Array</code> в <code>Object</code></h3>
+
+<p>С <code>Object.fromEntries</code> вы можете преобразовать {{jsxref("Array")}} в {{jsxref("Object")}}:</p>
+
+<pre class="brush: js">const arr = [ ['0', 'a'], ['1', 'b'], ['2', 'c'] ];
+const obj = Object.fromEntries(arr);
+console.log(obj); // { 0: "a", 1: "b", 2: "c" }
+</pre>
+
+<h3 id="Трансформации_объектов">Трансформации объектов</h3>
+
+<p>С <code>Object.fromEntries</code>, обратным ему методом {{jsxref("Object.entries()")}} и <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Methods_2">методами манипулирования массивами</a> вы можете преобразовывать объекты следующим образом:</p>
+
+<pre class="brush: js">const object1 = { a: 1, b: 2, c: 3 };
+
+const object2 = Object.fromEntries(
+ Object.entries(object1)
+ .map(([ key, val ]) =&gt; [ key, val * 2 ])
+);
+
+console.log(object2);
+// { a: 2, b: 4, c: 6 }</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.fromentries', 'Object.fromEntries')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Изначальное определение в ECMAScript 2019.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на извлечение.</div>
+
+<p>{{Compat("javascript.builtins.Object.fromEntries")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.entries()")}}</li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li>{{jsxref("Object.values()")}}</li>
+ <li>{{jsxref("Map.prototype.entries()")}}</li>
+ <li>{{jsxref("Map.prototype.keys()")}}</li>
+ <li>{{jsxref("Map.prototype.values()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html b/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html
new file mode 100644
index 0000000000..1947d51f73
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getnotifier/index.html
@@ -0,0 +1,47 @@
+---
+title: Object.getNotifier()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getNotifier
+translation_of: Archive/Web/JavaScript/Object.getNotifier
+---
+<div>{{JSRef}} {{obsolete_header}}</div>
+
+<p>Метод <strong><code>Object.getNotifer()</code></strong> использовался для создания объекта, который позволяет синтетически инициировать изменение, но не рекомендуется  и удаляется в браузерах.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Object.getNotifier(<em>obj</em>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект для извлечения уведомителя.</dd>
+</dl>
+
+<h3 id="Возращаемое_значение">Возращаемое значение</h3>
+
+<p>Объект увидомителя, связанный с объектом, передаваемым в функцию.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Уведомитель используется для запуска искусственных изменений, которые будут обнаружены <code>Object.observe()</code>.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p><a href="https://github.com/arv/ecmascript-object-observe">Strawman proposal specification.</a></p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на извлечение.</div>
+
+<p>{{Compat("javascript.builtins.Object.getNotifier")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.observe()")}} {{obsolete_inline}}</li>
+ <li>{{jsxref("Object.unobserve()")}} {{obsolete_inline}}</li>
+ <li>{{jsxref("Array.observe()")}} {{obsolete_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html b/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html
new file mode 100644
index 0000000000..94c1bce570
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptor/index.html
@@ -0,0 +1,148 @@
+---
+title: Object.getOwnPropertyDescriptor()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
+tags:
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>Object.getOwnPropertyDescriptor()</strong></code> возвращает дескриптор свойства для <dfn>собственного свойства</dfn> (то есть такого, которое находится непосредственно в объекте, а не получено через цепочку прототипов) переданного объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Object.getOwnPropertyDescriptor(<var>obj</var>, <var>prop</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, в котором ищется свойство.</dd>
+ <dt><code>prop</code></dt>
+ <dd>Имя свойства, чьё описание будет возвращено.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+<p>Дескриптор переданного свойства, если оно присутствует в объекте, либо {{jsxref("undefined")}}, если его там нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Этот метод позволяет просмотреть точное описание свойства. <dfn>Свойство</dfn> в JavaScript состоит из строкового имени и дескриптора свойства. Подробная информация о типах дескрипторов свойств и их атрибутах может быть найдена в описании метода {{jsxref("Object.defineProperty()")}}.</p>
+<p><dfn>Дескриптор свойства</dfn> — это запись с некоторыми из следующих атрибутов:</p>
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, ассоциированное со свойством (только в дескрипторе данных).</dd>
+ <dt><code>writable</code></dt>
+ <dd>Значение <code>true</code>, если значение, ассоциированное со свойством, может быть изменено, иначе <code>false</code> (только в дескрипторе данных).</dd>
+ <dt><code>get</code></dt>
+ <dd>Функция, возвращающая значение свойства, либо {{jsxref("undefined")}}, если такая функция отсутствует (только в дескрипторе доступа).</dd>
+ <dt><code>set</code></dt>
+ <dd>Функция, изменяющая значение свойства, либо {{jsxref("undefined")}}, если такая функция отсутствует (только в дескрипторе доступа).</dd>
+ <dt><code>configurable</code></dt>
+ <dd>Значение <code>true</code>, если тип дескриптора этого свойства может быть изменён и если свойство может быть удалено из содержащего его объекта, иначе <code>false</code>.</dd>
+ <dt><code>enumerable</code></dt>
+ <dd>Значение <code>true</code>, если это свойство доступно при перечислении свойств содержащего его объекта, иначе <code>false</code>.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">var o, d;
+
+o = { get foo() { return 17; } };
+d = Object.getOwnPropertyDescriptor(o, 'foo');
+// d равен { configurable: true, enumerable: true, get: /*функция геттера*/, set: undefined }
+
+o = { bar: 42 };
+d = Object.getOwnPropertyDescriptor(o, 'bar');
+// d равен { configurable: true, enumerable: true, value: 42, writable: true }
+
+o = {};
+Object.defineProperty(o, 'baz', { value: 8675309, writable: false, enumerable: false });
+d = Object.getOwnPropertyDescriptor(o, 'baz');
+// d равен { value: 8675309, writable: false, enumerable: false, configurable: false }
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+<p>В ES5, если первый аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет сначала приведён к объекту.</p>
+<pre class="brush: js">&gt; Object.getOwnPropertyDescriptor('foo', 0)
+TypeError: "foo" is not an object // код ES5
+
+&gt; Object.getOwnPropertyDescriptor('foo', 0)
+{ configurable: false, enumerable: true, value: 'f', writable: false } // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.3', 'Object.getOwnPropertyDescriptor')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.getownpropertydescriptor', 'Object.getOwnPropertyDescriptor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("5")}}</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>{{CompatIE("8")}}</td>
+ <td>{{CompatOpera("12 alpha")}}</td>
+ <td>{{CompatSafari("5")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..3b1c545f1b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getownpropertydescriptors/index.html
@@ -0,0 +1,115 @@
+---
+title: Object.getOwnPropertyDescriptors()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Object.getOwnPropertyDescriptors()</strong></code> возвращает все собственные дескрипторы свойств данного объекта.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/object-getownpropertydescriptors.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Object.getOwnPropertyDescriptors(<var>obj</var>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, для которого нужно получить все собственные дескрипторы свойств.</dd>
+</dl>
+
+<h3 id="Возращаемое_значение">Возращаемое значение</h3>
+
+<p>Объект, содержащий все собственные дескрипторы свойств объекта. Может быть пустой объект, если нет свойств.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот метод позволяет изучить точное описание всех собственных свойств объекта. Свойство в JavaScript состоит из строкового имени или {{jsxref("Symbol")}}  и свойства дескриптора. Дополнительную информацию о типах свойств дескрипторов и их атрибутах можно найти в {{jsxref("Object.defineProperty()")}}.</p>
+
+<p>Свойство дескриптора это запись с некоторыми из следующих атрибутов:</p>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Значение, связанное со свойством (только дескрипторы данных).</dd>
+ <dt><code><strong>writable</strong></code></dt>
+ <dd><code>true</code>  тогда и только тогда когда значение, связанное со свойством, может быть изменено (только дескрипторы данных).</dd>
+ <dt><code>get</code></dt>
+ <dd>Функция, которая служит в качестве получателя для свойства, или {{jsxref("undefined")}} если нет получателя (только дескрипторы доступа).</dd>
+ <dt><code>set</code></dt>
+ <dd>Функция, которая служит установщиком для свойства, или {{jsxref("undefined")}} если установщика нет (только дескрипторы доступа).</dd>
+ <dt><code>configurable</code></dt>
+ <dd><code>true</code> тогда и только тогда, когда тип этого свойства дескриптора может быть изменен, и если свойство может быть удалено из соответствующего объекта.</dd>
+ <dt><code>enumerable</code></dt>
+ <dd><code>true</code> тогда и только тогда, когда это свойство отображается при перечислении свойств соответствующего объекта.
+ <p> </p>
+ </dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Создание_поверхностного_клона">Создание поверхностного клона</h3>
+
+<p>В то время как метод {{jsxref("Object.assign()")}} будет только копировать перечисяемые и собственные свойствва из исходного объекат в целевой объект, вы можете использовать этот метод и {{jsxref("Object.create()")}} для поверхностного копирования между двумя неизвестными объектами:</p>
+
+<pre class="brush: js">Object.create(
+ Object.getPrototypeOf(obj),
+ Object.getOwnPropertyDescriptors(obj)
+);
+</pre>
+
+<h3 id="Создание_подкласса">Создание подкласса</h3>
+
+<p>Типичный способ создания подкласса это определить подкласс, определить свойства этого экземпляра. Это может быть неудобно особенно для получателей и установщиков. Вместо этого, вы можете использовать этот код для установки прототипа:</p>
+
+<pre class="brush: js">function superclass() {}
+superclass.prototype = {
+ // Определите ваши методы и свойства здесь
+};
+function subclass() {}
+subclass.prototype = Object.create(
+  superclass.prototype,
+  {
+ // Определите ваши методы и свойства здесь
+ }
+);
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Начальное определение в ECMAScript 2017.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2017', '#sec-object.getownpropertydescriptors', 'Object.getOwnPropertyDescriptors')}}</td>
+ <td>{{Spec2('ES2017')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на извлечение.</div>
+
+<p>{{Compat("javascript.builtins.Object.getOwnPropertyDescriptors")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.getOwnPropertyDescriptor()")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li><a href="https://github.com/tc39/proposal-object-getownpropertydescriptors">Polyfill</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/getownpropertynames/index.html b/files/ru/web/javascript/reference/global_objects/object/getownpropertynames/index.html
new file mode 100644
index 0000000000..c280afe9ba
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getownpropertynames/index.html
@@ -0,0 +1,161 @@
+---
+title: Object.getOwnPropertyNames()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<p>Метод <strong><code>Object.getOwnPropertyNames()</code></strong> возвращает массив со всеми свойствами (независимо от того, перечисляемые они или нет), найденными непосредственно в переданном объекте.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-getownpropertynames.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js"><code>Object.getOwnPropertyNames(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чьи перечисляемые <em>и неперечисляемые</em> собственные свойства будут возвращены.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив строк, который соответствует свойствам, найденным непосредственно в данном объекте.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Object.getOwnPropertyNames</code> возвращает массив строк, соответствующих перечисляемым <em>и неперечисляемым</em> свойствам, найденным непосредственно в объекте <code>obj</code>. Порядок перечисляемых свойств в массиве соответствует порядку при обходе объекта циклом {{jsxref("Statements/for...in", "for...in")}} (или при возврате методом {{jsxref("Object.keys")}}). Порядок неперечисляемых свойств в массиве, а также их местоположение среди перечисляемых свойств не определены.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_Object.getOwnPropertyNames" name="Example:_Using_Object.getOwnPropertyNames">Пример: использование <code>Object.getOwnPropertyNames()</code></h3>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+console.log(Object.getOwnPropertyNames(arr).sort()); // напечатает '0,1,2,length'
+
+// Массивоподобный объект
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.getOwnPropertyNames(obj).sort()); // напечатает '0,1,2'
+
+// Печать имён и значений свойств с помощью Array.forEach
+Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
+ console.log(val + ' -&gt; ' + obj[val]);
+});
+// напечатает
+// 0 -&gt; a
+// 1 -&gt; b
+// 2 -&gt; c
+
+// Не перечисляемое свойство
+var my_obj = Object.create({}, {
+ getFoo: {
+ value: function() { return this.foo; },
+ enumerable: false
+ }
+});
+my_obj.foo = 1;
+
+console.log(Object.getOwnPropertyNames(my_obj).sort()); // напечатает 'foo,getFoo'
+</pre>
+
+<p>Если вы хотите обработать только перечисляемые свойства, смотрите в сторону метода {{jsxref("Object.keys()")}} или используйте цикл {{jsxref("Statements/for...in", "for...in")}} (хотя стоит отметить, что он пройдётся по перечисляемым свойствам, присутствующим не только непосредственно в самом объекте, но и унаследованным из цепочки прототипов объекта; последние можно отфильтровать с помощью метода {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}}).</p>
+
+<p>Элементы в цепочке прототипов не перечисляются:</p>
+
+<pre class="brush: js">function ParentClass() {}
+ParentClass.prototype.inheritedMethod = function() {};
+
+function ChildClass() {
+ this.prop = 5;
+ this.method = function() {};
+}
+ChildClass.prototype = new ParentClass;
+ChildClass.prototype.prototypeMethod = function() {};
+
+alert(
+ Object.getOwnPropertyNames(
+ new ChildClass() // ['prop', 'method']
+ )
+);
+</pre>
+
+<h3 id="Example:_Get_Non-Enumerable_Only" name="Example:_Get_Non-Enumerable_Only">Пример: получение только не перечисляемых свойств</h3>
+
+<p>Здесь используется функция {{jsxref("Array.prototype.filter()")}} для удаления перечисляемых ключей (полученных через метод {{jsxref("Object.keys()")}}) из списка всех ключей (полученных через метод <code>Object.getOwnPropertyNames()</code>) и, таким образом, оставляющая только неперечисляемые ключи.</p>
+
+<pre class="brush: js">var target = myObject;
+var enum_and_nonenum = Object.getOwnPropertyNames(target);
+var enum_only = Object.keys(target);
+var nonenum_only = enum_and_nonenum.filter(function(key) {
+ var indexInEnum = enum_only.indexOf(key);
+ if (indexInEnum == -1) {
+ // если ключ не найден в массиве enum_only, значит ключ является не перечисляемым
+ // и нужно вернуть true, чтобы он попал в результирующий массив
+ return true;
+ } else {
+ return false;
+ }
+});
+
+console.log(nonenum_only);
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет приведён к объекту.</p>
+
+<pre class="brush: js">&gt; Object.getOwnPropertyNames('foo')
+TypeError: "foo" is not an object // код ES5
+
+&gt; Object.getOwnPropertyNames('foo')
+['length', '0', '1', '2'] // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.4', 'Object.getOwnPropertyNames')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.getownpropertynames', 'Object.getOwnPropertyNames')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.getOwnPropertyNames")}}</div>
+
+<p> </p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+ <li>{{jsxref("Object.prototype.hasOwnProperty()")}}</li>
+ <li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li>{{jsxref("Array.forEach()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html b/files/ru/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html
new file mode 100644
index 0000000000..e86deefc78
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getownpropertysymbols/index.html
@@ -0,0 +1,94 @@
+---
+title: Object.getOwnPropertySymbols()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<p>Метод <code><strong>Object.getOwnPropertySymbols()</strong></code> возвращает массив всех символьных свойств, найденных непосредственно на переданном объекте.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-getownpropertysymbols.html")}}</p>
+
+<div class="hidden">
+<p>Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на извлечение.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js"><code>Object.getOwnPropertySymbols(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чьи символьные будут возвращены.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив всех свойств символа, найденных прямо на данном объекте.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Подобно методу {{jsxref("Object.getOwnPropertyNames()")}}, вы можете получить все символьные свойства указанного объекта в качестве массива символов. Обратите внимание, что метод {{jsxref("Object.getOwnPropertyNames()")}} сам не возвращает символьные свойства объекта, он возвращает только строковые свойства.</p>
+
+<p>Поскольку изначально никакой объект не содержит собственных символьных свойств, метод <code>Object.getOwnPropertySymbols()</code> будет возвращать пустой массив, пока вы не установите символьные свойства на вашем объекте.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var obj = {};
+var a = Symbol('a');
+var b = Symbol.for('b');
+
+obj[a] = 'localSymbol';
+obj[b] = 'globalSymbol';
+
+var objectSymbols = Object.getOwnPropertySymbols(obj);
+
+console.log(objectSymbols.length); // 2
+console.log(objectSymbols); // [Symbol(a), Symbol(b)]
+console.log(objectSymbols[0]); // Symbol(a)
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.getownpropertysymbols', 'Object.getOwnPropertySymbols')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> ​​​​​​и отправьте нам запрос на извлечение.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Object.getOwnPropertySymbols")}}</p>
+
+<div id="compat-desktop"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+ <li>{{jsxref("Symbol")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/getprototypeof/index.html b/files/ru/web/javascript/reference/global_objects/object/getprototypeof/index.html
new file mode 100644
index 0000000000..540fddb350
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/getprototypeof/index.html
@@ -0,0 +1,139 @@
+---
+title: Object.getPrototypeOf()
+slug: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
+tags:
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Object.getPrototypeOf()</code></strong> возвращает прототип (то есть, внутреннее свойство <code>[[Prototype]]</code>) указанного объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.getPrototypeOf(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чей прототип будет возвращён.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var proto = {};
+var obj = Object.create(proto);
+Object.getPrototypeOf(obj) === proto; // true
+</pre>
+
+<pre class="brush: js">&gt; Object.getPrototypeOf('foo')
+TypeError: "foo" is not an object // код ES5
+&gt; Object.getPrototypeOf('foo')
+String.prototype // код ES6
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если параметр <code>obj</code> не является объектом, будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6, параметр будет приведён к объекту {{jsxref("Global_Objects/Object", "Object")}}.</p>
+
+<pre class="brush: js">&gt; Object.getPrototypeOf('foo')
+TypeError: "foo" is not an object // код ES5
+&gt; Object.getPrototypeOf('foo')
+String.prototype // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.2', 'Object.getPrototypeOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.getprototypeof', 'Object.getProtoypeOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("5")}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("12.10")}} (может быть и более ранние)</td>
+ <td>{{CompatSafari("5")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h3 id="Opera-specific_notes" name="Opera-specific_notes">Примечания по Opera</h3>
+
+<p>Хотя старые версии Opera и не поддерживают меотод <code>Object.getPrototypeOf()</code>, Opera поддерживает нестандартное свойство {{jsxref("Object.proto", "__proto__")}}, начиная с версии Opera 10.50.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.setPrototypeOf()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Object.prototype.__proto__")}}</li>
+ <li>Запись в блоге Джона Резига о <a href="http://ejohn.org/blog/objectgetprototypeof/">getPrototypeOf()</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/hasownproperty/index.html b/files/ru/web/javascript/reference/global_objects/object/hasownproperty/index.html
new file mode 100644
index 0000000000..c1fa2f6464
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/hasownproperty/index.html
@@ -0,0 +1,145 @@
+---
+title: Object.prototype.hasOwnProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>hasOwnProperty()</strong></code> возвращает логическое значение, указывающее, содержит ли объект указанное свойство.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>obj</var>.hasOwnProperty(<var>prop</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Имя проверяемого свойства.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Каждый объект, произошедший от {{jsxref("Global_Objects/Object", "Object")}}, наследует метод <code>hasOwnProperty</code>. Этот метод может использоваться для определения того, содержит ли объект указанное свойство в качестве собственного свойства объекта; в отличие от оператора {{jsxref("Operators/in", "in")}}, этот метод не проверяет существование свойств в цепочке прототипов объекта.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_hasOwnProperty_to_test_for_a_property.27s_existence" name="Example:_Using_hasOwnProperty_to_test_for_a_property.27s_existence">Пример: использование <code>hasOwnProperty</code> для проверки существования свойства</h3>
+
+<p>В следующем примере определяется, содержит ли объект <code>o</code> свойство с именем <code>prop</code>:</p>
+
+<pre class="brush: js">o = new Object();
+o.prop = 'существует';
+
+function changeO() {
+ o.newprop = o.prop;
+ delete o.prop;
+}
+
+o.hasOwnProperty('prop'); // вернёт true
+changeO();
+o.hasOwnProperty('prop'); // вернёт false
+</pre>
+
+<h3 id="Example:_Direct_versus_inherited_properties" name="Example:_Direct_versus_inherited_properties">Пример: собственные и унаследованные свойства</h3>
+
+<p>Следующий пример показывает разницу между собственными свойствами и свойствами, унаследоваными через цепочку прототипов:</p>
+
+<pre class="brush: js">o = new Object();
+o.prop = 'существует';
+o.hasOwnProperty('prop'); // вернёт true
+o.hasOwnProperty('toString'); // вернёт false
+o.hasOwnProperty('hasOwnProperty'); // вернёт false
+</pre>
+
+<h3 id="Example:_Itarate_over_properties_not_considering_inherited_properties" name="Example:_Itarate_over_properties_not_considering_inherited_properties">Пример: обход свойств объекта</h3>
+
+<p>Следующий пример показывает, как итерироваться по свойствам объекта с пропуском унаследованных свойств. Обратите внимание, что цикл {{jsxref("Statements/for...in", "for...in")}} уже проходит только по перечисляемым элементам, так что не надо на основании отсутствия не перечисляемых свойств, показываемых в цикле, считать, что метод <code>hasOwnProperty</code> сам ограничивает свойства только перечисляемыми элементами (как это делает метод {{jsxref("Object.getOwnPropertyNames()")}}).</p>
+
+<pre class="brush: js">var buz = {
+ fog: 'stack'
+};
+
+for (var name in buz) {
+ if (buz.hasOwnProperty(name)) {
+ alert('это точно туман (' + name + '). Значение: ' + buz[name]);
+ }
+ else {
+ alert(name); // toString или что-то ещё
+ }
+}
+</pre>
+
+<h3 id="Example:_hasOwnProperty_as_a_property" name="Example:_hasOwnProperty_as_a_property">Пример: <code>hasOwnProperty</code> как свойство</h3>
+
+<p>JavaScript не защищает имя свойства <code>hasOwnProperty</code>; таким образом, вполне может существовать объект с таким свойством, поэтому для получения правильного результата нужно использовать <em>внешний</em> метод <code>hasOwnProperty</code>:</p>
+
+<pre class="brush: js">var foo = {
+ hasOwnProperty: function() {
+ return false;
+ },
+ bar: 'Тут драконы'
+};
+
+foo.hasOwnProperty('bar'); // всегда возвращает false
+
+// Используем метод hasOwnProperty другого объекта и вызываем его с передачей foo в качестве this
+({}).hasOwnProperty.call(foo, 'bar'); // true
+
+// Также для этих целей можно использовать свойство hasOwnProperty из прототипа Object
+Object.prototype.hasOwnProperty.call(foo, 'bar'); // true
+</pre>
+
+<p>Обратите внимание, что в последнем случае новые объекты не создаются.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3rd Edition.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+<p>{{Compat("javascript.builtins.Object.hasOwnProperty")}}</p>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+ <li>{{jsxref("Statements/for...in", "for...in")}}</li>
+ <li>{{jsxref("Operators/in", "in")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Inheritance_Revisited">Руководство по JavaScript: повторное наследование</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/index.html b/files/ru/web/javascript/reference/global_objects/object/index.html
new file mode 100644
index 0000000000..0286dff0dd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/index.html
@@ -0,0 +1,216 @@
+---
+title: Object
+slug: Web/JavaScript/Reference/Global_Objects/Object
+tags:
+ - Constructor
+ - JavaScript
+ - Object
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Object
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Конструктор <code><strong>Object</strong></code> создаёт объект-обёртку.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>// Инициализатор объекта или литерал
+{ [ <var>nameValuePair1</var>[, <var>nameValuePair2</var>[, ...<var>nameValuePairN</var>] ] ] }
+
+// Вызов в качестве конструктора
+new Object([<var>value</var>])
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>nameValuePair1, nameValuePair2, ... nameValuePair<em>N</em></code></dt>
+ <dd>Пары из имён (строки) и значений (любые значения), где имя отделяется от значения двоеточием.</dd>
+ <dt><code>value</code></dt>
+ <dd>Любое значение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Конструктор <code>Object</code> создаёт объект-обёртку для переданного значения. Если значением является {{jsxref("Global_Objects/null", "null")}} или {{jsxref("Global_Objects/undefined", "undefined")}}, создаёт и возвращает пустой объект, в противном случае возвращает объект такого типа, который соответствует переданному значению. Если значение уже является объектом, конструктор вернёт это значение.</p>
+
+<p>При вызове в не-конструкторном контексте, <code>Object</code> ведёт себя идентично коду <code>new Object()</code>.</p>
+
+<p>Так же смотрите {{jsxref("Operators/Object_initializer", "синтаксис инициализатора объекта / литеральный синтаксис", "", 1)}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства конструктора <code>Object</code></h2>
+
+<dl>
+ <dt><code>Object.length</code></dt>
+ <dd>Имеет значение 1.</dd>
+ <dt>{{jsxref("Object.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам типа <code>Object</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы конструктора <code>Object</code></h2>
+
+<dl>
+ <dt>{{jsxref("Object.assign()")}}</dt>
+ <dd>Создаёт новый объект путём копирования значений всех собственных перечислимых свойств из одного или более исходных объектов в целевой объект.</dd>
+ <dt>{{jsxref("Object.create()")}}</dt>
+ <dd>Создаёт новый объект с указанными объектом прототипа и свойствами.</dd>
+ <dt>{{jsxref("Object.defineProperty()")}}</dt>
+ <dd>Добавляет к объекту именованное свойство, описываемое переданным дескриптором.</dd>
+ <dt>{{jsxref("Object.defineProperties()")}}</dt>
+ <dd>Добавляет к объекту именованные свойства, описываемые переданными дескрипторами.</dd>
+ <dt>{{jsxref("Object.freeze()")}}</dt>
+ <dd>Замораживает объект: другой код не сможет удалить или изменить никакое свойство.</dd>
+ <dt>{{jsxref("Object.getOwnPropertyDescriptor()")}}</dt>
+ <dd>Возвращает дескриптор свойства для именованного свойства объекта.</dd>
+ <dt>{{jsxref("Object.getOwnPropertyNames()")}}</dt>
+ <dd>Возвращает массив, содержащий имена всех переданных объекту <strong>собственных</strong> перечисляемых и неперечисляемых свойств.</dd>
+ <dt>{{jsxref("Object.getOwnPropertySymbols()")}}</dt>
+ <dd>Возвращает массив всех символьных свойств, найденных непосредственно в переданом объекте.</dd>
+ <dt>{{jsxref("Object.getPrototypeOf()")}}</dt>
+ <dd>Возвращает прототип указанного объекта.</dd>
+ <dt>{{jsxref("Object.is()")}}</dt>
+ <dd>Определяет, являются ли два значения различимыми (то есть, одинаковыми)</dd>
+ <dt>{{jsxref("Object.isExtensible()")}}</dt>
+ <dd>Определяет, разрешено ли расширение объекта.</dd>
+ <dt>{{jsxref("Object.isFrozen()")}}</dt>
+ <dd>Определяет, был ли объект заморожен.</dd>
+ <dt>{{jsxref("Object.isSealed()")}}</dt>
+ <dd>Определяет, является ли объект запечатанным (sealed).</dd>
+ <dt>{{jsxref("Object.keys()")}}</dt>
+ <dd>Возвращает массив, содержащий имена всех <strong>собственных</strong> перечислимых свойств переданного объекта.</dd>
+ <dt>{{jsxref("Object.observe()")}}</dt>
+ <dd>Асинхронно наблюдает за изменениями в объекте.</dd>
+ <dt>{{jsxref("Object.preventExtensions()")}}</dt>
+ <dd>Предотвращает любое расширение объекта.</dd>
+ <dt>{{jsxref("Object.seal()")}}</dt>
+ <dd>Предотвращает удаление свойств объекта другим кодом.</dd>
+ <dt>{{jsxref("Object.setPrototypeOf()")}}</dt>
+ <dd>Устанавливает прототип (т.е. внутреннее свойство <code>[[Prototype]]</code>)</dd>
+</dl>
+
+<h2 id="Object_instances" name="Object_instances">Экземпляры и прототип объекта <code>Object</code></h2>
+
+<p>Все объекты в JavaScript являются потомками <code>Object</code>; все объекты наследуют методы и свойства из прототипа объекта {{jsxref("Object.prototype")}}, хотя они и могут быть переопределены. Например, прототипы других конструкторов переопределяют свойство <code>constructor</code> и предоставляют свои собственные методы <code>toString()</code>. Изменения в объекте прототипа <code>Object</code> распространяются на все объекты до тех пор, пока свойства и методы, учитывающие эти изменения, не переопределяются дальше по цепочке прототипов.</p>
+
+<h3 id="Properties_of_Object_instances" name="Properties_of_Object_instances">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_Object_instances" name="Methods_of_Object_instances">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example.3A_Using_Object_given_undefined_and_null_types" name="Example.3A_Using_Object_given_undefined_and_null_types">Пример: использование <code>Object</code> с типами <code>undefined</code> и <code>null</code></h3>
+
+<p>Следующий пример сохраняет пустой объект <code>Object</code> в переменную <code>o</code>:</p>
+
+<pre class="brush: js">var o = new Object();
+</pre>
+
+<pre class="brush: js">var o = new Object(undefined);
+</pre>
+
+<pre class="brush: js">var o = new Object(null);
+</pre>
+
+<h3 id="Пример_использование_Object_для_создания_объектов_Boolean">Пример: использование <code>Object</code> для создания объектов <code>Boolean</code></h3>
+
+<p>Следующий пример сохраняет объекты {{jsxref("Global_Objects/Boolean", "Boolean")}} в переменную <code>o</code>:</p>
+
+<pre class="brush: js">// эквивалентно o = new Boolean(true);
+var o = new Object(true);
+</pre>
+
+<pre class="brush: js">// эквивалентно o = new Boolean(false);
+var o = new Object(Boolean());
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2', 'Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object-objects', 'Object')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">Инициализатор объекта</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/is/index.html b/files/ru/web/javascript/reference/global_objects/object/is/index.html
new file mode 100644
index 0000000000..c9f061a3a9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/is/index.html
@@ -0,0 +1,122 @@
+---
+title: Object.is()
+slug: Web/JavaScript/Reference/Global_Objects/Object/is
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/is
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Object.is()</strong></code> определяет, являются ли два значения <a href="/ru/docs/Web/JavaScript/Guide/Sameness">одинаковыми значениями</a>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>var <var>isSame</var> = Object.is(<var>value1</var>, <var>value2</var>);</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>value1</code></dt>
+ <dd>Первое сравниваемое значение.</dd>
+ <dt><code>value2</code></dt>
+ <dd>Второе сравниваемое значение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Object.is()</code> определяет, являются ли два значения <a href="/ru/docs/Web/JavaScript/Guide/Sameness">одинаковыми значениями</a>. Два значения являются одинаковыми в следующих случаях:</p>
+
+<ul>
+ <li>оба равны {{jsxref("undefined")}}</li>
+ <li>оба равны {{jsxref("null")}}</li>
+ <li>оба равны <code>true</code>, либо оба равны <code>false</code></li>
+ <li>оба являются строками с одинаковой длиной и одинаковыми символами</li>
+ <li>оба являются одним и тем же объектом</li>
+ <li>оба являются числами и
+ <ul>
+ <li>оба равны <code>+0</code></li>
+ <li>оба равны <code>-0</code></li>
+ <li>оба равны {{jsxref("NaN")}}</li>
+ <li>либо оба не равны нулю или {{jsxref("NaN")}} и оба имеют одинаковое значение</li>
+ </ul>
+ </li>
+</ul>
+
+<p>Поведение этого метода <em>не</em> аналогично оператору {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}. Оператор {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}} использует приведение типов обоих операндов (если они имеют различный тип) перед проверкой на равенство (в результате получается, что проверка <code>"" == false</code> даёт <code>true</code>), а метод <code>Object.is</code> приведение типов не выполняет.</p>
+
+<p>Поведение этого метода <em>не</em> аналогично оператору {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}. Оператор {{jsxref("Operators/Comparison_Operators", "===", "#Identity")}} (также как и оператор {{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}) считает числовые значения <code>-0</code> и <code>+0</code> равными, а значение {{jsxref("Number.NaN")}} не равным самому себе.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">Object.is('foo', 'foo'); // true
+Object.is(window, window); // true
+
+Object.is('foo', 'bar'); // false
+Object.is([], []); // false
+
+var test = { a: 1 };
+Object.is(test, test); // true
+
+Object.is(null, null); // true
+
+// Специальные случаи
+Object.is(0, -0); // false
+Object.is(-0, -0); // true
+Object.is(NaN, 0/0); // true
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>Object.is</code> предложен в дополнение к стандарту ECMA-262; поэтому он может быть недоступен в некоторых браузерах. Это можно обойти, вставив приведённый ниже фрагмент кода в начало ваших скриптов. Он позволит вам использовать метод <code>Object.is</code> в случаях, когда он не имеет родной поддержки браузером.</p>
+
+<pre><code>if (!Object.is) {
+ Object.is = function(x, y) {
+ // SameValue algorithm
+ if (x === y) { // Steps 1-5, 7-10
+ // Steps 6.b-6.e: +0 != -0
+ return x !== 0 || 1 / x === 1 / y;
+ } else {
+ // Step 6.a: NaN == NaN
+ return x !== x &amp;&amp; y !== y;
+ }
+ };
+}</code></pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.is', 'Object.is')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.is', 'Object.is')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.is")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Sameness">Руководство по JavaScript: одинаковость</a> — сравнение всех трёх встроенных способов проверки на одинаковость</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/isextensible/index.html b/files/ru/web/javascript/reference/global_objects/object/isextensible/index.html
new file mode 100644
index 0000000000..99b44f9654
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/isextensible/index.html
@@ -0,0 +1,134 @@
+---
+title: Object.isExtensible()
+slug: Web/JavaScript/Reference/Global_Objects/Object/isExtensible
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/isExtensible
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>Object.isExtensible()</code></strong> определяет, является ли объект расширяемым (то есть, можно ли к нему добавлять новые свойства).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Object.isExtensible(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Проверяемый объект.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объекты являются расширяемыми по умолчанию: к ним можно добавлять новые свойства и (в движках, поддерживающих свойство {{jsxref("Object.proto", "__proto__")}}) их можно изменять. Объект может быть помечен, как не изменяемый с помощью методов {{jsxref("Object.preventExtensions()")}}, {{jsxref("Object.seal()")}} или {{jsxref("Object.freeze()")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">// Новые объекты являются расширяемыми.
+var empty = {};
+assert(Object.isExtensible(empty) === true);
+
+// ...но это может быть изменено.
+Object.preventExtensions(empty);
+assert(Object.isExtensible(empty) === false);
+
+// Запечатанные объекты по определению не расширяемы.
+var sealed = Object.seal({});
+assert(Object.isExtensible(sealed) === false);
+
+// Замороженные объекты также по определению не расширяемы.
+var frozen = Object.freeze({});
+assert(Object.isExtensible(frozen) === false);
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться, как простой не расширяемый объект и метод просто вернёт <code>false</code>.</p>
+<pre class="brush: js">&gt; Object.isExtensible(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.isExtensible(1)
+false // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.13', 'Object.isExtensible')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.isextensible', 'Object.isExtensible')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("6")}}</td>
+ <td>{{CompatGeckoDesktop("2.0")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("12")}}</td>
+ <td>{{CompatSafari("5.1")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+ <li>{{jsxref("Object.seal()")}}</li>
+ <li>{{jsxref("Object.isSealed()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+ <li>{{jsxref("Object.isFrozen()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/isfrozen/index.html b/files/ru/web/javascript/reference/global_objects/object/isfrozen/index.html
new file mode 100644
index 0000000000..1970718f05
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/isfrozen/index.html
@@ -0,0 +1,142 @@
+---
+title: Object.isFrozen()
+slug: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/isFrozen
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Object.isFrozen()</strong></code> определяет, был ли объект заморожен.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.isFrozen(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Проверяемый объект.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объект является замороженным только в том случае, если он не {{jsxref("Object.isExtensible()", "расширяем", "", 1)}}, все его свойства являются не настраиваемыми и все его свойства данных (то есть такие, которые не являются свойствами доступа с функциями сеттера или геттера) являются не записываемыми.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">// Новый объект является расширяемым, так что он не заморожен.
+assert(Object.isFrozen({}) === false);
+
+// Пустой не расширяемый объект по определению заморожен.
+var vacuouslyFrozen = Object.preventExtensions({});
+assert(Object.isFrozen(vacuouslyFrozen) === true);
+
+// Новый объект с одним свойством является расширяемым, поэтому он не заморожен.
+var oneProp = { p: 42 };
+assert(Object.isFrozen(oneProp) === false);
+
+// Предотвращение расширения объекта всё ещё не делает его замороженным,
+// поскольку свойство всё ещё остаётся настраиваемым (и записываемым).
+Object.preventExtensions(oneProp);
+assert(Object.isFrozen(oneProp) === false);
+
+// ...но при удалении этого свойства объект становится замороженным по определению.
+delete oneProp.p;
+assert(Object.isFrozen(oneProp) === true);
+
+// Не расширяемый объект с не записываемым, но всё ещё настраиваемым свойством, не является замороженным.
+var nonWritable = { e: 'plep' };
+Object.preventExtensions(nonWritable);
+Object.defineProperty(nonWritable, 'e', { writable: false }); // делаем свойство не записываемым
+assert(Object.isFrozen(nonWritable) === false);
+
+// Изменение свойства на не настраиваемое делает объект замороженным.
+Object.defineProperty(nonWritable, 'e', { configurable: false }); // делаем свойство не настраиваемым
+assert(Object.isFrozen(nonWritable) === true);
+
+// Не расширяемый объект с не настраиваемым, но всё ещё записываемым свойством, также не является замороженным.
+var nonConfigurable = { release: 'кракен!' };
+Object.preventExtensions(nonConfigurable);
+Object.defineProperty(nonConfigurable, 'release', { configurable: false });
+assert(Object.isFrozen(nonConfigurable) === false);
+
+// Изменение свойства на не записываемое делает объект замороженным.
+Object.defineProperty(nonConfigurable, 'release', { writable: false });
+assert(Object.isFrozen(nonConfigurable) === true);
+
+// Не расширяемый объект с настраиваемым свойством доступа не является замороженным.
+var accessor = { get food() { return 'ням'; } };
+Object.preventExtensions(accessor);
+assert(Object.isFrozen(accessor) === false);
+
+// ...но сделав это свойство не настраиваемым, объект становится замороженным.
+Object.defineProperty(accessor, 'food', { configurable: false });
+assert(Object.isFrozen(accessor) === true);
+
+// Самым же простым способом заморозить объект можно через вызов на нём метода Object.freeze.
+var frozen = { 1: 81 };
+assert(Object.isFrozen(frozen) === false);
+Object.freeze(frozen);
+assert(Object.isFrozen(frozen) === true);
+
+// По определению, замороженный объект является не расширяемым.
+assert(Object.isExtensible(frozen) === false);
+
+// Также, по определению, замороженный объект является запечатанным.
+assert(Object.isSealed(frozen) === true);
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться, как простой замороженный объект и метод просто вернёт <code>true</code>.</p>
+
+<pre class="brush: js">&gt; Object.isFrozen(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.isFrozen(1)
+true // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.12', 'Object.isFrozen')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.isfrozen', 'Object.isFrozen')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.isFrozen")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.freeze()")}}</li>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+ <li>{{jsxref("Object.seal()")}}</li>
+ <li>{{jsxref("Object.isSealed()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/isprototypeof/index.html b/files/ru/web/javascript/reference/global_objects/object/isprototypeof/index.html
new file mode 100644
index 0000000000..d9ece7c245
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/isprototypeof/index.html
@@ -0,0 +1,159 @@
+---
+title: Object.prototype.isPrototypeOf()
+slug: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/isPrototypeOf
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>isPrototypeOf()</strong></code> проверяет, входит ли объект в цепочку прототипов другого объекта.</p>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> метод <code>isPrototypeOf()</code> отличается от оператора {{jsxref("Operators/instanceof", "instanceof")}}. Выражение "<code>object instanceof AFunction</code>" проверяет, присутствует ли в цепочке прототипов объекта <code>object</code> объект <code>AFunction.prototype</code>, а не сам объект <code>AFunction</code>.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>prototypeObj</var>.isPrototypeOf(<var>object</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>prototypeObj</code></dt>
+ <dd>Объект, проверяемый на каждую ссылку в цепочке прототипов аргумента <strong>object</strong>.</dd>
+ <dt><code>object</code></dt>
+ <dd>Объект, в чьей цепочке прототипов производится поиск.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>isPrototypeOf()</code> позволяет вам проверять, существует ли объект в цепочке прототипов другого объекта.</p>
+
+<p>Например, рассмотрим следующую цепочку прототипов:</p>
+
+<pre class="brush: js">function Fee() {
+ // ...
+}
+
+function Fi() {
+ // ...
+}
+Fi.prototype = new Fee();
+
+function Fo() {
+ // ...
+}
+Fo.prototype = new Fi();
+
+function Fum() {
+ // ...
+}
+Fum.prototype = new Fo();
+</pre>
+
+<p>Если позже вы создадите экземпляр объекта <code>Fum</code> и захотите проверить, что прототип <code>Fi</code> существует в цепочке прототипов <code>Fum</code>, вы можете сделать следующее:</p>
+
+<pre class="brush: js">var fum = new Fum();
+// ...
+
+if (Fi.prototype.isPrototypeOf(fum)) {
+ // здесь безопасно что-то делать
+}
+</pre>
+
+<p>Таким образом, вместе с оператором {{jsxref("Operators/instanceof", "instanceof")}}, это особенно пригождается, если у вас есть код, который может работать только с объектами, имеющими определённую цепочку прототипов, к примеру, чтобы он мог гарантировать, что в объекте присутствуют определённые методы или свойства.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.5', 'Object.prototype.hasOwnProperty')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.hasownproperty', 'Object.prototype.hasOwnProperty')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Operators/instanceof", "instanceof")}}</li>
+ <li>{{jsxref("Object.getPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.setPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.prototype.__proto__")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/issealed/index.html b/files/ru/web/javascript/reference/global_objects/object/issealed/index.html
new file mode 100644
index 0000000000..a0f0ad8c5e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/issealed/index.html
@@ -0,0 +1,147 @@
+---
+title: Object.isSealed()
+slug: Web/JavaScript/Reference/Global_Objects/Object/isSealed
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/isSealed
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>Object.isSealed()</strong></code> определяет, является ли объект запечатанным.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>Object.isSealed(<var>obj</var>)</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt>
+ <code>obj</code></dt>
+ <dd>
+ Проверяемый объект.</dd>
+</dl>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Возвращает <code>true</code>, если объект является запечатанным, иначе возвращает <code>false</code>. Объект является запечатанным, если он является не {{jsxref("Object.isExtensible", "расширяемым", "", 1)}} и если все его свойства являются не настраиваемыми и, следовательно, не удаляемыми (но не обязательно не записываемыми).</p>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<pre class="brush: js">// По умолчанию объекты не запечатаны.
+var empty = {};
+assert(Object.isSealed(empty) === false);
+
+// Если вы сделаете пустой объект не расширяемым, он по определению станет запечатанным.
+Object.preventExtensions(empty);
+assert(Object.isSealed(empty) === true);
+
+// То же самое не верно для не пустого объекта, пока все его свойства не станут не настраиваемыми.
+var hasProp = { fee: 'fie foe fum' };
+Object.preventExtensions(hasProp);
+assert(Object.isSealed(hasProp) === false);
+
+// Но сделав все его свойства не настраиваемыми, объект становится запечатанным.
+Object.defineProperty(hasProp, 'fee', { configurable: false });
+assert(Object.isSealed(hasProp) === true);
+
+// Простейшим способом запечатать объект, конечно, является использование метода Object.seal.
+var sealed = {};
+Object.seal(sealed);
+assert(Object.isSealed(sealed) === true);
+
+// Запечатанный объект по определению является не расширяемым.
+assert(Object.isExtensible(sealed) === false);
+
+// Запечатанный объект может быть замороженным, но это не всегда так.
+assert(Object.isFrozen(sealed) === true); // все свойства также являются не записываемыми
+
+var s2 = Object.seal({ p: 3 });
+assert(Object.isFrozen(s2) === false); // свойство 'p' всё ещё записываемое
+
+var s3 = Object.seal({ get p() { return 0; } });
+assert(Object.isFrozen(s3) === true); // для свойств доступа значение имеет только их настраиваемость
+</pre>
+<h2 id="Notes" name="Notes">Примечания</h2>
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться, как простой запечатанный объект и метод просто вернёт <code>true</code>.</p>
+<pre class="brush: js">&gt; Object.isSealed(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.isSealed(1)
+true // код ES6
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.11', 'Object.isSealed')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.issealed', 'Object.isSealed')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("6")}}</td>
+ <td>{{CompatGeckoDesktop("2.0")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("12")}}</td>
+ <td>{{CompatSafari("5.1")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p>На основе <a class="external" href="http://kangax.github.com/es5-compat-table/">таблицы совместимости Kangax</a>.</p>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.seal()")}}</li>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+ <li>{{jsxref("Object.isFrozen()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/keys/index.html b/files/ru/web/javascript/reference/global_objects/object/keys/index.html
new file mode 100644
index 0000000000..d5700bbb4e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/keys/index.html
@@ -0,0 +1,153 @@
+---
+title: Object.keys()
+slug: Web/JavaScript/Reference/Global_Objects/Object/keys
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/keys
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>Object.keys()</strong></code> возвращает массив из собственных перечисляемых свойств переданного объекта, в том же порядке, в котором они бы обходились циклом {{jsxref("Statements/for...in", "for...in")}} (разница между циклом и методом в том, что цикл перечисляет свойства и из цепочки прототипов).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.keys(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чьи собственные перечисляемые свойства будут возвращены.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>Object.keys</code> возвращает массив строковых элементов, соответствующих именам перечисляемых свойств, найденных непосредственно в самом объекте. Порядок свойств такой же, как и при ручном перечислении свойств в объекте через цикл.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var arr = ['a', 'b', 'c'];
+console.log(Object.keys(arr)); // консоль: ['0', '1', '2']
+
+// Массивоподобный объект
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.keys(obj)); // консоль: ['0', '1', '2']
+
+// Массивоподобный объект со случайным порядком ключей
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.keys(an_obj)); // консоль: ['2', '7', '100']
+
+// Свойство getFoo является не перечисляемым свойством
+var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
+my_obj.foo = 1;
+
+console.log(Object.keys(my_obj)); // консоль: ['foo']
+</pre>
+
+<p>Если вы хотите увидеть все свойства, а не только перечисляемые, смотрите метод {{jsxref("Object.getOwnPropertyNames()")}}.</p>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES2015 такой аргумент будет приведён к объекту.</p>
+
+<pre class="brush: js">&gt; Object.keys('foo')
+TypeError: 'foo' is not an object // код ES5
+
+&gt; Object.keys('foo')
+['0', '1', '2'] // код ES2015
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Для добавления поддержки совместимого метода <code>Object.keys</code> в старых окружениях, которые его ещё не реализуют, скопируйте следующий кусок кода:</p>
+
+<pre class="brush: js">// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
+if (!Object.keys) {
+ Object.keys = (function() {
+ 'use strict';
+ var hasOwnProperty = Object.prototype.hasOwnProperty,
+ hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
+ dontEnums = [
+ 'toString',
+ 'toLocaleString',
+ 'valueOf',
+ 'hasOwnProperty',
+ 'isPrototypeOf',
+ 'propertyIsEnumerable',
+ 'constructor'
+ ],
+ dontEnumsLength = dontEnums.length;
+
+ return function(obj) {
+ if (typeof obj !== 'object' &amp;&amp; (typeof obj !== 'function' || obj === null)) {
+ throw new TypeError('Object.keys called on non-object');
+ }
+
+ var result = [], prop, i;
+
+ for (prop in obj) {
+ if (hasOwnProperty.call(obj, prop)) {
+ result.push(prop);
+ }
+ }
+
+ if (hasDontEnumBug) {
+ for (i = 0; i &lt; dontEnumsLength; i++) {
+ if (hasOwnProperty.call(obj, dontEnums[i])) {
+ result.push(dontEnums[i]);
+ }
+ }
+ }
+ return result;
+ };
+ }());
+}
+</pre>
+
+<p>Пожалуйста, обратите внимание, что вышеприведённый код в IE7 (и, может быть, в IE8) включает и не перечисляемые ключи, если объект передаётся из другого окна.</p>
+
+<p>Более простой полифилл может быть найден в статье <a href="http://tokenposts.blogspot.com.au/2012/04/javascript-objectkeys-browser.html">Javascript - Object.keys Browser Compatibility</a> (англ.).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.14', 'Object.keys')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-object.keys', 'Object.keys')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Object.keys")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+ <li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html b/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html
new file mode 100644
index 0000000000..6f0827751f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/nosuchmethod/index.html
@@ -0,0 +1,195 @@
+---
+title: Object.prototype.__noSuchMethod__
+slug: Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod
+tags:
+ - JavaScript
+ - Non-standard
+ - Object
+ - Property
+ - Prototype
+ - Reference
+translation_of: Archive/Web/JavaScript/Object.noSuchMethod
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}}</div>
+
+<div>Хотя свойство <strong><code>__noSuchMethod__</code></strong> и нестандартно, спецификация ECMAScript Harmony (ES6) содержит объект <strong>{{jsxref("Proxy")}}</strong>, с помощью которого вы можете сделать всё тоже самое, что и при использовании этого свойством (и даже больше).</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>__noSuchMethod__</code></strong> ссылается на функцию, выполняющуюся каждый раз при вызове на объекте несуществующего метода.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__noSuchMethod__ = <var>fun</var></code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>fun</code></dt>
+ <dd>Функция, имеющая вид</dd>
+ <dd>
+ <pre><code>function(<var>id</var>, <var>args</var>) { . . . }</code></pre>
+ <dl>
+ <dt><code>id</code></dt>
+ <dd>Имя вызванного несуществующего метода</dd>
+ <dt><code>args</code></dt>
+ <dd>Массив аргументов, переданный в метод</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>По умолчанию, при попытке вызвать не существующий в объекте метод, будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Это поведение можно обойти, определив функцию <code>__noSuchMethod__</code> в качестве члена объекта. Функция принимает два аргумента, первый является именем метода, который попытались вызвать, а второй — массивом аргументов, которые были переданы в метод при его вызове. Второй аргумент является настойщим массивом (то есть, он наследуется через цепочку прототипов от {{jsxref("Array.prototype")}}), а не массивоподобным <a href="/ru/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments">объектом arguments</a>.</p>
+<p>Если данный метод не может быть вызван, либо по причине того, что он установлен в {{jsxref("Global_Objects/undefined", "undefined")}} по умолчанию, либо удалён, либо вручную установлен в не-функцию, движок JavaScript вернётся к выбрасыванию исключения {{jsxref("Global_Objects/TypeError", "TypeError")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Simple_test_of___noSuchMethod__" name="Example:_Simple_test_of___noSuchMethod__">Пример: простая проверка свойства <code>__noSuchMethod__</code></h3>
+<pre class="brush: js">var o = {
+ __noSuchMethod__: function(id, args) { console.log(id, '(' + args.join(', ') + ')'); }
+};
+
+o.foo(1, 2, 3);
+o.bar(4, 5);
+o.baz();
+
+// Вывод
+// foo (1, 2, 3)
+// bar (4, 5)
+// baz ()
+</pre>
+
+<h3 id="Example:_Using___noSuchMethod___to_simulate_multiple_inheritance" name="Example:_Using___noSuchMethod___to_simulate_multiple_inheritance">Пример: использование свойства <code>__noSuchMethod__</code> для симуляции множественного наследования</h3>
+<p>Ниже показан пример кода, реализующего примитивную форму множественного наследования.</p>
+<pre class="brush: js">// Не работает с множественным наследованием объектов в качестве родителей
+function noMethod(name, args) {
+ var parents = this.__parents_;
+
+ // Пройдёмся по всем родителям
+ for (var i = 0; i &lt; parents.length; i++) {
+ // Если нашли функцию в родителе, вызовем её
+ if (typeof parents[i][name] == 'function') {
+ return parents[i][name].apply(this, args);
+ }
+ }
+
+ // Если мы здесь, метод не был найден
+ throw new TypeError;
+}
+
+// Используется для добавления родителя при множественном наследовании
+function addParent(obj, parent) {
+ // Если объект ещё не инициализирован, инициализируем его
+ if (!obj.__parents_) {
+ obj.__parents_ = [];
+ obj.__noSuchMethod__ = noMethod;
+ }
+
+ // Добавляем родителя
+ obj.__parents_.push(parent);
+}
+</pre>
+<p>Ниже показан пример использования этой идеи.</p>
+<pre class="brush: js">// Пример первого базового класса
+
+function NamedThing(name) {
+ this.name = name;
+}
+
+NamedThing.prototype = {
+ getName: function() { return this.name; },
+ setName: function(newName) { this.name = newName; }
+}
+
+// Пример второго базового класса
+
+function AgedThing(age){
+ this.age = age;
+}
+
+AgedThing.prototype = {
+ getAge: function() { return this.age; },
+ setAge: function(age) { this.age = age; }
+}
+
+// Дочерний класс. Наследуется от NamedThing и AgedThing, а также определяет свойство address
+
+function Person(name, age, address) {
+ addParent(this, NamedThing.prototype);
+ NamedThing.call(this, name);
+ addParent(this, AgedThing.prototype);
+ AgedThing.call(this, age);
+ this.address = address;
+}
+
+Person.prototype = {
+ getAddr: function() { return this.address; },
+ setAddr: function(addr) { this.address = addr; }
+}
+
+var bob = new Person('Боб', 25, 'Нью-Йорк');
+
+console.log('getAge лежит ' + (('getAge' in bob) ? 'в' : 'не в') + ' объекте bob');
+console.log('возраст Боба: ' + bob.getAge());
+console.log('getName лежит ' + (('getName' in bob) ? 'в' : 'не в') + ' объекте bob');
+console.log('имя Боба: ' + bob.getName());
+console.log('getAddr лежит ' + (('getAddr' in bob) ? 'в' : 'не в') + ' объекте bob');
+console.log('адрес Боба: ' + bob.getAddr());
+</pre>
+<p>Вывод примера будет следующим:</p>
+<pre>getAge лежит не в объекте bob
+возраст Боба: 25
+getName лежит не в объекте bob
+имя Боба: Боб
+getAddr лежит в объекте bob
+адрес Боба: Нью-Йорк
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/object/observe/index.html b/files/ru/web/javascript/reference/global_objects/object/observe/index.html
new file mode 100644
index 0000000000..25fe9c879b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/observe/index.html
@@ -0,0 +1,142 @@
+---
+title: Object.observe()
+slug: Web/JavaScript/Reference/Global_Objects/Object/observe
+tags:
+ - ECMAScript7
+ - Experimental
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+translation_of: Archive/Web/JavaScript/Object.observe
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Object.observe()</code></strong> используется для асинхронного обзора изменений в объекте. Он предоставляет поток изменений в порядке их возникновения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.observe(<var>obj</var>, <var>callback</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Обозреваемый объект.</dd>
+ <dt><code>callback</code></dt>
+ <dd>Функция, вызываемая при возникновении изменений в объекте, принимает следующий аргумент:
+ <dl>
+ <dt><code>changes</code></dt>
+ <dd>Массив объектов, представляющих одно изменение. Объекты с изменениями содержат следующие свойства:
+ <ul>
+ <li><strong><code>name</code></strong>: имя изменённого свойства.</li>
+ <li><strong><code>object</code></strong>: изменённый объект после изменения.</li>
+ <li><strong><code>type</code></strong>: строка, указывающая тип произошедшего изменения. Может принимать одно из значений: <code>"add"</code>, <code>"update"</code> или <code>"delete"</code>.</li>
+ <li><strong><code>oldValue</code></strong>: только для типов <code>"update"</code> и <code>"delete"</code>. Значение до изменения.</li>
+ </ul>
+ </dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Функция <code>callback</code> вызывается каждый раз при возникновении изменений в объекте <code>obj</code> с массивом всех изменений в порядке их возникновения.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example.3A_Logging_all_three_different_types" name="Example.3A_Logging_all_three_different_types">Пример: журналирование всех трёх типов изменений</h3>
+
+<pre class="brush: js">var obj = {
+ foo: 0,
+ bar: 1
+};
+
+Object.observe(obj, function(changes) {
+ console.log(changes);
+});
+
+obj.baz = 2;
+// [{name: 'baz', object: &lt;obj&gt;, type: 'add'}]
+
+obj.foo = 'hello';
+// [{name: 'foo', object: &lt;obj&gt;, type: 'update', oldValue: 0}]
+
+delete obj.baz;
+// [{name: 'baz', object: &lt;obj&gt;, type: 'delete', oldValue: 2}]
+</pre>
+
+<h3 id="Example.3A_Data_Binding" name="Example.3A_Data_Binding">Пример: привязка данных</h3>
+
+<pre class="brush: js">// Пользовательская модель
+var user = {
+ id: 0,
+ name: 'Брендан Айк',
+ title: 'М-р.'
+};
+
+// Создаёт приветствие для пользователя
+function updateGreeting() {
+ user.greeting = 'Здравствуйте, ' + user.title + ' ' + user.name + '!';
+}
+updateGreeting();
+
+Object.observe(user, function(changes) {
+ changes.forEach(function(change) {
+ // Любое изменение имени или обращения обновит привествие
+ if (change.name === 'name' || change.name === 'title') {
+ updateGreeting();
+ }
+ });
+});
+</pre>
+
+<p> </p>
+
+<h3 id="Custom_change_type">Custom change type</h3>
+
+<pre><code>// A point on a 2D plane
+var point = {x: 0, y: 0, distance: 0};
+
+function setPosition(pt, x, y) {
+ // Performing a custom change
+ Object.getNotifier(pt).performChange('reposition', function() {
+ var oldDistance = pt.distance;
+ pt.x = x;
+ pt.y = y;
+ pt.distance = Math.sqrt(x * x + y * y);
+ return {oldDistance: oldDistance};
+ });
+}
+
+Object.observe(point, function(changes) {
+ console.log('Distance change: ' + (point.distance - changes[0].oldDistance));
+}, ['reposition']);
+
+setPosition(point, 3, 4);
+// Distance change: 5</code></pre>
+
+<p> </p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p><a href="https://github.com/arv/ecmascript-object-observe">Черновое предложение к обсуждению для ECMAScript 7</a>.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div> </div>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Object.observe")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.unobserve()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Array.observe()")}} {{experimental_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/parent/index.html b/files/ru/web/javascript/reference/global_objects/object/parent/index.html
new file mode 100644
index 0000000000..d9e5c1ddd9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/parent/index.html
@@ -0,0 +1,75 @@
+---
+title: Object.prototype.__parent__
+slug: Web/JavaScript/Reference/Global_Objects/Object/parent
+tags:
+ - JavaScript
+ - Object
+ - Obsolete
+ - Property
+ - Prototype
+translation_of: Archive/Web/JavaScript/Object.parent
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}} {{obsolete_header("2")}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>__parent__</code></strong> использовалось для указания контекста объекта, но было удалено.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.__parent__</code></pre>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Для объектов верхнего уровня, это, например, окно.</p>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a class="external" href="http://whereswalden.com/2010/05/07/spidermonkey-change-du-jour-the-special-__parent__-property-has-been-removed/">Изменение дня в SpiderMonkey: специальное свойство __parent__ будет удалено</a></li>
+ <li><a href="/ru/docs/Components.utils.getGlobalForObject">Components.utils.getGlobalForObject</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/preventextensions/index.html b/files/ru/web/javascript/reference/global_objects/object/preventextensions/index.html
new file mode 100644
index 0000000000..6488f99506
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/preventextensions/index.html
@@ -0,0 +1,120 @@
+---
+title: Object.preventExtensions()
+slug: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/preventExtensions
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<p>Метод <code><strong>Object.preventExtensions()</strong></code> предотвращает добавление новых свойств к объекту (то есть, предотвращает расширение этого объекта в будущем).</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-preventextensions.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js"><code>Object.preventExtensions(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, который нужно сделать нерасширяемым.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Объект, который делается нерасширяемым.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объект называется расширяемым, если к нему могут быть добавлены новые свойства. <code>Object.preventExtensions()</code> помечает объект как нерасширяемый, так что он никогда не будет иметь других свойств, кроме тех, что были у него на момент пометки его нерасширяемым. Обратите внимание, что, в общем случае, свойства нерасширяемого объекта всё ещё могут быть <em>удалены</em>. Попытка добавить новые свойства к нерасширяемому объекту потерпит неудачу, либо молча, либо с выбрасыванием исключения {{jsxref("Global_Objects/TypeError", "TypeError")}} (как правило, но не обязательно, это происходит в {{jsxref("Functions_and_function_scope/Strict_mode", "строгом режиме", "", 1)}}).</p>
+
+<p>Метод <code>Object.preventExtensions()</code> предотвращает добавление только собственных свойств. Свойства всё ещё могут быть добавлены в прототип объекта. Однако, вызов <code>Object.preventExtensions()</code> на объекте также предотвращает расширение его свойства {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}}.</p>
+
+<p>Если превратить расширяемый объект в нерасширяемый возможно, в ECMAScript 5 нет никакого способа сделать обратную операцию.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">// Object.preventExtensions возвращает объект, который нужно сделать нерасширяемым.
+var obj = {};
+var obj2 = Object.preventExtensions(obj);
+assert(obj === obj2);
+
+// Объекты по умолчанию являются расширяемыми.
+var empty = {};
+assert(Object.isExtensible(empty) === true);
+
+// ...но это может быть изменено.
+Object.preventExtensions(empty);
+assert(Object.isExtensible(empty) === false);
+
+// Object.defineProperty выбрасывает исключение при добавлении нового свойства в нерасширяемый объект.
+var nonExtensible = { removable: true };
+Object.preventExtensions(nonExtensible);
+Object.defineProperty(nonExtensible, 'new', { value: 8675309 }); // выбросит TypeError
+
+// В строгом режиме, попытки добавить новые свойства к нерасширяемому объекту, будут выбрасывать исключение TypeError.
+function fail() {
+ 'use strict';
+ nonExtensible.newProperty = 'ОШИБКА'; // выбросит TypeError
+}
+fail();
+
+// РАСШИРЕНИЕ (работает только в движках, поддерживающих свойство __proto__
+// (которое является устаревшим. Используйте вместо него метод Object.getPrototypeOf)):
+// нерасширяемые объекты неизменны.
+var fixed = Object.preventExtensions({});
+fixed.__proto__ = { oh: 'hai' }; // выбросит TypeError
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться как простой нерасширяемый объект и метод его просто вернёт.</p>
+
+<pre class="brush: js">&gt; Object.preventExtensions(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.preventExtensions(1)
+1 // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.10', 'Object.preventExtensions')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.preventextensions', 'Object.preventExtensions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.preventExtensions")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+ <li>{{jsxref("Object.seal()")}}</li>
+ <li>{{jsxref("Object.isSealed()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+ <li>{{jsxref("Object.isFrozen()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/propertyisenumerable/index.html b/files/ru/web/javascript/reference/global_objects/object/propertyisenumerable/index.html
new file mode 100644
index 0000000000..018edd3ca3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/propertyisenumerable/index.html
@@ -0,0 +1,173 @@
+---
+title: Object.prototype.propertyIsEnumerable()
+slug: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/propertyIsEnumerable
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>propertyIsEnumerable()</strong></code> возвращает логическое значение, указывающее, является ли указанное свойство перечисляемым.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.propertyIsEnumerable(<var>prop</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Имя проверяемого свойства.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Каждый объект имеет метод <code>propertyIsEnumerable</code>. Этот метод может определять, является ли указанное свойство в объекте перечисляемым в цикле {{jsxref("Statements/for...in", "for...in")}}, за исключением свойств, унаследованных из цепочки прототипов. Если объект не имеет указанного свойства, метод вернёт <code>false</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_A_basic_use_of_propertyIsEnumerable" name="Example:_A_basic_use_of_propertyIsEnumerable">Пример: базовое использование <code>propertyIsEnumerable</code></h3>
+<p>Следующий пример показывает использование метода <code>propertyIsEnumerable</code> на объектах и массивах:</p>
+<pre class="brush: js">var o = {};
+var a = [];
+o.prop = 'перечисляемое';
+a[0] = 'перечисляемое';
+
+o.propertyIsEnumerable('prop'); // вернёт true
+a.propertyIsEnumerable(0); // вернёт true
+</pre>
+
+<h3 id="Example:_User-defined_versus_built-in_objects" name="Example:_User-defined_versus_built-in_objects">Пример: определённые пользователем и встроенные объекты</h3>
+<p>Следующий пример демонстрирует перечисляемость свойств, определённых пользователем и встроенных свойств:</p>
+<pre class="brush: js">var a = ['перечисляемое'];
+
+a.propertyIsEnumerable(0); // вернёт true
+a.propertyIsEnumerable('length'); // вернёт false
+
+Math.propertyIsEnumerable('random'); // вернёт false
+this.propertyIsEnumerable('Math'); // вернёт false
+</pre>
+
+<h3 id="Example:_Direct_versus_inherited_properties" name="Example:_Direct_versus_inherited_properties">Пример: собственные и унаследованные свойства</h3>
+<pre class="brush: js">var a = [];
+a.propertyIsEnumerable('constructor'); // вернёт false
+
+function firstConstructor() {
+ this.property = 'не перечисляемое';
+}
+
+firstConstructor.prototype.firstMethod = function() {};
+
+function secondConstructor() {
+ this.method = function method() { return 'перечисляемый'; };
+}
+
+secondConstructor.prototype = new firstConstructor;
+secondConstructor.prototype.constructor = secondConstructor;
+
+var o = new secondConstructor();
+o.arbitraryProperty = 'перечисляемое';
+
+o.propertyIsEnumerable('arbitraryProperty'); // вернёт true
+o.propertyIsEnumerable('method'); // вернёт true
+o.propertyIsEnumerable('property'); // вернёт false
+
+o.property = 'перечисляемое';
+
+o.propertyIsEnumerable('property'); // вернёт true
+
+// Эти вызовы вернут false, поскольку все свойства находятся в прототипе,
+// который метод propertyIsEnumerable не просматривает (даже несмотря на то,
+// что последние два свойства перечисляются через цикл for...in)
+o.propertyIsEnumerable('prototype'); // вернёт false (в JS 1.8.1/FF3.6)
+o.propertyIsEnumerable('constructor'); // вернёт false
+o.propertyIsEnumerable('firstMethod'); // вернёт false
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.7', 'Object.prototype.propertyIsEnumerable')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.propertyisenumerable', 'Object.prototype.propertyIsEnumerable')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Особый случай с Gecko</h3>
+<p>Начиная с JavaScript 1.8.1 (в Firefox 3.6), метод <code>propertyIsEnumerable('prototype')</code> возвращает <code>false</code> вместо <code>true</code>; это делает результат совместимым с ECMAScript 5.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a href="/ru/docs/Enumerability_and_ownership_of_properties">Перечисляемость и собственность свойств</a></li>
+ <li>{{jsxref("Statements/for...in", "for...in")}}</li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/proto/index.html b/files/ru/web/javascript/reference/global_objects/object/proto/index.html
new file mode 100644
index 0000000000..3ee717a370
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/proto/index.html
@@ -0,0 +1,151 @@
+---
+title: Object.prototype.__proto__
+slug: Web/JavaScript/Reference/Global_Objects/Object/proto
+tags:
+ - JavaScript
+ - Object
+ - Property
+ - Prototype
+ - Reference
+ - Référence(2)
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/proto
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<div class="warning">
+<p><strong>Предупреждение:</strong> Изменение прототипа <code>[[Prototype]]</code> объекта является, по самой природе оптимизации доступа к свойствам в современных движках JavaScript, очень медленной операцией, это справедливо для <strong><em>любого</em></strong> браузера и движка JavaScript. Изменение прототипов очень тонко и обширно влияет на производительность, причём это влияние не ограничивается просто временем для операции присваивания <code>obj.__proto__ = ...</code>, оно может распространяться на <strong><em>любой</em></strong> код, который имеет доступ к <strong><em>любому</em></strong> объекту, чей прототип <code>[[Prototype]]</code> был изменён. Если вы заботитесь о производительности, вы никогда не должны изменять прототип <code>[[Prototype]]</code> объекта. Вместо этого создайте объект с нужным прототипом <code>[[Prototype]]</code>, с помощью метода {{jsxref("Object.create()")}}.</p>
+</div>
+
+<div class="warning">
+<p><strong>Предупреждение:</strong> хотя на сегодняшний момент большинство браузеров поддерживают свойство <code>Object.prototype.__proto__</code>, его поведение только недавно было стандартизировано в новой спецификации ECMAScript 6. Если вам требуется поддержка браузеров до этой спецификации, рекомендуется использовать вместо него метод {{jsxref("Object.getPrototypeOf()")}}.</p>
+</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <code>__proto__</code> объекта {{jsxref("Object.prototype")}} является свойством доступа (комбинацией геттера и сеттера), которое расширяет внутренний прототип <code>[[Prototype]]</code> объекта (являющийся объектом или {{jsxref("Global_Objects/null", "null")}}), через который осуществлялся доступ.</p>
+
+<p>Использование свойства <code>__proto__</code> вызывает споры и многих оно разочаровало. Ранее оно никогда не включалось в спецификацию EcmaScript, но современные браузеры всё равно решили его реализовать. Сегодня свойство <code>__proto__</code> стандартизировано в спецификации ECMAScript 6 и будет поддерживаться в будущем. Тем не менее, изменение прототипа <code>[[Prototype]]</code> объекта всё ещё остаётся медленной операцией, которую следует избегать, если вы беспокоитесь о производительности.</p>
+
+<p>Свойство <code>__proto__</code> также может использоваться при определении литерала объекта, устанавливая прототип <code>[[Prototype]]</code> объекта при его создании. Этот способ может рассматриваться как альтернатива методу {{jsxref("Object.create()")}}. Смотрите также <a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">литеральный синтаскис инициализации объекта</a>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="brush: js">var shape = {}, circle = new Circle();
+
+// Установка прототипа объекта
+shape.__proto__ = circle;
+// Получение прототипа объекта
+console.log(shape.__proto__ === circle); // true
+</pre>
+
+<p>Обратите внимание: название свойства состоит из двух подчёркиваний, следующих за ними пяти символов «proto» и следующих за ними ещё двух подчёркиваний.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Геттер свойства <code>__proto__</code> расширяет значение внутреннего прототипа <code>[[Prototype]]</code> объекта. Для объектов, созданных с использованием литеральной формы создания объекта, это значение равно {{jsxref("Object.prototype")}}. Для функций это значение равно {{jsxref("Function.prototype")}}. Для объектов, созданных с использованием формы <code>new fun</code>, где <code>fun</code> является одной из встроенных функций-конструкторов, предоставляемых JavaScript ({{jsxref("Global_Objects/Array", "Array")}}, {{jsxref("Global_Objects/Boolean", "Boolean")}}, {{jsxref("Global_Objects/Date", "Date")}}, {{jsxref("Global_Objects/Number", "Number")}}, {{jsxref("Global_Objects/Object", "Object")}}, {{jsxref("Global_Objects/String", "String")}} и так далее — включая новые конструкторы, добавленные в процессе развития JavaScript), это значение равно <code>fun.prototype</code>. Для объектов, созданных с использованием формы <code>new fun</code>, где <code>fun</code> является функцией, определённой в скрипте, это значение равно значению <code>fun.prototype</code> во время вычисления <code>new fun</code>. Именно поэтому при присваивании <code>fun.prototype</code> нового значения, ранее созданные экземпляры <code>fun</code> продолжат использовать предыдущее значение в качестве своего прототипа <code>[[Prototype]]</code>, а последующие вызовы <code>new fun</code> будут использовать вновь присвоенное значение в качестве своего прототипа <code>[[Prototype]]</code>.</p>
+
+<p>Геттер <code>__proto__</code> позволяет прототипу <code>[[Prototype]]</code> объекта быть изменяемым. Объект должен быть расширяемым в соответствии с {{jsxref("Object.isExtensible()")}}: если это не так, выкидывается исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. Предоставляемое значение должно быть объектом или {{jsxref("Global_Objects/null", "null")}}. Предоставление любого другого значения ничего не даст.</p>
+
+<p>Для понимания того, как прототипы используются для наследования, смотрите статью руководства <a href="/ru/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain">«Наследование и цепочки прототипов»</a>.</p>
+
+<p>Свойство <code>__proto__</code> является простым свойством доступа на объекте {{jsxref("Object.prototype")}} — свойством, состоящим из геттера и сеттера. Свойство <code>__proto__</code> будет найдено, если, в конечном итоге, его поиск пройдёт через {{jsxref("Object.prototype")}}, но при доступе к нему не через {{jsxref("Object.prototype")}}, оно найдено не будет. Если перед просмотром {{jsxref("Object.prototype")}} буден найдено какое-нибудь другое свойство <code>__proto__</code>, оно скроет искомое свойство {{jsxref("Object.prototype")}}.</p>
+
+<pre class="brush: js">var noProto = Object.create(null);
+
+console.log(typeof noProto.__proto__); // undefined
+console.log(Object.getPrototypeOf(noProto)); // null
+
+noProto.__proto__ = 17;
+
+console.log(noProto.__proto__); // 17
+console.log(Object.getPrototypeOf(noProto)); // null
+
+var protoHidden = {};
+Object.defineProperty(protoHidden, '__proto__',
+ { value: 42, writable: true, configurable: true, enumerable: true });
+
+console.log(protoHidden.__proto__); // 42
+console.log(Object.getPrototypeOf(protoHidden) === Object.prototype); // true
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>В следующем примере создаётся новый экземпляр <code>Employee</code>, а затем проверяется, что его свойство <code>__proto__</code> является тем же самым объектом, что и его конструктор <code>prototype</code>.</p>
+
+<pre class="brush: js">// Декларируем функцию, используемую как конструктор
+function Employee() {
+ /* инициализируем экземпляр */
+}
+
+// Создаём новый экземпляр Employee
+var fred = new Employee();
+
+// Проверка на эквивалентность
+fred.__proto__ === Employee.prototype; // true
+</pre>
+
+<p>В этот момент <code>fred</code> унаследован от <code>Employee</code>, однако присваивание другого объекта в <code>fred.__proto__</code> может изменить это:</p>
+
+<pre class="brush: js">function Cow() {
+ /* инициализируем экземпляр */
+}
+
+// Присваиваем __proto__ новый объект
+fred.__proto__ = Cow.prototype;
+</pre>
+
+<p>Теперь <code>fred</code> наследуется непосредственно от <code>Cow.prototype</code>, а не от <code>Employee.prototype</code>, и теряет свойства, изначально унаследованные от <code>Employee.prototype</code>.</p>
+
+<p>Однако, это применяется только к {{jsxref("Object.isExtensible()", "расширяемым", "", 1)}} объектам, у нерасширяемых объектов свойство <code>__proto__</code> не может быть изменено:</p>
+
+<pre class="brush: js">var obj = {};
+Object.preventExtensions(obj);
+
+obj.__proto__ = {}; // выкинет TypeError
+</pre>
+
+<p>Обратите внимание, что свойство <code>__proto__</code> может быть переопределено даже у объекта <code>Object.prototype</code>, если новая цепочка заканчивается {{jsxref("Global_Objects/null", "null")}}:</p>
+
+<pre class="brush: js">var b = {};
+
+Object.prototype.__proto__ =
+ Object.create(null, // [[Prototype]]
+ { hi: { value: function() { alert('hi'); } } });
+
+b.hi();
+</pre>
+
+<p>Если свойство <code>__proto__</code> объекта {{jsxref("Object.prototype")}} не установлено в {{jsxref("Global_Objects/null", "null")}}, или в другой объект, чья цепочка прототипов, в конечном итоге, явно не заканчивается значением {{jsxref("Global_Objects/null", "null")}}, будет выкинуто исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} «циклическое значение __proto__», поскольку цепочка должна заканчиваться {{jsxref("Global_Objects/null", "null")}} (как это и происходит на {{jsxref("Object.prototype")}} при нормальных обстоятельствах).</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-additional-properties-of-the-object.prototype-object', 'Object.prototype.__proto__')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Включён в (нормативное) приложение для дополнительных возможностей ECMAScript для веб-браузеров (обратите внимание, что спецификация закрепляет то, что уже реализовано).</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="note">
+<p><strong>Примечание:</strong> спецификация ES6 требует поддержку свойства <code>__proto__</code> только в браузерах и не требует его поддержку в других окружениях (хотя оно и рекомендуется в качестве обязательного). Если ваш код должен работать в не-браузерных окружениях, вместо свойства рекомендуется использовать методы {{jsxref("Object.getPrototypeOf()")}} и {{jsxref("Object.setPrototypeOf()")}}.</p>
+</div>
+
+<div>{{Compat("javascript.builtins.Object.proto")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.getPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.setPrototypeOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/prototype/index.html b/files/ru/web/javascript/reference/global_objects/object/prototype/index.html
new file mode 100644
index 0000000000..2a93da56b5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/prototype/index.html
@@ -0,0 +1,204 @@
+---
+title: Object.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Object/prototype
+tags:
+ - JavaScript
+ - Object
+ - Property
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <code><strong>Object.prototype</strong></code> представляет объект прототипа {{jsxref("Global_Objects/Object", "Object")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Все объекты в JavaScript являются потомками {{jsxref("Global_Objects/Object", "Object")}}; все объекты наследуют методы и свойства из прототипа объекта <code>Object.prototype</code>, хотя они и могут быть переопределены (за исключением объекта <code>Object</code> с прототипом <code>null</code>, то есть, созданным вызовом <code>Object.create(null)</code>). Например, прототипы других конструкторов переопределяют свойство <code>constructor</code> и предоставляют свои собственные методы {{jsxref("Object.prototype.toString()", "toString()")}}. Изменения в объекте прототипа {{jsxref("Global_Objects/Object", "Object")}} распространяются на все объекты до тех пор, пока свойства и методы, учитывающие эти изменения, не переопределяются дальше по цепочке прототипов.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("Object.prototype.constructor")}}</dt>
+ <dd>Определяет функцию, создающую прототип объекта.</dd>
+ <dt>{{jsxref("Object.proto", "Object.prototype.__proto__")}} {{non-standard_inline}}</dt>
+ <dd>Указывает на объект, который использовался в качестве прототипа при инстанцировании объекта.</dd>
+ <dt>{{jsxref("Object.noSuchMethod", "Object.prototype.__noSuchMethod__")}} {{non-standard_inline}}</dt>
+ <dd>Позволяет определить функцию, выполняющуюся при вызове в качестве метода неопределённого члена объекта.</dd>
+ <dt><s class="obsoleteElement">{{jsxref("Object.count", "Object.prototype.__count__")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Использовалось для возврата количества перечисляемых свойств, определённых напрямую на пользовательском объекте, но было удалено.</s></dd>
+ <dt><s class="obsoleteElement">{{jsxref("Object.parent", "Object.prototype.__parent__")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Использовалось для указания контекста объекта, но было удалено.</s></dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Object.defineGetter", "Object.prototype.__defineGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
+ <dd>Ассоциирует функцию со свойством, которое, при доступе к нему, выполняет эту функцию и возвращает её возвращаемое значение.</dd>
+ <dt>{{jsxref("Object.defineSetter", "Object.prototype.__defineSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
+ <dd>Ассоциирует функцию со свойством, которое, при его установке, выполняет эту функцию, изменяющую свойство.</dd>
+ <dt>{{jsxref("Object.lookupGetter", "Object.prototype.__lookupGetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
+ <dd>Возвращает функцию, ассоциированную с указанным свойством методом {{jsxref("Object.defineGetter", "__defineGetter__")}}.</dd>
+ <dt>{{jsxref("Object.lookupSetter", "Object.prototype.__lookupSetter__()")}} {{non-standard_inline}} {{deprecated_inline}}</dt>
+ <dd>Возвращает функцию, ассоциированную с указанным свойством методом {{jsxref("Object.defineSetter", "__defineSetter__")}}.</dd>
+ <dt>{{jsxref("Object.prototype.hasOwnProperty()")}}</dt>
+ <dd>Возвращает логическое значение, указывающее, содержит ли указанное свойство непосредственно объект, или он унаследовал его по цепочке прототипов.</dd>
+ <dt>{{jsxref("Object.prototype.isPrototypeOf()")}}</dt>
+ <dd>Возвращает логическое значение, указывающее, состоит ли указанный объект в цепочке прототипов объекта, на котором был вызван данный метод.</dd>
+ <dt>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</dt>
+ <dd>Возвращает логическое значение, указывающее, установлен ли внутренний <a href="/ru/docs/ECMAScript_DontEnum_attribute">атрибут ECMAScript DontEnum</a>.</dd>
+ <dt>{{jsxref("Object.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает строку, содержащую исходный код объекта в литеральной форме, представляющего объект, на котором был вызван данный метод; вы можете использовать это значение для создания нового объекта.</dd>
+ <dt>{{jsxref("Object.prototype.toLocaleString()")}}</dt>
+ <dd>Вызывает {{jsxref("Object.toString", "toString()")}}.</dd>
+ <dt>{{jsxref("Object.prototype.toString()")}}</dt>
+ <dd>Возвращает строковое представление объекта.</dd>
+ <dt>{{jsxref("Object.prototype.unwatch()")}} {{non-standard_inline}}</dt>
+ <dd>Удаляет точку наблюдения (watchpoint) со свойства объекта.</dd>
+ <dt>{{jsxref("Object.prototype.valueOf()")}}</dt>
+ <dd>Возвращает значение примитива указанного объекта.</dd>
+ <dt>{{jsxref("Object.prototype.watch()")}} {{non-standard_inline}}</dt>
+ <dd>Добавляет точку наблюдения (watchpoint) к свойству объекта.</dd>
+ <dt><s class="obsoleteElement">{{jsxref("Object.prototype.eval()")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Использовался для вычисления строки с JavaScript-кодом в контексте указанного объекта, но был удалён.</s></dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Поскольку Javascript, строго говоря, не имеет объекты подклассов, прототип является полезным обходным путём создания объекта «базового класса» из определённых функций, которые выступают в роли объектов. Например:</p>
+
+<pre class="brush: js">var Person = function(name) {
+ this.name = name;
+ this.canTalk = true;
+ this.greet = function() {
+ if (this.canTalk) {
+ console.log('Привет, я ' + this.name);
+ }
+ };
+};
+
+var Employee = function(name, title) {
+ this.name = name;
+ this.title = title;
+ this.greet = function() {
+ if (this.canTalk) {
+ console.log('Привет, я ' + this.name + ', ' + this.title);
+ }
+ };
+};
+Employee.prototype = new Person();
+
+var Customer = function(name) {
+ this.name = name;
+};
+Customer.prototype = new Person();
+
+var Mime = function(name) {
+ this.name = name;
+ this.canTalk = false;
+};
+Mime.prototype = new Person();
+
+var bob = new Employee('Боб', 'Строитель');
+var joe = new Customer('Джо');
+var rg = new Employee('Ред Грин', 'Разнорабочий');
+var mike = new Customer('Майк');
+var mime = new Mime('Мим');
+bob.greet();
+joe.greet();
+rg.greet();
+mike.greet();
+mime.greet();
+</pre>
+
+<p>Вывод будет следующим:</p>
+
+<pre class="brush: js">Привет, я Боб, Строитель
+Привет, я Джо
+Привет, я Ред Грин, Разнорабочий
+Привет, я Майк
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.1', 'Object.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype', 'Object.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/object/seal/index.html b/files/ru/web/javascript/reference/global_objects/object/seal/index.html
new file mode 100644
index 0000000000..6514429ca6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/seal/index.html
@@ -0,0 +1,119 @@
+---
+title: Object.seal()
+slug: Web/JavaScript/Reference/Global_Objects/Object/seal
+tags:
+ - ECMAScript5
+ - JavaScript
+ - JavaScript 1.8.5
+ - Method
+ - Object
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/seal
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<p>Метод <strong><code>Object.seal()</code></strong> запечатывает объект, предотвращая добавление новых свойств к объекту и делая все существующие свойства не настраиваемыми. Значения представленных свойств всё ещё могут изменяться, поскольку они остаются записываемыми.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.seal(<var>obj</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Запечатываемый объект.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>По умолчанию, объекты являются {{jsxref("Object.isExtensible()", "расширяемыми", "", 1)}} (к ним могут добавляться новые свойства). Запечатывание объекта предотвращает добавление к нему новых свойств и делает все существующие свойства не настраиваемыми. Оно делает все свойства объекта фиксированными и неизменными. Пометка всех свойств объекта как не настраиваемых также предотвращает их преобразование из свойств данных в свойства доступа и наоборот, но не предотвращает изменение значения свойств данных. Попытки удаления или добавления свойств к запечатанному объекту, либо преобразования свойств данных в свойства доступа и наоборот, будут терпеть неудачу, либо молча, либо с выбрасыванием исключения {{jsxref("Global_Objects/TypeError", "TypeError")}} (как правило, но не обязательно, это происходит в {{jsxref("Strict_mode", "строгом режиме", "", 1)}}).</p>
+
+<p>Цепочка прототипов не затрагивается. Однако, свойство {{jsxref("Object.proto", "__proto__")}} {{deprecated_inline}} также запечатыватся.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var obj = {
+ prop: function() {},
+ foo: 'bar'
+};
+
+// Новые свойства могу быть добавлены, существующие свойства могут быть изменены или удалены.
+obj.foo = 'baz';
+obj.lumpy = 'woof';
+delete obj.prop;
+
+var o = Object.seal(obj);
+
+assert(o === obj);
+assert(Object.isSealed(obj) === true);
+
+// Изменение значений свойств на запечатанном объекте всё ещё работает.
+obj.foo = 'quux';
+
+// Но вы не можете преобразовать свойства данных в свойства доступа и наоборот.
+Object.defineProperty(obj, 'foo', { get: function() { return 'g'; } }); // выбросит TypeError
+
+// Теперь любые изменения, кроме изменения значений свойств, не будут работать.
+obj.quaxxor = 'дружелюбная утка'; // молча не добавит свойство
+delete obj.foo; // молча не удалит свойство
+
+// ...а в строгом режиме такие попытки будут выбрасывать исключения TypeError.
+function fail() {
+ 'use strict';
+ delete obj.foo; // выбросит TypeError
+ obj.sparky = 'arf'; // выбросит TypeError
+}
+fail();
+
+// Попытка добавить что-то через Object.defineProperty также выбросит исключение.
+Object.defineProperty(obj, 'ohai', { value: 17 }); // выбросит TypeError
+Object.defineProperty(obj, 'foo', { value: 'eit' }); // изменяем значение существующего свойства
+</pre>
+
+<h2 id="Notes" name="Notes">Примечания</h2>
+
+<p>В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}. В ES6 такой аргумент будет рассматриваться, как простой запечатанный объект и метод его просто вернёт.</p>
+
+<pre class="brush: js">&gt; Object.seal(1)
+TypeError: 1 is not an object // код ES5
+
+&gt; Object.seal(1)
+1 // код ES6
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.3.8', 'Object.seal')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.seal', 'Object.seal')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.seal")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.isSealed()")}}</li>
+ <li>{{jsxref("Object.preventExtensions()")}}</li>
+ <li>{{jsxref("Object.isExtensible()")}}</li>
+ <li>{{jsxref("Object.freeze()")}}</li>
+ <li>{{jsxref("Object.isFrozen()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/setprototypeof/index.html b/files/ru/web/javascript/reference/global_objects/object/setprototypeof/index.html
new file mode 100644
index 0000000000..2baf613db5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/setprototypeof/index.html
@@ -0,0 +1,256 @@
+---
+title: Object.setPrototypeOf()
+slug: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+ - Référence(2)
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<div class="warning">
+<p><strong>Предупреждение:</strong> Изменение прототипа <code>[[Prototype]]</code> объекта является, по самой природе оптимизации доступа к свойствам в современных движках JavaScript, очень медленной операцией, это справедливо для <strong><em>любого</em></strong> браузера и движка JavaScript. Изменение прототипов очень тонко и обширно влияет на производительность, причём это влияние не ограничивается просто временем, проведённым внутри метода <code>Object.setPrototypeOf()</code>, оно может распространяться на <strong><em>любой</em></strong> код, который имеет доступ к <strong><em>любому</em></strong> объекту, чей прототип <code>[[Prototype]]</code> был изменён. Если вы заботитесь о производительности, вы никогда не должны изменять прототип <code>[[Prototype]]</code> объекта. Вместо этого создайте объект с нужным прототипом <code>[[Prototype]]</code>, с помощью метода {{jsxref("Object.create()")}}.</p>
+</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>Object.setPrototypeOf()</code></strong> устанавливает прототип (то есть, внутреннее свойство <code>[[Prototype]]</code>) указанного объекта в другой объект или {{jsxref("null")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.setPrototypeOf(<var>obj</var>, <var>prototype</var>);</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, которому устанавливается прототип.</dd>
+ <dt><code>prototype</code></dt>
+ <dd>Новый прототип объекта (объект или {{jsxref("null")}}).</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Выкидывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}, если объект, чей прототип <code>[[Prototype]]</code> является не расширяемым, согласно методу {{jsxref("Object.isExtensible()")}}. Не делает ничего, если параметр <code>prototype</code> не является объектом или значением {{jsxref("null")}} (то есть, является числом, строкой, логическим значением или {{jsxref("undefined")}}). В противном случае метод устанавливает прототип <code>[[Prototype]]</code> объекта <code>obj</code> в новое значение.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">var dict = Object.setPrototypeOf({}, null);
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Используя старое свойство {{jsxref("Object.proto", "Object.prototype.__proto__")}}, мы можем легко определить <code>Object.setPrototypeOf()</code>, если он ещё не доступен:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">if</span><span class="function token"> </span><span class="punctuation token">(</span><span class="parameter token"><span class="operator token">!</span>Object<span class="punctuation token">.</span>setPrototypeOf</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="class-name token"> Object</span><span class="punctuation token">.</span>prototype<span class="punctuation token">.</span><span class="function function-variable token">setPrototypeOf </span><span class="operator token">=</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="parameter token">obj<span class="punctuation token">,</span> proto</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">if</span><span class="punctuation token">(</span>obj<span class="punctuation token">.</span>__proto__<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ obj<span class="punctuation token">.</span>__proto__ <span class="operator token">=</span> proto<span class="punctuation token">;</span>
+ <span class="keyword token">return</span> obj<span class="punctuation token">;</span>
+ <span class="punctuation token">}</span> <span class="keyword token">else</span> <span class="punctuation token">{</span>
+ <span class="comment token">// Если нужно будет определить прототип у Object.create(null) объекта</span>
+ <span class="function function-variable token">var Fn </span><span class="operator token">=</span> <span class="keyword token">function</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">for</span> <span class="punctuation token">(</span><span class="keyword token">var</span> key <span class="keyword token">in</span> obj<span class="punctuation token">)</span> <span class="punctuation token">{ //Если в объект уже были определены некоторые свойства</span>
+ Object<span class="punctuation token">.</span><span class="function token">defineProperty</span><span class="punctuation token">(</span><span class="keyword token">this</span><span class="punctuation token">,</span> key<span class="punctuation token">,</span> <span class="punctuation token">{</span>
+ value<span class="punctuation token">:</span> obj<span class="punctuation token">[</span>key<span class="punctuation token">]</span><span class="punctuation token">,</span>
+ <span class="punctuation token">}</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span><span class="punctuation token">;</span>
+ <span class="class-name token">Fn</span><span class="punctuation token">.</span>prototype <span class="operator token">=</span> proto<span class="punctuation token">;</span>
+ <span class="keyword token">return</span> <span class="keyword token">new</span> <span class="class-name token">Fn</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ <span class="punctuation token">}</span>
+<span class="punctuation token">}</span></code></pre>
+
+<h2 id="Appending_Prototype_Chains" name="Appending_Prototype_Chains">Добавление цепочки прототипов</h2>
+
+<p>Сочетание метода <code>Object.getPrototypeOf()</code> и свойства {{jsxref("Object.proto", "Object.prototype.__proto__")}} позволяет добавить целую цепочку прототипов к новому прототипу объекта:</p>
+
+<pre class="brush: js">/**
+*** Object.appendChain(@object, @prototype)
+*
+* Присоединяет первый неродной прототип цепочки к новому прототипу.
+* Возвращает @object (если он был примитивным значением, оно будет преобразовано в объект).
+*
+*** Object.appendChain(@object [, "@arg_name_1", "@arg_name_2", "@arg_name_3", "..."], "@function_body")
+*** Object.appendChain(@object [, "@arg_name_1, @arg_name_2, @arg_name_3, ..."], "@function_body")
+*
+* Присоединяет первый не родной прототип цепочки к родному объекту Function.prototype, затем присоединяет
+* new Function(["@arg"(s)], "@function_body") к этой цепочке.
+* Возвращает функцию.
+*
+**/
+
+Object.appendChain = function(oChain, oProto) {
+ if (arguments.length &lt; 2) {
+ throw new TypeError('Object.appendChain - Not enough arguments');
+ }
+ if (typeof oProto === 'number' || typeof oProto === 'boolean') {
+ throw new TypeError('second argument to Object.appendChain must be an object or a string');
+ }
+
+ var oNewProto = oProto,
+ oReturn = o2nd = oLast = oChain instanceof this ? oChain : new oChain.constructor(oChain);
+
+ for (var o1st = this.getPrototypeOf(o2nd);
+ o1st !== Object.prototype &amp;&amp; o1st !== Function.prototype;
+ o1st = this.getPrototypeOf(o2nd)
+ ) {
+ o2nd = o1st;
+ }
+
+ if (oProto.constructor === String) {
+ oNewProto = Function.prototype;
+ oReturn = Function.apply(null, Array.prototype.slice.call(arguments, 1));
+ this.setPrototypeOf(oReturn, oLast);
+ }
+
+ this.setPrototypeOf(o2nd, oNewProto);
+ return oReturn;
+}
+</pre>
+
+<h3 id="Usage" name="Usage">Использование</h3>
+
+<h4 id="First_example.3A_Appending_a_chain_to_a_prototype" name="First_example.3A_Appending_a_chain_to_a_prototype">Первый пример: присоединение цепочки к прототипу</h4>
+
+<pre class="brush: js">function Mammal() {
+ this.isMammal = 'да';
+}
+
+function MammalSpecies(sMammalSpecies) {
+ this.species = sMammalSpecies;
+}
+
+MammalSpecies.prototype = new Mammal();
+MammalSpecies.prototype.constructor = MammalSpecies;
+
+var oCat = new MammalSpecies('Felis');
+
+alert(oCat.isMammal); // 'да'
+
+function Animal() {
+ this.breathing = 'да';
+}
+
+Object.appendChain(oCat, new Animal());
+
+alert(oCat.breathing); // 'да'
+</pre>
+
+<h4 id="Second_example.3A_Transforming_a_primitive_value_into_an_instance_of_its_constructor_and_append_its_chain_to_a_prototype" name="Second_example.3A_Transforming_a_primitive_value_into_an_instance_of_its_constructor_and_append_its_chain_to_a_prototype">Второй пример: преобразование примитивного значения в экземпляр его конструктора и присоединение его цепочки к прототипу</h4>
+
+<pre class="brush: js">function Symbol() {
+ this.isSymbol = 'да';
+}
+
+var nPrime = 17;
+
+alert(typeof nPrime); // 'number'
+
+var oPrime = Object.appendChain(nPrime, new Symbol());
+
+alert(oPrime); // '17'
+alert(oPrime.isSymbol); // 'да'
+alert(typeof oPrime); // 'object'
+</pre>
+
+<h4 id="Third_example.3A_Appending_a_chain_to_the_Function.prototype_object_and_appending_a_new_function_to_that_chain" name="Third_example.3A_Appending_a_chain_to_the_Function.prototype_object_and_appending_a_new_function_to_that_chain">Третий пример: присоединение цепочки к объекту <code>Function.prototype</code> и новой функции к этой цепочке</h4>
+
+<pre class="brush: js">function Person(sName) {
+ this.identity = sName;
+}
+
+var george = Object.appendChain(new Person('Георг'),
+ 'alert("Привет, парни!!");');
+
+alert(george.identity); // 'Георг'
+george(); // 'Привет, парни!!'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.setprototypeof', 'Object.setProtoypeOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("34")}}<br>
+ Смотрите <a href="https://code.google.com/p/v8/issues/detail?id=2675">Замечание 2675</a></td>
+ <td>{{CompatGeckoDesktop("31")}}<br>
+ Смотрите {{bug("885788")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("31")}}<br>
+ Смотрите {{bug("885788")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.getPrototypeOf()")}}</li>
+ <li>{{jsxref("Object.prototype.__proto__")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/tolocalestring/index.html b/files/ru/web/javascript/reference/global_objects/object/tolocalestring/index.html
new file mode 100644
index 0000000000..d420368420
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/tolocalestring/index.html
@@ -0,0 +1,103 @@
+---
+title: Object.prototype.toLocaleString()
+slug: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/toLocaleString
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}}</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>toLocaleString()</strong></code> возвращает строку, представляющую объект. Этот метод предназначен для переопределения унаследованными объектами в целях поддержки зависимости от локали.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.toLocaleString();</code></pre>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toLocaleString</code> объекта {{jsxref("Global_Objects/Object", "Object")}} возвращает результат вызова метода {{jsxref("Object.toString", "toString()")}}.</p>
+<p>Эта функция обеспечивает объектам обобщённый метод <code>toLocaleString</code>, хотя и не все объекты могут её использовать. Смотрите ниже список таких объектов.</p>
+<h3 id="Objects_overriding_toLocaleString" name="Objects_overriding_toLocaleString">Объекты, переопределяющие <code>toLocaleString</code></h3>
+<ul>
+ <li>{{jsxref("Global_Objects/Array", "Array")}}: {{jsxref("Array.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Global_Objects/Number", "Number")}}: {{jsxref("Number.prototype.toLocaleString()")}}</li>
+ <li>{{jsxref("Global_Objects/Date", "Date")}}: {{jsxref("Date.prototype.toLocaleString()")}}</li>
+</ul>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.3', 'Object.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.tolocalestring', 'Object.prototype.toLocaleString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/tosource/index.html b/files/ru/web/javascript/reference/global_objects/object/tosource/index.html
new file mode 100644
index 0000000000..bf59aac80a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/tosource/index.html
@@ -0,0 +1,138 @@
+---
+title: Object.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/Object/toSource
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/toSource
+---
+<div>{{JSRef("Global_Objects", "Object")}} {{non-standard_header}}</div>
+
+<p>Метод <strong><code>toSource()</code></strong> возвращает строку, представляющую исходный код объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Object.toSource();
+<var>obj</var>.toSource();</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>toSource()</code> возвращает следующие значения:</p>
+
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/Object", "Object")}}, метод <code>toSource()</code> возвращает следующую строку, указывающую, что исходный код не доступен:
+
+ <pre class="brush: js">function Object() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров {{jsxref("Global_Objects/Object", "Object")}}, метод <code>toSource()</code> возвращает строку, представляющую исходный код.</li>
+</ul>
+
+<p>Вы можете вызывать метод <code>toSource()</code> во время отладки для просмотра содержимого объекта.</p>
+
+<h3 id="Overriding_the_toSource_method" name="Overriding_the_toSource_method">Переопределение метода <code>toSource()</code></h3>
+
+<p>Вы можете безопасно переопределять метод <code>toSource()</code> для объектов. Например:</p>
+
+<pre class="brush: js">function Person(name) {
+ this.name = name;
+}
+
+Person.prototype.toSource = function Person_toSource() {
+ return 'new Person(' + uneval(this.name) + ')';
+};
+
+console.log(new Person('Joe').toSource()); // ---&gt; new Person("Joe")
+</pre>
+
+<h3 id="Built-in_toString_methods" name="Built-in_toString_methods">Встроенные методы <code>toSource()</code></h3>
+
+<p>Каждый тип ядра JavaScript имеет свой собственный метод <code>toSource()</code>. Вот эти объекты:</p>
+
+<ul>
+ <li>{{jsxref("Array.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Array", "Array")}}.</li>
+ <li>{{jsxref("Boolean.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Boolean", "Boolean")}}.</li>
+ <li>{{jsxref("Date.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Date", "Date")}}.</li>
+ <li>{{jsxref("Function.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Function", "Function")}}.</li>
+ <li>{{jsxref("Number.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Number", "Number")}}.</li>
+ <li>{{jsxref("Regexp.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</li>
+ <li>{{jsxref("String.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/String", "String")}}.</li>
+ <li>{{jsxref("Symbol.prototype.toSource()")}} {{non-standard_inline}} — метод объекта {{jsxref("Global_Objects/Symbol", "Symbol")}}.</li>
+ <li><code>Math.toSource()</code> — возвращает строку "Math".</li>
+</ul>
+
+<h3 id="Limitations_on_cyclical_objects" name="Limitations_on_cyclical_objects">Ограничение на циклические объекты</h3>
+
+<p>В том случае, если объекты содержат ссылки на самих себя, например циклический связанный список или дерево, которое можно обходить в обоих направлениях, метод <code>toSource()</code> не создаёт такие ссылки, начиная с Firefox 24. Например:</p>
+
+<pre class="brush: js">var obj1 = {};
+var obj2 = { a: obj1 };
+obj1.b = obj2;
+
+console.log('Циклическая ссылка: ' + (obj1.b.a == obj1));
+
+var objSource = obj1.toSource(); // вернёт "({b:{a:{}}})"
+
+obj1 = eval(objSource);
+
+console.log('Циклическая ссылка: ' + (obj1.b.a == obj1));
+</pre>
+
+<p>Если же вам позарез нужно использовать метод <code>toSource()</code> для циклической структуры, объект должен предоставить переопределённый метод <code>toSource()</code>, либо с помощью ссылки на конструктор, либо предоставив анонимную функцию.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toSource" name="Example:_Using_toSource">Пример: использование метода <code>toSource()</code></h3>
+
+<p>Следующий код определяет тип объекта <code>Dog</code> и создаёт объект <code>theDog</code> типа <code>Dog</code>:</p>
+
+<pre class="brush: js">function Dog(name, breed, color, sex) {
+ this.name = name;
+ this.breed = breed;
+ this.color = color;
+ this.sex = sex;
+}
+
+theDog = new Dog('Болтушка', 'лабрадор', 'шоколадный', 'девочка');
+</pre>
+
+<p>Вызов метода <code>toSource()</code> на объекте <code>theDog</code> отобразит исходный код JavaScript, который определяет объект:</p>
+
+<pre class="brush: js">theDog.toSource();
+// вернёт ({name:"Болтушка", breed:"лабрадор", color:"шоколадный", sex:"девочка"})
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Object.toSource")}}</p>
+
+<p> </p>
+
+<div> </div>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/tostring/index.html b/files/ru/web/javascript/reference/global_objects/object/tostring/index.html
new file mode 100644
index 0000000000..e9a1b0b116
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/tostring/index.html
@@ -0,0 +1,139 @@
+---
+title: Object.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/Object/toString
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/toString
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>toString()</strong></code> возвращает строку, представляющую объект.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-prototype-tostring.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>obj</var>.toString()</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Строка, представляющая объект.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Каждый объект имеет метод <code>toString()</code>, автоматически вызывающийся, когда объект должен быть представлен в виде текстового значения или когда объект участвует в выражении, где ожидается строка. По умолчанию, метод <code>toString()</code> наследуется каждым объектом, произошедшим от объекта {{jsxref("Global_Objects/Object", "Object")}}. Если этот метод не переопределён в пользовательском объекте, <code>toString()</code> возвращает строку вида "[object <em>тип</em>]", где <code><em>тип</em></code> — это тип объекта. Это иллюстрирует следующий код:</p>
+
+<pre class="brush: js">var o = new Object();
+o.toString(); // вернёт [object Object]
+</pre>
+
+<div class="note">
+<p><strong>Примечание:</strong> начиная с JavaScript 1.8.5, метод <code>toString()</code>, вызванный на {{jsxref("Global_Objects/null", "null")}}, возвращает строку <code>[object <em>Null</em>]</code>, а вызванный для {{jsxref("Global_Objects/undefined", "undefined")}}, возвращает строку <code>[object <em>Undefined</em>]</code>, как определено в 5-м издании ECMAScript и последующих исправлениях. Смотрите пример {{anch("Using_toString_to_detect_object_type", "использование метода toString() для определения типа объекта")}}.</p>
+</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Overriding_the_default_toString_method" name="Example:_Overriding_the_default_toString_method">Пример: переопределение метода <code>toString</code> по умолчанию</h3>
+
+<p>Вы можете создать функцию, которая будет вызываться вместо метода <code>toString()</code> по умолчанию. Метод <code>toString()</code> не принимает аргументов и должен возвращать строку. Создаваемый вами метод <code>toString()</code> может возвращать любую строку, какую вы захотите, но он будет наиболее полезным, если будет возвращать информацию об объекте.</p>
+
+<p>Следующий код определяет объект <code>Dog</code> и создаёт <code>theDog</code>, объект типа <code>Dog</code>:</p>
+
+<pre class="brush: js">function Dog(name, breed, color, sex) {
+ this.name = name;
+ this.breed = breed;
+ this.color = color;
+ this.sex = sex;
+}
+
+theDog = new Dog('Болтушка', 'лабрадор', 'шоколадный', 'девочка');
+</pre>
+
+<p>Если вы вызовете метод <code>toString()</code> на этом пользовательском объекте, он вернёт значение по умолчанию, унаследованное от {{jsxref("Global_Objects/Object", "Object")}}:</p>
+
+<pre class="brush: js">theDog.toString(); // вернёт [object Object]
+</pre>
+
+<p>Следующий код создаёт и присваивает метод <code>dogToString()</code>, переопределяющий метод <code>toString()</code> по умолчанию. Эта функция генерирует строку, содержащую кличку, породу, цвет и пол объекта, в форме "<code>свойство = значение;</code>".</p>
+
+<pre class="brush: js">Dog.prototype.toString = function dogToString() {
+ var ret = 'Собачка ' + this.name + ' - ' + this.sex + ', ' + this.color + ' ' + this.breed;
+ return ret;
+}
+</pre>
+
+<p>или</p>
+
+<pre class="brush: js">Dog.prototype.toString = function dogToString() {
+ return `Dog ${this.name} is a ${this.sex} ${this.color} ${this.breed}`;
+}</pre>
+
+<p>После объявления этого метода, при любом использовании переменной <code>theDog</code> в строковом контексте, JavaScript будет автоматически вызывать функцию <code>dogToString()</code>, возвращающую следующую строку:</p>
+
+<pre>Собачка Болтушка - девочка, шоколадный лабрадор
+</pre>
+
+<h3 id="Example_Using_toString_to_detect_object_type" name="Example:_Using_toString_to_detect_object_type">Пример: использование метода <code>toString</code> для определения типа объекта</h3>
+
+<p>Метод <code>toString()</code> можно использовать с любым объектом для получения его класса. Для использования метода <code>Object.prototype.toString()</code> с любым объектом, вам необходимо вызвать на нём функции {{jsxref("Function.prototype.call()")}} или {{jsxref("Function.prototype.apply()")}}, передав объект, который вы хотите исследовать, первым параметром <code>thisArg</code>.</p>
+
+<pre class="brush: js">var toString = Object.prototype.toString;
+
+toString.call(new Date); // [object Date]
+toString.call(new String); // [object String]
+toString.call(Math); // [object Math]
+
+// Начиная с JavaScript 1.8.5
+toString.call(undefined); // [object Undefined]
+toString.call(null); // [object Null]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.tostring', 'Object.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.2', 'Object.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Вызов метода на {{jsxref("Global_Objects/null", "null")}} вернёт <code>[object <em>Null</em>]</code>, а на {{jsxref("Global_Objects/undefined", "undefined")}} — <code>[object <em>Undefined</em>]</code></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div></div>
+
+<div id="compat-mobile">{{Compat("javascript.builtins.Object.toString")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+ <li>{{jsxref("Number.prototype.toString()")}}</li>
+ <li>{{jsxref("Symbol.toPrimitive")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html b/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html
new file mode 100644
index 0000000000..bf3ef676f3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/unobserve/index.html
@@ -0,0 +1,97 @@
+---
+title: Object.unobserve()
+slug: Web/JavaScript/Reference/Global_Objects/Object/unobserve
+translation_of: Archive/Web/JavaScript/Object.unobserve
+---
+<div>{{JSRef}} {{obsolete_header}}</div>
+
+<p>Метод <strong><code>Object.unobserve()</code></strong> удаляет наблюдатель, который был добавлен с помощью {{jsxref("Object.observe()")}}. Вы можете использовать {{jsxref("Proxy")}} вместо данного метода.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Object.unobserve(<var>obj</var>, <var>callback</var>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, за которым необходимо прекратить наблюдение.</dd>
+ <dt><code>callback</code></dt>
+ <dd>Ссылка на наблюдатель, который нужно остановить на <code>obj</code>.</dd>
+</dl>
+
+<h3 id="Возаращаемое_значение">Возаращаемое значение</h3>
+
+<p>Указанный объект.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Object.unobserve()</code> вызывается после {{jsxref("Object.observe()")}}, чтобы удалить наблюдатель на объекте.</p>
+
+<p>В <code>callback</code> нужно передавать ссылку на функцию, которая не является анонимной. Если вызвать <strong>Object.unobserve()</strong> с анонмной функцией в <code>callback</code>, то ни один наблюдатель не будет удалён.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Удаление_наблюдателя_с_объекта">Удаление наблюдателя с объекта</h3>
+
+<pre class="brush: js">var obj = {
+ foo: 0,
+ bar: 1
+};
+
+var observer = function(changes) {
+ console.log(changes);
+}
+
+Object.observe(obj, observer);
+​
+obj.newProperty = 2;
+// [{name: 'newProperty', object: &lt;obj&gt;, type: 'add'}]
+
+Object.unobserve(obj, observer);
+
+obj.foo = 1;
+// callback не был вызван</pre>
+
+<h3 id="Вызов_с_анонимной_функцией">Вызов с анонимной функцией</h3>
+
+<pre class="brush: js">var person = {
+ name: 'Ahmed',
+ age: 25
+};
+
+Object.observe(person, function(changes) {
+ console.log(changes);
+});
+
+person.age = 40;
+// [{name: 'age', object: &lt;obj&gt;, oldValue: 25, type: 'update'}]
+
+Object.unobserve(person, function(changes) {
+ console.log(changes);
+});
+
+person.age = 63;
+// [{name: 'age', object: &lt;obj&gt;, oldValue: 40, type: 'update'}]
+// callback был вызван
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p><a href="https://github.com/arv/ecmascript-object-observe">Strawman proposal specification</a>.</p>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Object.unobserve")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Object.observe()")}} {{obsolete_inline}}</li>
+ <li>{{jsxref("Array.observe()")}} {{obsolete_inline}}</li>
+ <li>{{jsxref("Array.unobserve()")}} {{obsolete_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html b/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html
new file mode 100644
index 0000000000..e862406f3d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/unwatch/index.html
@@ -0,0 +1,93 @@
+---
+title: Object.prototype.unwatch()
+slug: Web/JavaScript/Reference/Global_Objects/Object/unwatch
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+translation_of: Archive/Web/JavaScript/Object.unwatch
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}}</div>
+<div class="warning">
+ <p><strong>Предупреждение:</strong> обычно, при возможности, вам следует избегать использования <code>unwatch()</code> и {{jsxref("Object.prototype.watch", "watch()")}}. Эти два метода реализованы только в Gecko, и они, в основном, предназначены только для отладочных целей. Кроме того, использование точек наблюдения серьёзно бъёт по производительности, что особенно заметно при использовании их на глобальных объектах, например <code>window</code>. Обычно вместо них вы можете использовать <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">сеттеры и геттеры</a> или прокси. Для более подробной информации смотрите раздел {{anch("Browser_compatibility", "Совместимость с браузерами")}}.</p>
+</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>unwatch()</strong></code> удаляет точку наблюдения, установленную методом {{jsxref("Object.prototype.watch", "watch()")}}.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.unwatch(<var>prop</var>)</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt>
+ <code>prop</code></dt>
+ <dd>
+ Имя свойства объекта, чьи изменения вы хотите прекратить отслеживать.</dd>
+</dl>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Отладчик JavaScript имеет функциональность, аналогичную предоставляемой этим методом, а также и другие возможности отладки. Информацию по отладчику можно получить в статье про <a href="/ru/docs/Venkman">Venkman</a>.</p>
+<p>По умолчанию, этот метод наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}.</p>
+<div class="note">
+ <p><strong>Примечание:</strong> причина, по которой метод <code>unwatch()</code> принимает единственным параметром только имя свойства <em>prop</em> в том, что для метода {{jsxref("Object.watch", "watch()")}} разрешён только один обработчик.</p>
+</div>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<p>Смотрите метод {{jsxref("Object.watch", "watch()")}}.</p>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации. Реализована в JavaScript 1.2.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div class="note">
+ <p><strong>Примечание:</strong> вызов <code>unwatch()</code> на объекте {{domxref("Document")}}, начиная с Firefox 23, выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} ({{bug(903332)}}). Эта регрессия была поправлена в Firefox 27.</p>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.watch()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/valueof/index.html b/files/ru/web/javascript/reference/global_objects/object/valueof/index.html
new file mode 100644
index 0000000000..bd1f5b1994
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/valueof/index.html
@@ -0,0 +1,141 @@
+---
+title: Object.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Object/valueOf
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf
+---
+<div>{{JSRef("Global_Objects", "Object")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <code><strong>valueOf()</strong></code> возвращает примитивное значение указанного объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>object</var>.valueOf()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>JavaScript вызывает метод <code>valueOf</code> для преобразования объекта в примитивное значение. Вам редко потребуется вызывать метод <code>valueOf</code> самостоятельно; JavaScript автоматически вызывает его при обнаружении объекта, когда ожидается примитивное значение.</p>
+
+<p>По умолчанию, метод <code>valueOf</code> наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}. Каждый встроенный объект ядра переопределяет этот метод, возвращая подходящее значение. Если объект не имеет примитивного значения, <code>valueOf</code> возвращает сам объект, который отображается как:</p>
+
+<pre class="brush: js">[object Object]</pre>
+
+<p>Вы можете использовать <code>valueOf</code> в своём коде для преобразования встроенных объектов в примитивное значение. Когда вы создаёте пользовательский объект, вы можете переопределить метод <code>Object.prototype.valueOf()</code>, чтобы вызывать собственный метод вместо метода по умолчанию из {{jsxref("Global_Objects/Object", "Object")}}.</p>
+
+<h3 id="Overriding_valueOf_for_custom_objects" name="Overriding_valueOf_for_custom_objects">Переопределение <code>valueOf</code> в пользовательских объектах</h3>
+
+<p>Вы можете создать функцию, вызываемую вместо метода <code>valueOf</code> по умолчанию. Ваша функция не должна принимать аргументов.</p>
+
+<p>Предположим, у вас есть объект типа <code>myNumberType</code> и вы хотите создать для него метод <code>valueOf</code>. Следующий код присваивает определённую пользователем функцию методу <code>valueOf</code> объекта:</p>
+
+<pre class="brush: js">myNumberType.prototype.valueOf = function() { return customPrimitiveValue; };</pre>
+
+<p>Начиная с этого места в вашем коде, в любое время, когда объект типа <code>myNumberType</code> будет использоваться в контексте, где он должен быть представлен примитивным значением, JavaScript будет автоматически вызывать  функцию, определённую в этом коде.</p>
+
+<p>Метод объекта <code>valueOf</code> обычно вызывается движком JavaScript, но вы можете вызвать его и самостоятельно, как показано ниже:</p>
+
+<pre class="brush: js">myNumber.valueOf()</pre>
+
+<div class="note">
+<p><strong>Примечание:</strong> объекты в строковом контексте преобразуются с помощью метода {{jsxref("Object.toString", "toString()")}}, что отличается от объектов {{jsxref("Global_Objects/String", "String")}}, преобразующихся в строковые примитивы методом <code>valueOf</code>. Все объекты имеют преобразование в строку вида "<code>[object <em>type</em>]</code>". Но многие объекты не преобразуются в число, логическое значение или функцию.</p>
+</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование <code>valueOf</code></h3>
+
+<pre class="brush: js">var o = new Object();
+myVar = o.valueOf(); // [object Object]
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.4', 'Object.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+ <li>{{jsxref("Global_Objects/parseInt", "parseInt()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..fa1e84895d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/values/index.html
@@ -0,0 +1,98 @@
+---
+title: Object.values()
+slug: Web/JavaScript/Reference/Global_Objects/Object/values
+tags:
+ - JavaScript
+ - Method
+ - Object
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/values
+---
+<div>{{JSRef}}</div>
+
+<p>Метод  <code><strong>Object.values()</strong></code><strong> </strong>возвращает массив значений перечисляемых свойств объекта в том же порядке что и цикл {{jsxref("Statements/for...in", "for...in")}}. Разница между циклом и методом в том, что цикл перечисляет свойства и из цепочки прототипов.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/object-values.html")}}</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Object.values(<var>obj</var>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>obj</code></dt>
+ <dd>Объект, чьи значения перечисляемых свойств будут возвращены.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив содержащий значения перечисляемых свойств объекта.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Object.values()</code> возвращает массив, чьи элементы это значения перечисляемых свойств найденых в объекте. Порядок такой же как если пройтись по объекту циклом вручную.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var obj = { foo: "bar", baz: 42 };
+console.log(Object.values(obj)); // ['bar', 42]
+
+// Массив как объект
+var obj = { 0: 'a', 1: 'b', 2: 'c' };
+console.log(Object.values(obj)); // ['a', 'b', 'c']
+
+// Массив как объект со случайным порядком ключей
+// Когда мы используем нумерованные ключ, значения возвращаются в порядке возрастания
+var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
+console.log(Object.values(an_obj)); // ['b', 'c', 'a']
+
+// getFoo неперечисляемое свойство
+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']
+</pre>
+
+<h2 id="Полифилл">Полифилл</h2>
+
+<p>Для добавления совместимости <code>Object.values</code> со старым окружением, которое не поддерживает нативно его, вы можете найти полифилл здесь <a href="https://github.com/tc39/proposal-object-values-entries">tc39/proposal-object-values-entries</a> или в <a href="https://github.com/es-shims/Object.values">es-shims/Object.values</a> репозитарии.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.values', 'Object.values')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES8', '#sec-object.values', 'Object.values')}}</td>
+ <td>{{Spec2('ES8')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.Object.values")}}</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">Перечисляемость и принадлежность свойств</a></li>
+ <li>{{jsxref("Object.keys()")}}</li>
+ <li>{{jsxref("Object.entries()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("Object.prototype.propertyIsEnumerable()")}}</li>
+ <li>{{jsxref("Object.create()")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/object/watch/index.html b/files/ru/web/javascript/reference/global_objects/object/watch/index.html
new file mode 100644
index 0000000000..8f4a3d5b99
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/object/watch/index.html
@@ -0,0 +1,168 @@
+---
+title: Object.prototype.watch()
+slug: Web/JavaScript/Reference/Global_Objects/Object/watch
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Object
+ - Prototype
+translation_of: Archive/Web/JavaScript/Object.watch
+---
+<div>
+ {{JSRef("Global_Objects", "Object")}}</div>
+<div class="warning">
+ <p><strong>Предупреждение:</strong> обычно, при возможности, вам следует избегать использования <code>watch()</code> и {{jsxref("Object.prototype.unwatch", "unwatch()")}}. Эти два метода реализованы только в Gecko, и они, в основном, предназначены только для отладочных целей. Кроме того, использование точек наблюдения серьёзно бъёт по производительности, что особенно заметно при использовании их на глобальных объектах, например <code>window</code>. Обычно вместо них вы можете использовать <a href="/ru/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">сеттеры и геттеры</a> или прокси. Для более подробной информации смотрите раздел {{anch("Browser_compatibility", "Совместимость с браузерами")}}. Также, не путайте {{jsxref("Object.prototype.watch", "Object.watch")}} с {{jsxref("Object.prototype.observe", "Object.observe")}}.</p>
+</div>
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <code><strong>watch()</strong></code> следит за присваиванием свойству значений и запускает указанную функцию, когда это происходит.</p>
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>obj</var>.watch(<var>prop</var>, <var>handler</var>)</code></pre>
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt>
+ <code>prop</code></dt>
+ <dd>
+ Имя свойства объекта, чьи изменения вы хотите отслеживать.</dd>
+ <dt>
+ <code>handler</code></dt>
+ <dd>
+ Функция, вызывающаяся при изменении значения указанного свойства.</dd>
+</dl>
+<h2 id="Description" name="Description">Описание</h2>
+<p>Следит за присваиваниями свойству <code>prop</code> в этом объекте, вызывая функцию <code>handler(prop, oldval, newval)</code> всякий раз, когда свойство <code>prop</code> устанавливается и сохраняет возвращённое значение в этом свойстве. Точка наблюдения может отфильтровывать (или отменять) присваивание значения, возвращая изменённое новое значение <code>newval</code> (или старое значение <code>oldval</code>).</p>
+<p>Если вы удалите свойство, для которого была установлена точка наблюдения, эта точка наблюдения не будет отключена. Если вы позже вновь создадите это свойство, точка наблюдения продолжит работать.</p>
+<p>Для удаления точки наблюдения используйте метод {{jsxref("Object.unwatch", "unwatch()")}}. По умолчанию, метод <code>watch</code> наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}.</p>
+<p>Отладчик JavaScript имеет функциональность, аналогичную предоставляемой этим методом, а также и другие возможности отладки. Информацию по отладчику можно получить в статье про <a href="/ru/docs/Venkman">Venkman</a>.</p>
+<p>В Firefox, функция <code>handler</code> вызывает только при присваивании из скрипта, не из встроенного кода. Например, <code>window.watch('location', myHandler)</code> не вызовет <code>myHandler</code>, если пользователь щёлкнет по ссылке с якорем в текущем документе. Однако, выражение <code>window.location += '#myAnchor'</code> вызовет <code>myHandler</code>.</p>
+<div class="note">
+ <p><strong>Примечание:</strong> вызов <code>watch()</code> на объекте для определённого свойства перезапишет любые ранее назначенные на него обработчики.</p>
+</div>
+<h2 id="Examples" name="Examples">Примеры</h2>
+<h3 id="Example:_Using_watch_and_unwatch" name="Example:_Using_watch_and_unwatch">Пример: использование <code>watch</code> и <code>unwatch</code></h3>
+<pre class="brush: js">var o = { p: 1 };
+
+o.watch('p', function (id, oldval, newval) {
+ console.log('o.' + id + ' изменено с ' + oldval + ' на ' + newval);
+ return newval;
+});
+
+o.p = 2;
+o.p = 3;
+delete o.p;
+o.p = 4;
+
+o.unwatch('p');
+o.p = 5;
+</pre>
+<p>Этот скрипт выведет следующее:</p>
+<pre>o.p изменено с 1 на 2
+o.p изменено с 2 на 3
+o.p изменено с undefined на 4
+</pre>
+<h3 id="Example:_Using_watch_to_validate_an_object.27s_properties" name="Example:_Using_watch_to_validate_an_object.27s_properties">Пример: использование <code>watch</code> для проверки свойств объекта</h3>
+<p>Вы можете использовать <code>watch</code> для проверки присваивания к любым свойствам объекта. Этот пример гарантирует, что каждый человек имеет допустимое имя и возраст между 0 и 200.</p>
+<pre class="brush: js">Person = function(name, age) {
+ this.watch('age', Person.prototype._isValidAssignment);
+ this.watch('name', Person.prototype._isValidAssignment);
+ this.name = name;
+ this.age = age;
+};
+
+Person.prototype.toString = function() {
+ return this.name + ', ' + this.age;
+};
+
+Person.prototype._isValidAssignment = function(id, oldval, newval) {
+ if (id === 'name' &amp;&amp; (!newval || newval.length &gt; 30)) {
+ throw new RangeError('недопустимое имя для ' + this);
+ }
+ if (id === 'age' &amp;&amp; (newval &lt; 0 || newval &gt; 200)) {
+ throw new RangeError('недопустимый возраст для ' + this);
+ }
+ return newval;
+}
+
+will = new Person('Уилл', 29);
+print(will); // Уилл, 29
+
+try {
+ will.name = '';
+} catch (e) {
+ print(e);
+}
+
+try {
+ will.age = -4;
+} catch (e) {
+ print(e);
+}
+</pre>
+<p>Этот скрипт выведет следующее:</p>
+<pre>Уилл, 29
+RangeError: недопустимое имя для Уилл, 29
+RangeError: недопустимый возраст для Уилл, 29
+</pre>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какой-либо спецификации. Реализована в JavaScript 1.2.</p>
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<ul>
+ <li>Этот <a class="external link-https" href="https://gist.github.com/384583">полифилл</a> предлагает <code>watch</code> для всех совместимых с ES5 браузеров</li>
+ <li>Использование объекта {{jsxref("Global_Objects/Proxy", "Proxy")}} позволяет вам сделать ещё более глубокие изменения при присваивании свойств</li>
+</ul>
+<div>
+ {{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div class="note">
+ <p><strong>Примечание:</strong> вызов <code>watch()</code> на объекте {{domxref("Document")}}, начиная с Firefox 23, выбрасывает исключение {{jsxref("Global_Objects/TypeError", "TypeError")}} ({{bug(903332)}}). Эта регрессия была поправлена в Firefox 27.</p>
+</div>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.unwatch()")}}</li>
+ <li>{{jsxref("Object.observe()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/parallelarray/index.html b/files/ru/web/javascript/reference/global_objects/parallelarray/index.html
new file mode 100644
index 0000000000..ca96e4c0fa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/parallelarray/index.html
@@ -0,0 +1,52 @@
+---
+title: ParallelArray
+slug: Web/JavaScript/Reference/Global_Objects/ParallelArray
+translation_of: Archive/Web/ParallelArray
+---
+<p>{{jsSidebar("Objects")}} {{ obsolete_header() }}</p>
+<div class="note">
+ <p><strong>Note:</strong> This object was implemented in Firefox 17 and has been removed from {{ Gecko(29) }} in favor of ParallelJS (PJS) currently available in the Nightly channel ({{ bug(944074) }}).</p>
+</div>
+<h2 id="Сводка">Сводка</h2>
+<p>Целью ParallelArray является распараллеливание данных в веб-приложениях. Все функции, которые доступны на простом массиве могут исполняться параллельно на ParallelArray, при необходимости можно вернуться к последовательному исполнению. Чтобы убедиться что ваш код исполняется параллельно, it is suggested that the functions should be limited to the <a href="http://smallcultfollowing.com/babysteps/blog/2013/04/30/parallelizable-javascript-subset/" title="/en-US/docs/ParallelizableJavaScriptSubset">parallelizable subset of JS that Firefox supports</a>.</p>
+<h2 id="Синтаксис">Синтаксис</h2>
+<pre class="syntaxbox">new ParallelArray()
+new ParallelArray([element0, element1, ...])
+new ParallelArray(arrayLength, elementalFunction)</pre>
+<h2 id="Экземпляры_ParallelArray"><code>Экземпляры ParallelArray</code></h2>
+<h3 id="Свойства">Свойства</h3>
+<dl>
+ <dt>
+ length</dt>
+ <dd>
+ Возвращает количество элементов в <code>ParallelArray</code>.</dd>
+</dl>
+<h3 id="Методы">Методы</h3>
+<dl>
+ <dt>
+ map</dt>
+ <dt>
+ reduce</dt>
+ <dt>
+ scan</dt>
+ <dt>
+ scatter</dt>
+ <dt>
+ filter</dt>
+ <dt>
+ flatten</dt>
+ <dt>
+ partition</dt>
+ <dt>
+ get</dt>
+</dl>
+<h2 id="Примеры">Примеры</h2>
+<h3 id="Пример_Использование_метода_map_параллельно">Пример: Использование метода map параллельно</h3>
+<pre class="brush: js">var p = new ParallelArray([0, 1, 2, 3, 4]);
+var m = p.map(function (v) {
+ return v + 1;
+});</pre>
+<h2 id="Смотрите_также">Смотрите также</h2>
+<ul>
+ <li><a href="http://wiki.ecmascript.org/doku.php?id=strawman:data_parallelism" title="http://wiki.ecmascript.org/doku.php?id=strawman:data_parallelism">Ecmascript ParallelArray strawman</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/parsefloat/index.html b/files/ru/web/javascript/reference/global_objects/parsefloat/index.html
new file mode 100644
index 0000000000..03cb0bc158
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/parsefloat/index.html
@@ -0,0 +1,136 @@
+---
+title: parseFloat()
+slug: Web/JavaScript/Reference/Global_Objects/parseFloat
+tags:
+ - JavaScript
+ - Number
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/parseFloat
+---
+<div>
+<div>
+<div>{{jsSidebar("Objects")}}</div>
+</div>
+</div>
+
+<p>Функция <code><strong>parseFloat()</strong></code> принимает строку в качестве аргумента и возвращает десятичное число (число с плавающей точкой)</p>
+
+<p> </p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-parsefloat.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p> </p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">parseFloat(<em>строка</em>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>строка</code></dt>
+ <dd>Текстовая строка, из которой вам надо выделить десятичное число.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Число с плавающей точкой, полученное из строки. Если первый символ не может быть сконвертирован в число, то возвращается {{jsxref("NaN")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>parseFloat</code> - это высокоуровневая функция, не привязанная ни к одному объекту.</p>
+
+<p><code>parseFloat</code> разбирает текстовую строку, ищет и возвращает из нее десятичное число. Если функция встретит знак, отличный от (+ или -), цифр(0-9), разделительной точки, или показателя степени, она вернет значение, предшествующее этому знаку, игнорируя все последующие символы . Допускаются позади и впереди идущие пробелы.</p>
+
+<p>Если первый символ нельзя привести к числовому виду, <code>parseFloat</code> вернет<code> NaN</code>.</p>
+
+<p>С точки зрения математики, <code>значение NaN</code> не является числом в какой-либо системе счисления. Чтобы определить, вернет ли <code>parseFloat </code>значение {{jsxref("NaN")}} в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если <code>NaN</code> участвует в арифметических операциях, результатом также будет <code>NaN</code>.</p>
+
+<p><code>parseFloat</code> также может вернуть значение <code>Infinity</code> ("бесконечность"). Вы можете использовать функцию {{jsxref("Global_Objects/isFinite", "isFinite")}}, чтобы определить, является ли результат конечным числом  (not <code>Infinity</code>, <code>-Infinity</code>, или <code>NaN</code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="parseFloat_возвращает_число"><code>parseFloat</code> возвращает число</h3>
+
+<p>Все примеры ниже вернут <strong>3.14</strong></p>
+
+<pre><code>parseFloat(3.14);
+parseFloat('3.14');
+parseFloat('314e-2');
+parseFloat('0.0314E+2');
+parseFloat('</code>3.14какие-нибудь не цифровые знаки<code>');
+
+var foo = Object.create(null);
+foo.toString = function () { return "3.14"; };
+parseFloat(foo);
+
+var foo = Object.create(null);
+foo.valueOf = function () { return "3.14"; };
+parseFloat(foo);​​​​​</code></pre>
+
+<p> </p>
+
+<h3 id="parseFloat_возвращает_NaN"><code>parseFloat</code> возвращает NaN</h3>
+
+<p>Пример ниже вернет <code>NaN</code></p>
+
+<pre class="brush: js">parseFloat("FF2");
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.2.3', 'parseFloat')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-parsefloat-string', 'parseFloat')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-parsefloat-string', 'parseFloat')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.parseFloat")}}</p>
+
+<p> </p>
+
+<h2 id="See_Also" name="See_Also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("parseInt", "parseInt()")}}</li>
+ <li>{{jsxref("Number.parseFloat()")}}</li>
+ <li>{{jsxref("Number.parseInt()")}}</li>
+ <li>{{jsxref("Number.toFixed()")}}</li>
+ <li>{{jsxref("isNaN", "isNaN()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/parseint/index.html b/files/ru/web/javascript/reference/global_objects/parseint/index.html
new file mode 100644
index 0000000000..eb6c784422
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/parseint/index.html
@@ -0,0 +1,202 @@
+---
+title: parseInt()
+slug: Web/JavaScript/Reference/Global_Objects/parseInt
+tags:
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/parseInt
+---
+<div>
+<div>
+<div>{{jsSidebar("Objects")}}</div>
+</div>
+</div>
+
+<p>Функция <code><strong>parseInt()</strong></code> принимает строку в качестве аргумента и возвращает целое число в соответствии с указанным основанием системы счисления.</p>
+
+<p> </p>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-parseint.html")}}</p>
+
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+
+<p> </p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">parseInt(<em>string</em>, <em>radix</em>);</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>string</code></dt>
+ <dd>Значение, которое необходимо проинтерпретировать. Если значение параметра <code>string</code> не принадлежит строковому типу, оно преобразуется в него (с помощью абстрактной операции <code><a href="http://www.ecma-international.org/ecma-262/6.0/#sec-tostring">ToString</a></code>). Пробелы в начале строки не учитываются.</dd>
+</dl>
+
+<dl>
+ <dt><code>radix</code></dt>
+ <dd>Целое число в диапазоне между 2 и 36, представляющее собой основание системы счисления числовой строки <code>string</code>, описанной выше. В основном пользователи используют десятичную систему счисления и указывают 10. <strong>Всегда указывайте этот параметр,</strong> чтобы исключить ошибки считывания и гарантировать корректность исполнения и предсказуемость результата. Когда основание системы счисления не указано, разные реализации могут возвращать разные результаты.</dd>
+</dl>
+
+<h3 id="Description" name="Description">Возвращаемое значение</h3>
+
+<p>Целое число, полученное парсингом (разбором и интерпретацией) переданной строки. Если первый символ не получилось сконвертировать в число, то возвращается {{jsxref("NaN")}}. </p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Функция <code>parseInt</code> преобразует первый переданный ей аргумент в строковый тип, интерпретирует его и возвращает целое число или значение <code>NaN</code>. Результат (если не <code>NaN</code>) является целым числом и представляет собой первый аргумент (<code>string</code>), рассматривающийся как число в указанной системе счисления (<code>radix</code>). Например, основание 10 указывает на преобразование из десятичного числа, 8 - восьмеричного, 16 - шестнадцатеричного и так далее. Если основание больше <code>10</code>, то для обозначения цифр больше <code>9</code> используются буквы. Например, для шестнадцатеричных чисел (основание 16) используются буквы от <code>A</code> до <code>F</code>.</p>
+
+<p>Если функция <code>parseInt</code> встречает символ, не являющийся числом в указанной системе счисления, она пропускает этот и все последующие символы (даже, если они подходящие) и возвращает целое число, преобразованное из части строки, предшествовавшей этому символу. <code>parseInt</code> отсекает дробную часть числа. Пробелы в начале и конце строки разрешены.</p>
+
+<p>Так как некоторые числа включают символ <code>e</code> в своём строковом представлении (например, <strong><code>6.022e23</code></strong>), то использование <code>parseInt</code> для усечения числовых значений может дать неожиданные результаты, когда используются очень малые или очень большие величины. <code>parseInt</code> не должна использоваться как замена для {{jsxref("Math.floor()")}}.</p>
+
+<p>Если основание системы счисления имеет значение <code>undefined</code> (неопределено) или равно 0 (или не указано), то JavaScript по умолчанию предполагает следующее:</p>
+
+<ul>
+ <li>Если значение входного параметра <code>string</code> начинается с "<code>0x</code>" или "<code>0X</code>", <var>за основание системы счисления принимается 16, и интерпретации подвергается оставшаяся часть строки.</var></li>
+ <li>Если значение входного параметра <code>string</code> начинается с "0", <var>за основание системы счисления принимается либо 8, либо 10, в зависимости от конкретной реализации.</var> В спецификации ECMAScript 5 прописано использование 10 (десятичная система), но это поддерживается еще не всеми браузерами, поэтому необходимо <strong>всегда указывать основание системы счисления при использовании функции </strong><strong><code>parseInt</code></strong>.</li>
+ <li>Если значение входного параметра <code>string</code> начинается с любого другого символа, система счисления считается десятичной (основание 10).</li>
+</ul>
+
+<p>Если первый символ строки не может быть преобразован в число, <code>parseInt</code> возвращает значение <code>NaN</code>.</p>
+
+<p>С точки зрения математики, значение <code>NaN</code> не является числом в какой-либо системе счисления. Чтобы определить, вернет ли <code>parseInt </code>значение<code> </code><code>NaN </code>в качестве результата, можно вызвать функцию {{jsxref("Global_Objects/isNaN", "isNaN")}}. Если <code>NaN</code> участвует в арифметических операциях, результатом также будет <code>NaN</code>.</p>
+
+<p>Для преобразования числа в строку в указанной системе счисления, используйте <code>intValue.toString(radix)</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_parseInt" name="Example:_Using_parseInt">Пример: Использование <code>parseInt</code></h3>
+
+<p>Все следующие примеры возвращают <strong><code>15</code></strong>:</p>
+
+<pre class="brush: js">parseInt(" 0xF", 16);
+parseInt(" F", 16);
+parseInt("17", 8);
+parseInt(021, 8);
+parseInt("015", 10); //parseInt(015, 10); вернёт 15
+parseInt(15.99, 10);
+parseInt("FXX123", 16);
+parseInt("1111", 2);
+parseInt("15*3", 10);
+parseInt("15e2", 10);
+parseInt("15px", 10);
+parseInt("12", 13);
+</pre>
+
+<p>Все следующие примеры возвращают <strong><code>NaN</code></strong>:</p>
+
+<pre class="brush: js">parseInt("Hello", 8); // Не является числом
+parseInt("546", 2); // Неверное число в двоичной системе счисления
+</pre>
+
+<p>Все следующие примеры возвращают <strong><code>-15</code></strong>:</p>
+
+<pre class="brush: js">parseInt("-F", 16);
+parseInt("-0F", 16);
+parseInt("-0XF", 16);
+parseInt(-15.1, 10)
+parseInt(" -17", 8);
+parseInt(" -15", 10);
+parseInt("-1111", 2);
+parseInt("-15e1", 10);
+parseInt("-12", 13);
+</pre>
+
+<p>Все следующие примеры возвращают <strong><code>4</code></strong>:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="function token">parseInt</span><span class="punctuation token">(</span><span class="number token">4.7</span><span class="punctuation token">,</span> <span class="number token">10</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="function token">parseInt</span><span class="punctuation token">(</span><span class="number token">4.7</span> <span class="operator token">*</span> <span class="number token">1e22</span><span class="punctuation token">,</span> <span class="number token">10</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// Очень большие числа становятся 4</span>
+<span class="function token">parseInt</span><span class="punctuation token">(</span><span class="number token">0.00000000000434</span><span class="punctuation token">,</span> <span class="number token">10</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// Очень маленькие числа становятся 4</span></code></pre>
+
+<p>Следующий пример возвращает <strong><code>224</code></strong>:</p>
+
+<pre class="brush: js">parseInt("0e0", 16);
+</pre>
+
+<h2 id="Восьмеричная_интерпретация_без_указания_системы_счисления">Восьмеричная интерпретация без указания системы счисления</h2>
+
+<p>Хотя это не поощряется в спецификацией ECMAScript 3 и запрещено в ECMAScript 5, многие реализации интерпретируют числовую строку, начинающуюся с <code>0</code>, как восьмеричную. Следующий пример может иметь как восьмеричный, так и десятичный результат. <strong>Чтобы избежать непредвиденного результата, всегда указывайте основание системы счисления.</strong></p>
+
+<pre class="brush: js">parseInt("0e0"); // 0
+parseInt("08"); // 0, '8' не является цифрой в восьмеричной системе.
+</pre>
+
+<h3 id="ECMAScript_5_устраняет_восьмеричную_интерпретацию">ECMAScript 5 устраняет восьмеричную интерпретацию</h3>
+
+<p>Спецификация ECMAScript 5 функции <code>parseInt</code> больше не разрешает трактовать в восьмеричной системе счисления строки, начинающиеся с <code>0</code>. ECMAScript 5 провозглашает:</p>
+
+<p>Функция <code>parseInt</code> производит целочисленное значение в результате интерпретации содержимого строкового аргумента в соответствии с указанным основанием системы счисления. Пробел в начале строки не учитывается. Если основание системы счисления не определено или равно <code>0</code>, оно считается равным <code>10</code>, за исключением случаев, когда строка начинается с пар символов <code>0x</code> или <code>0X</code>: тогда за основание принимается 16. Если основанием системы счисления указано <code>16</code>, число также может начинаться с пар символов <code>0x</code> или <code>0X</code>.</p>
+
+<p>В этом ECMAScript 5 расходится со спецификацией ECMAScript 3, в которой восьмеричная интерпретация не поощрялась, но и не была запрещена.</p>
+
+<p>Поскольку на момент 2013 года описанное выше поведение было применено не во всех реализациях, а поддержка старых браузеров является необходимой, <strong>всегда указывайте основание системы счисления.</strong></p>
+
+<h2 id="Более_строгая_функция_интерпретации">Более строгая функция интерпретации</h2>
+
+<p>Иногда необходим более строгий способ интерпретации целочисленных значений. В этом могут помочь регулярные выражения:</p>
+
+<pre class="brush: js">var filterInt = function (value) {
+ if (/^(\-|\+)?([0-9]+|Infinity)$/.test(value))
+ return Number(value);
+ return NaN;
+}
+
+console.log(filterInt('421')); // 421
+console.log(filterInt('-421')); // -421
+console.log(filterInt('+421')); // 421
+console.log(filterInt('Infinity')); // Infinity
+console.log(filterInt('421e+0')); // NaN
+console.log(filterInt('421hop')); // NaN
+console.log(filterInt('hop1.61803398875')); // NaN
+console.log(filterInt('1.61803398875')); // NaN
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.2.2', 'parseInt')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-parseint-string-radix', 'parseInt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-parseint-string-radix', 'parseInt')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.parseInt")}}</p>
+
+<h2 id="See_Also" name="See_Also">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/parseFloat", "parseFloat()")}}</li>
+ <li>{{jsxref("Number.parseFloat()")}}</li>
+ <li>{{jsxref("Number.parseInt()")}}</li>
+ <li>{{jsxref("Global_Objects/isNaN", "isNaN()")}}</li>
+ <li>{{jsxref("Number.toString()")}}</li>
+ <li>{{jsxref("Object.valueOf")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..9d8fba83b6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/all/index.html
@@ -0,0 +1,122 @@
+---
+title: Promise.all()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/all
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/all
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Summary" name="Summary">Общее описание</h2>
+
+<p>Метод <code><strong>Promise.all(iterable)</strong></code> возвращает обещание, которое выполнится тогда, когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонено любое из переданных обещаний.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.all(iterable)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>iterable</dt>
+ <dd>Перечисляемый объект, например, массив ({{jsxref("Array")}}). Смотрите <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}, который будет выполнен когда будут выполнены все обещания, переданные в виде перечисляемого аргумента, или отклонен, если будет отклонено хоть одно из переданных обещаний.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><strong>Promise.all</strong> возвращает массив значений от всех обещаний, которые были ему переданы. Возвращаемый массив значений сохраняет порядок оригинального перечисляемого объекта, но не порядок выполнения обещаний. <code>Если какой-либо элемент перечисляемого объекта не является обещанием, то он будет преобразован с помощью метода </code>{{jsxref("Promise.resolve")}}<code>.</code></p>
+
+<p>Если одно из переданных обещаний будет отклонено, <code><strong>Promise.all </strong></code>будет немедлено отклонен со значением отклоненного обещания, не учитывая другие обещания, независимо выполнены они или нет. Если в качестве аргумента будет передан пустой массив, то <code><strong>Promise.all</strong> </code>будет выполнен немедленно<code>. </code></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Promise.all">Использование <code>Promise.all</code></h3>
+
+<p><strong>Promise.all </strong>ждет выполнения всех обещаний (или первого метода <code><strong>reject</strong>()</code>).</p>
+
+<pre><code>var p1 = Promise.resolve(3);
+var p2 = 1337;
+var p3 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 100, "foo");
+});
+
+Promise.all([p1, p2, p3]).then(values =&gt; {
+ console.log(values);
+});
+
+//Выведет:
+// [3, 1337, "foo"] </code>
+</pre>
+
+<h3 id="Promise.all_поведение_немедленного_отклонения"><code>Promise.all</code> поведение немедленного отклонения</h3>
+
+<p><strong><code>Promise.all</code></strong> будет немедленно отклонен если одно из переданных обещаний будет отклонено: если у вас есть четыре обещания которые будут выполнены с задержкой и одно, которое будет отклонено немедленно - тогда <strong><code>Promise.all</code></strong> будет немедленно отклонен.</p>
+
+<pre><code>var p1 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 1000, "one");
+});
+var p2 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 2000, "two");
+});
+var p3 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 3000, "three");
+});
+var p4 = new Promise((resolve, reject) =&gt; {
+ setTimeout(resolve, 4000, "four");
+});
+var p5 = new Promise((resolve, reject) =&gt; {
+// Это обещание прервет Promise.all
+ reject("reject");
+});
+
+Promise.all([p1, p2, p3, p4, p5]).then(value =&gt; {
+ console.log(value);
+}, reason =&gt; {
+ console.log(reason)
+});
+
+//Выведет:
+//"reject"</code>
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Пояснение</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.all', 'Promise.all')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.all', 'Promise.all')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальный вариант в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.all")}}</p>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="Родственные_темы">Родственные темы</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.race()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html b/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html
new file mode 100644
index 0000000000..4c125fac0c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/allsettled/index.html
@@ -0,0 +1,60 @@
+---
+title: Promise.allSettled()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/allSettled
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/allSettled
+---
+<p>{{JSRef}}</p>
+
+<p>Метод <code><strong>Promise.allSettled()</strong></code> возвращает промис, который исполняется когда все полученные промисы завершены (исполнены или отклонены), содержащий массив результатов исполнения полученных промисов.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/promise-allsettled.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>promise</em>.allSettled(<em>iterable</em>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Любой <a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">итерируемый</a> объект, такой как {{jsxref("Array")}}, в котором каждый элемент является <code>Promise</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}, который будет выполнен после завершения каждого промиса, вне зависимости от того выполнился он успешно или был отклонён. В то же время, в возвращаемый обработчик промиса передаётся массив, который содержит результат каждого промиса в исходном наборе промисов.</p>
+
+<p>Объект каждого результата содержит свойство <code>status</code>. Если <code>status</code> имеет значение <code>fulfilled</code> (выполнено), то объект будет содержать свойство <code>value</code>. Если <code>status</code> имеет значение <code>rejected</code> (отклонено), то объект будет содержать свойство <code>reason</code>. Свойство <code>value</code> (или <code>reason</code>) будет содержать значение с которым был выполнен (или отклонён) промис.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.es/proposal-promise-allSettled/"><code>Promise.allSettled()</code> (TC39 Stage 4 Draft)</a></td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">To contribute to this compatibility data, please write a pull request against this repository: <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>
+
+<p>{{Compat("javascript.builtins.Promise.allSettled")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Archive/Add-ons/Techniques/Promises">Promises</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Using_promises">Использование промисов</a></li>
+ <li><a href="/en-US/docs/Learn/JavaScript/Asynchronous/Promises">Graceful asynchronous programming with promises</a></li>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.all()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..4d0a4baa67
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/any/index.html
@@ -0,0 +1,81 @@
+---
+title: Promise.any()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/any
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/any
+---
+<div>{{JSRef}}</div>
+
+<p><code>Метод Promise.any()</code> принимает итерируемый объект содержащий объекты "обещаний" {{JSxRef("Promise")}}. Как только одно из "обещаний"(<code>Promise)</code> выполнится успешно(<code>fullfill</code>), метод возвратит единственный объект <code>Promise</code> со значением выполненного "обещания". Если ни одно из "обещаний" не завершится успешно(если все "обещания" завершатся с ошибкой, т.е. <code>rejected</code>), тогда возвращенный объект promise будет отклонен(<code>rejected</code>) с одним из значений: массив содержащий причины ошибки(отклонения), или {{JSxRef("AggregateError")}} — подкласс {{JSxRef("Error")}}, который объединяет выброшенные ошибки вместе. По-существу, метод <code>Promise.any()</code> является противоположностью для {{JSxRef("Promise.all()")}}.</p>
+
+<div class="blockIndicator warning">
+<p><strong>Warning!</strong> The <code>Promise.any()</code> method is experimental and not fully supported by all browsers. It is currently in the <a href="https://github.com/tc39/proposal-promise-any" rel="external">TC39 Candidate stage (Stage 3)</a>.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre>Promise.any(<var>iterable</var>);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Итерируемый(<a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>) объект, например {{JSxRef("Array")}}.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<ul>
+ <li><strong>Исполненный</strong> {{JSxRef("Promise")}}, если переданный итерируемый объект пуст.</li>
+ <li><strong>Исполненный асинхронно</strong> {{JSxRef("Promise")}}, если переданный итерируемый объект не содержит "обещаний"(promises).</li>
+ <li>Во всех других случаях {{JSxRef("Promise")}} со статусом ожидания(<strong>pending)</strong>. Возвращенное "обещание" будет <strong>исполнено</strong>(resolved/rejected) <strong>асинхронно</strong> (как только стэк вызовов окажется пустым), когда одно(любое) "обещание" из  <em>переданного итерируемого объекта исполнится</em>, либо все "обещания" будут отклонены.</li>
+</ul>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод полезен, когда нужно вернуть первое исполненное "обещание". После того как одно из "обещаний" будет исполнено, метод не будет дожидаться исполнения остальных. В отличие от {{JSxRef("Promise.all()")}}, который содержит <em>массив(Array)</em> значений исполненных обещаний, <code>Promise.any()</code> содержит только одно значение (при условии, что хотя бы одно из "обещаний" исполнено успешно). Такой подход может быть выгодным, когда нужно, чтобы выполнилось только одно "обещание", неважно какое. Также, в отличие от {{JSxRef("Promise.race()")}}, который возвращает "обещание", содержащее значение первого <strong>завершенного(resolved или rejected)</strong>, этот метод возвращает "обещание" содержащее значение первого <strong>успешно выполненного(resolved) </strong>"обещания". Метод будет игнорировать исполнение обещаний с ошибкой(rejection) вплоть до первого исполненного успешно(fullfilment).</p>
+
+<h3 id="Успешное_исполнениеFullfilment">Успешное исполнение(Fullfilment)</h3>
+
+<p>Если одно из "обещаний" исполнится успешно, возвращенное "обещание" асинхронно исполнится успешно со значением выполненного "обещания", независимо от завершения остальных "обещаний".</p>
+
+<ul>
+ <li>Если передан пустой итерируемый объект, тогда метод возвращает (синхронно) выполненное "обещание".</li>
+ <li>Если одно из переданных обещаний исполнится успешно, или в переданном итерируемом объекте не содержится "обещаний", "обещание" возвращенное из метода <code>Promise.any</code> асинхронно исполнится успешно.</li>
+</ul>
+
+<h3 id="Исполнение_с_ошибкойRejection">Исполнение с ошибкой(Rejection)</h3>
+
+<p>Елси все переданные "обещания" будут отклонены(rejected), <code>Promise.any</code> асинхронно будет отклонено в одном из двух вариантов (которые еще не были согласованы): либо</p>
+
+<ul>
+ <li>Массив(Array) содержащий причины отклонения всех "обещаний" переданных в итерируемом объекте, либо</li>
+ <li>Объект {{JSxRef("AggregateError")}}, расширяющий {{JSxRef("Error")}}, который содержит указатель на массив(Array) исключений.</li>
+</ul>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.es/proposal-promise-any/#sec-promise.any">ESNext Promise.any Proposal</a></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Promise.any")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("Promise")}}</li>
+ <li>{{JSxRef("Promise.allSettled()")}}</li>
+ <li>{{JSxRef("Promise.all()")}}</li>
+ <li>{{JSxRef("Promise.race()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..dee70fbc24
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/catch/index.html
@@ -0,0 +1,157 @@
+---
+title: Promise.prototype.catch()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/catch
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Prototype
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/catch
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong>catch()</strong> возвращает <code>Promise(</code>обещание) и работает только в случае отклонения обещания. Ведет себя аналогично вызову {{jsxref("Promise.then", "Promise.prototype.then(undefined, onRejected)")}}.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox"><var>p.catch(onRejected)</var>;
+
+p.catch(function(reason) {
+ // отказ
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>onRejected</dt>
+ <dd>{{jsxref("Function")}} вызывается когда обещание отклонено. У этой функции один аргумент:
+ <dl>
+ <dt><code>reason</code></dt>
+ <dd>Причина отказа.</dd>
+ <dt>
+ <p>Promise( Обещание ), возвращенное catch (), отклоняется, если onRejected выдает ошибку(throw) или возвращает Promise, который был отклонен; В противном случае Promise, возвращаемый catch () имеет статус  выполнено  (fulfilled)</p>
+ </dt>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Promise")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<dl>
+ <dd>Метод <code>catch может быть полезен для обработки ошибок</code> в вашей структуре обещаний.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_catch">Использование метода <code>catch</code></h3>
+
+<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
+  resolve('Success');
+});
+
+p1.then(function(value) {
+  console.log(value); // "Success!"
+  throw 'oh, no!';
+}).catch(function(e) {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log('Not fired due to the catch');
+});
+
+// Следующий код ведет себя также, как вышенаписанный
+p1.then(function(value) {
+  console.log(value); // "Success!"
+ return Promise.reject('oh, no!');
+}).catch(function(e) {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log(e); // "oh, no!"
+}).then(function(){
+  console.log('after a catch the chain is restored');
+}, function () {
+ // Функция не перевыбросила исключение 'e'
+ // в результате произойдёт resolve(undefined)
+ // для Promise, возвращённого функцией catch
+  console.log('Not fired due to the catch');
+});
+</pre>
+
+<h3 id="Ловим_выброшеные_исключения">Ловим выброшеные исключения</h3>
+
+<pre class="brush: js">// Выкидываемая ошибка вызовет метод catch
+var p1 = new Promise(function(resolve, reject) {
+  throw 'Uh-oh!';
+});
+
+p1.catch(function(e) {
+  console.log(e); // "Uh-oh!"
+});
+
+// Ошибки выброшеные из асинхронных функций не будут пойманы методом catch
+var p2 = new Promise(function(resolve, reject) {
+  setTimeout(function() {
+  throw 'Uncaught Exception!';
+  }, 1000);
+});
+
+p2.catch(function(e) {
+  console.log(e); // Никогда не вызовется
+});
+
+// Ошибки выброшеные после выполнения обещания будут проигнорированны
+var p3 = new Promise(function(resolve, reject) {
+ resolve();
+  throw 'Silenced Exception!';
+});
+
+p3.catch(function(e) {
+   console.log(e); // Никогда не вызовется
+});</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.prototype.catch', 'Promise.prototype.catch')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.catch")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.then()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..5b4391ce47
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/finally/index.html
@@ -0,0 +1,98 @@
+---
+title: Promise.prototype.finally()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/finally
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/finally
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>finally()</strong></code> возвращает {{jsxref("Promise")}}. Когда <code>Promise</code> (обещание) был выполнен, в не зависимости успешно или с ошибкой, указанная функция будет выполнена. Это дает возможность запустить один раз определенный участок кода, который должен выполниться вне зависимости от того, с каким результатом выполнился <code>Promise</code>.</p>
+
+<p>Это позволяет вам избавиться от дубликации кода в обработчиках {{jsxref("Promise.then", "then()")}} и {{jsxref("Promise.catch", "catch()")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>p.finally(onFinally)</var>;
+
+p.finally(function() {
+ // завершен (успешно или с ошибкой)
+});
+
+p.finally(() =&gt; {
+// завершен (успешно или с ошибкой)
+});</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>onFinally</code></dt>
+ <dd>Функция {{jsxref("Function")}} вызываемая когда <code>Promise</code> (обещание) завершено.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращает {{jsxref("Promise")}} для которого в качестве обработчика <code>finally </code>задана функция <code>onFinally</code>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>finally()</code> может быть полезен, если необходимо приоизвести какие-либо вычисления или очистку, как только <code>Promise</code> (обещание) завершено, вне зависимости от результата.</p>
+
+<p><code>finally()</code> очень схож с вызовом <code>.then(onFinally, onFinally)</code>, однако существует несколько различий:</p>
+
+<ul>
+ <li>Использование <code>finally()</code> позволяет избежать двойного объявления одной и той же функции или создания переменной. </li>
+ <li><code>finally</code> не получает аргументов, так как не существует способа определить, будет ли обещание выполнено успешно или с ошибкой. Данный метод необходимо использовать, если не важна причина ошибки или результат успешного выполнения и, следовательно, нет необходимости ее/его передавать.</li>
+ <li>В отличие от <code>Promise.resolve(2).then(() =&gt; {}, () =&gt; {})</code> (результатом которого будет resolved-промис, со значением <code>undefined</code>), результатом <code>Promise.resolve(2).finally(() =&gt; {})</code> будет resolved-промис со значением <code>2</code>.</li>
+ <li>Аналогично, в отличии от <code>Promise.reject(3).then(() =&gt; {}, () =&gt; {})</code> (результатом которого будет resolved-промис, со значением <code>undefined</code>), результатом <code>Promise.reject(3).finally(() =&gt; {})</code> будет rejected-промис со значением <code>3</code>.</li>
+</ul>
+
+<div class="note">
+<p><strong>Note:</strong> A <code>throw</code> (or returning a rejected promise) in the <code>finally</code> callback will reject the new promise with the rejection reason specified when calling <code>throw()</code>.</p>
+</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">let isLoading = true;
+
+fetch(myRequest).then(function(response) {
+ var contentType = response.headers.get("content-type");
+ if(contentType &amp;&amp; contentType.includes("application/json")) {
+ return response.json();
+ }
+ throw new TypeError("Oops, we haven't got JSON!");
+ })
+ .then(function(json) { /* process your JSON further */ })
+ .catch(function(error) { console.log(error); })
+ .finally(function() { isLoading = false; });
+
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/tc39/proposal-promise-finally">TC39 proposal</a></td>
+ <td>Stage 4</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<p class="hidden">Чтобы внести свой вклад в эти данные о совместимости, пожалуйста, напишите запрос извлечения для этого репозитория: <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>
+
+<p>{{Compat("javascript.builtins.Promise.finally")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.then()")}}</li>
+ <li>{{jsxref("Promise.prototype.catch()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/index.html b/files/ru/web/javascript/reference/global_objects/promise/index.html
new file mode 100644
index 0000000000..c4577ab151
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/index.html
@@ -0,0 +1,267 @@
+---
+title: Promise
+slug: Web/JavaScript/Reference/Global_Objects/Promise
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Promise
+ - Обещания
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p>Объект <strong><code>Promise</code></strong> (промис) используется для отложенных и асинхронных вычислений.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/promise-constructor.html")}}</p>
+
+<div class="hidden">
+<p>Исходники интерактивного демо находятся в репозитории на GitHub. Если вы хотите внести свой вклад в развитие интерактивных демо, пожалуйста, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам пулреквест.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js">new Promise(<em>executor</em>);
+new Promise(function(resolve, reject) { ... });</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>executor</dt>
+ <dd>Объект функции с двумя аргументами <code>resolve</code> и <code>reject</code>. Функция <code>executor</code>  получает оба аргумента и выполняется сразу, еще до того как конструктор вернет созданный объект. Первый аргумент (<code>resolve</code>) вызывает успешное исполнение промиса, второй (<code>reject</code>) отклоняет его.<br>
+ Обычно функция <code>executor</code> описывает выполнение какой-то асинхронной работы, по завершении которой необходимо вызвать функцию <code>resolve</code> или <code>reject</code>. Обратите внимание, что возвращаемое значение функции <code>executor</code> игнорируется.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Интерфейс <code><strong>Promise</strong></code> (промис) представляет собой обертку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается <em>обещание </em>(промис)<em> </em>получить результат в некоторый момент в будущем.</p>
+
+<p><code>Promise</code> может находиться в трёх состояниях:</p>
+
+<ul>
+ <li><em>ожидание (pending)</em>: начальное состояние, не исполнен и не отклонен.</li>
+ <li><em>исполнено (fulfilled)</em>: операция завершена успешно.</li>
+ <li><em>отклонено (rejected)</em>: операция завершена с ошибкой.</li>
+</ul>
+
+<p>При создании промис находится в <em>ожидании (pending)</em>, а затем может стать <em>исполненным </em> (<em>fulfilled)</em>, вернув полученный результат (значение), или <em>отклоненным </em>(<em>rejected),</em> вернув причину отказа. В любом из этих случаев вызывается обработчик, прикрепленный к промису методом <code>then</code>. (Если в момент назначения обработчика промис уже исполнен или отклонен, обработчик все равно будет вызван, т.е. асинхронное исполнение промиса и назначение обработчика не будет происходить в «состоянии гонки», как, например, в случае с событиями в DOM.)</p>
+
+<p>Так как методы <code>{{JSxRef("Promise.then", "Promise.prototype.then()")}}</code> и <code>{{JSxRef("Promise.catch", "Promise.prototype.catch()")}}</code> сами возвращают промис, их можно вызывать цепочкой, создавая <em>соединения.</em></p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/8633/promises.png" style="height: 297px; width: 801px;"></p>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> говорят, что промис находится в состоянии <em>завершен (settled) </em>когда он или исполнен или отклонен, т.е. в любом состоянии, кроме ожидания (это лишь форма речи, не являющаяся настоящим состоянием промиса). Также можно встретить термин <em>исполен (resolved) </em>— это значит что промис <em>завершен </em>или "заблокирован" в ожидании завершения другого промиса. В статье <a href="https://github.com/domenic/promises-unwrapping/blob/master/docs/states-and-fates.md">состояния и fates</a> приводится более подробное описание терминологии.</p>
+</div>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Promise.length</code></dt>
+ <dd>Значение свойства всегда равно 1 (количество аргументов конструктора).</dd>
+ <dt>{{jsxref("Promise.prototype")}}</dt>
+ <dd>Представляет прототип для конструктора <code>Promise</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Promise.all", "Promise.all(iterable)")}}</dt>
+ <dd>Ожидает исполнения всех промисов или отклонения любого из них.</dd>
+ <dd>Возвращает промис, который исполнится после исполнения всех промисов в <code>iterable</code>. В случае, если любой из промисов будет отклонен, <code>Promise.all</code> будет также отклонен.</dd>
+ <dt>{{JSxRef("Promise.allSettled", "Promise.allSettled(iterable)")}}</dt>
+ <dd>Ожидает завершения всех полученных промисов (как исполнения так и отклонения).</dd>
+ <dd>Возвращает промис, который исполняется когда все полученные промисы завершены (исполнены или отклонены), содержащий массив результатов исполнения полученных промисов.</dd>
+ <dt>{{jsxref("Promise.race", "Promise.race(iterable)")}}</dt>
+ <dd>Ожидает исполнения или отклонения любого из полученных промисов.</dd>
+ <dd>Возвращает промис, который будет исполнен или отклонен с результатом исполнения первого исполненного или отклонённого промиса из .<code>iterable</code>.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Promise.reject", "Promise.reject(reason)")}}</dt>
+ <dd>Возвращает промис, отклонённый из-за <code>reason</code>.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Promise.resolve", "Promise.resolve(value)")}}</dt>
+ <dd>Возвращает промис, исполненный с результатом <code>value</code>.</dd>
+ <dd>
+ <div class="hidden">
+ <p>Если у <code>value</code> имеется метод <code>then</code>, то возвращаемый промис будет "следовать" продолжению, выступая адаптером его состояния; в противном случае будет возвращен промис в исполненном состоянии. Если вы не уверены, является ли некоторое значение промисом, вы можете обернуть его в  {{JSxRef("Promise.resolve", "Promise.resolve(value)")}} и продолжить работу с ним как с промисом.</p>
+ </div>
+ </dd>
+</dl>
+
+<h2 id="Прототип_Promise">Прототип <code>Promise</code></h2>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype','Свойства')}}</p>
+
+<h3 id="Методы_2">Методы</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/Promise/prototype','Методы')}}</p>
+
+<h2 id="Создание_промиса">Создание промиса</h2>
+
+<p>Объект <code>Promise</code> создается при помощи ключевого слова <code>new</code> и своего конструктора. Конструктор <code>Promise</code> принимает в качестве аргумента функцию, называемую "исполнитель" (<em>executor function</em>). Эта функция должна принимать две функции-коллбэка в качестве параметров. Первый из них (<code>resolve</code>) вызывается, когда асинхронная операция завершилась успешно и вернула результат своего исполнения в виде значения. Второй коллбэк (<code>reject</code>) вызывается, когда операция не удалась, и возвращает значение, указывающее на причину неудачи, чаще всего объект ошибки.</p>
+
+<pre class="brush: js">const myFirstPromise = new Promise((resolve, reject) =&gt; {
+ // выполняется асинхронная операция, которая в итоге вызовет:
+ //
+ // resolve(someValue); // успешное завершение
+ // или
+ // reject("failure reason"); // неудача
+});</pre>
+
+<p>Чтобы снабдить функцию функционалом обещаний, нужно просто вернуть в ней объект <code>Promise</code>:</p>
+
+<pre class="brush: js">function myAsyncFunction(url) {
+ return new Promise((resolve, reject) =&gt; {
+ const xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.onload = () =&gt; resolve(xhr.responseText);
+ xhr.onerror = () =&gt; reject(xhr.statusText);
+ xhr.send();
+ });
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: html" style="display: none;">Создать промис!
+</pre>
+
+<pre class="brush: js">let myFirstPromise = new Promise((resolve, reject) =&gt; {
+ // Мы вызываем resolve(...), когда асинхронная операция завершилась успешно, и reject(...), когда она не удалась.
+ // В этом примере мы используем setTimeout(...), чтобы симулировать асинхронный код.
+ // В реальности вы, скорее всего, будете использовать XHR, HTML5 API или что-то подобное.
+ setTimeout(function(){
+ resolve("Success!"); // Ура! Всё прошло хорошо!
+ }, 250);
+});
+
+myFirstPromise.then((successMessage) =&gt; {
+ // successMessage - это что угодно, что мы передали в функцию resolve(...) выше.
+ // Это необязательно строка, но если это всего лишь сообщение об успешном завершении, это наверняка будет она.
+ console.log("Ура! " + successMessage);
+});</pre>
+
+<h3 id="Продвинутый_пример">Продвинутый пример</h3>
+
+<pre class="brush: html" style="display: none;">Создать промис!
+</pre>
+
+<div id="log">
+<pre class="brush: html">&lt;button id="btn"&gt;Создать Promise!&lt;/button&gt;
+&lt;div id="log"&gt;&lt;/div&gt;</pre>
+</div>
+
+<p>Данный небольшой пример показывает механизм работы с <code>Promise</code>. Метод <code>testPromise()</code> вызывается при каждом нажатии на {{HTMLElement("button")}}. При этом создаётся промис, которое успешно выполняется при помощи <code>window.setTimeout</code>, со значением <code>'result'</code> в случайном интервале от 1 до 3-х секунд.</p>
+
+<p>исполнение промиса протоколируется при помощи продолжения <code>p1.then</code>. Это показывает как синхронная часть метода отвязана от асинхронного завершения промиса.</p>
+
+<pre class="brush: js">var promiseCount = 0;
+function testPromise() {
+ var thisPromiseCount = ++promiseCount;
+
+ var log = document.getElementById('log');
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Запуск (запуск синхронного кода)
+');
+
+ // Создаём промис, возвращающее 'result' (по истечении 3-х секунд)
+ var p1 = new Promise(
+ // Функция разрешения позволяет завершить успешно или
+ // отклонить промис
+ function(resolve, reject) {
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Запуск промиса (запуск асинхронного кода)
+');
+ // Это всего лишь пример асинхронности
+ window.setTimeout(
+ function() {
+ // Обещание исполнено!
+ resolve(thisPromiseCount)
+ }, Math.random() * 2000 + 1000);
+ });
+
+ // Указываем, что сделать с исполненным промисм
+ p1.then(
+ // Записываем в протокол
+ function(val) {
+ log.insertAdjacentHTML('beforeend', val +
+ ') Обещание исполнено (асинхронный код завершён)
+');
+ });
+
+ log.insertAdjacentHTML('beforeend', thisPromiseCount +
+ ') Обещание создано (синхронный код завершён)
+');
+}
+</pre>
+
+<pre class="brush:js" style="display: none;">if ("Promise" in window) {
+ btn = document.getElementById("btn");
+ btn.addEventListener("click",testPromise);
+}
+else {
+ log = document.getElementById('log');
+ log.innerHTML = "Live example not available as your browser doesn't support the Promise interface.";
+}
+</pre>
+
+<pre class="brush: js">if ("Promise" in window) {
+ let btn = document.getElementById("btn");
+ btn.addEventListener("click",testPromise);
+} else {
+ log = document.getElementById('log');
+ log.innerHTML = "Демонстрация невозможна, поскольку ваш браузер не поддерживает интерфейс &lt;code&gt;Promise&lt;code&gt;.";
+}</pre>
+
+<p>Данный пример запускается при нажатии на кнопку. Для этого вам необходим браузер, поддерживающий <code>Promise</code>. При последовательных нажатиях на кнопку с коротким интервалом, вы можете увидеть как различные промиса будут исполнены один за другим.</p>
+
+<h3 id="Загрузка_изображения_при_помощи_XHR">Загрузка изображения при помощи XHR</h3>
+
+<p>Другой простой пример использования <code>Promise</code> и <code><a href="/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a></code> для загрузки изображения доступен в репозитории MDN<a href="https://github.com/mdn/js-examples/tree/master/promises-test">promise-test</a> на GitHub. Вы также можете <a href="https://mdn.github.io/js-examples/promises-test/">посмотреть его в действии</a>. Каждый шаг прокомментирован и вы можете подробно исследовать Promise и XHR.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/domenic/promises-unwrapping">domenic/promises-unwrapping</a></td>
+ <td>Черновик</td>
+ <td>Начало работы над стандартом.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise-objects', 'Promise')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://promisesaplus.com/">Спецификация Promises/A+</a></li>
+ <li><a href="http://www.html5rocks.com/en/tutorials/es6/promises/">Jake Archibald: JavaScript Promises: There and Back Again</a></li>
+ <li><a href="http://de.slideshare.net/domenicdenicola/callbacks-promises-and-coroutines-oh-my-the-evolution-of-asynchronicity-in-javascript">Domenic Denicola: Callbacks, Promises, and Coroutines – Asynchronous Programming Pattern in JavaScript</a></li>
+ <li><a href="http://www.mattgreer.org/articles/promises-in-wicked-detail/">Matt Greer: JavaScript Promises ... In Wicked Detail</a></li>
+ <li><a href="https://www.promisejs.org/">Forbes Lindesay: promisejs.org</a></li>
+ <li><a href="http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html">Nolan Lawson: We have a problem with promises — Common mistakes with promises</a></li>
+ <li><a href="https://github.com/jakearchibald/es6-promise/">Promise polyfill</a></li>
+ <li><a href="https://www.udacity.com/course/javascript-promises--ud898">Udacity: JavaScript Promises</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html b/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html
new file mode 100644
index 0000000000..ebd0f84779
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/prototype/index.html
@@ -0,0 +1,66 @@
+---
+title: Promise.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Promise/prototype
+tags:
+ - JavaScript
+ - Обещание
+ - Свойство
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise
+---
+<div>{{JSRef}}</div>
+
+<p>Cвойство <code><strong>Promise</strong></code><strong><code>.prototype</code></strong> представляет собой прототип конструктора {{jsxref("Promise")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>{{jsxref("Promise")}} обьект наследованный от {{jsxref("Promise.prototype")}}. Вы можете использовать прототип конструктора  чтобы добавлять свойства или методы во все объекты обещаний.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Promise.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создала прототип экземпляра. Это функция всех обещаний по умолчанию.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Promise.catch", "Promise.prototype.catch(onRejected)")}}</dt>
+ <dd>Добавляет функцию обратного вызова для обработки отклонения обещания, которая возвращает новое обещание выполненное с переданным значением, если она вызвана, или оригинальное значение resolve, если обещание выполнено.</dd>
+ <dt>{{jsxref("Promise.then", "Promise.prototype.then(onFulfilled, onRejected)")}}</dt>
+ <dd style="margin-bottom: 0.5cm;">Добавляет обработчик выполнения и отклонения обещания, и возвращает новое обещание выполненное со значением вызванного обработчика, или оригинальное значение, если обещание не было обработано (т.е. если соответствующий обработчик onFulfilled или onRejected не является функцией).</dd>
+</dl>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype', 'Promise.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.prototype', 'Promise.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..79b3fba0b0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/race/index.html
@@ -0,0 +1,115 @@
+---
+title: Promise.race()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/race
+tags:
+ - ECMAScript6
+ - Promise
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/race
+---
+<div>{{JSRef}}</div>
+
+<p>Метод<strong> Promise.race(iterable)</strong> возвращает выполненное или отклоненное обещание, в зависимости от того, с каким результатом завершится первое из переданных обещаний, со значением или причиной отклонения этого обещания.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/promise-race.html")}}</p>
+
+<h2 id="Синтакс">Синтакс</h2>
+
+<pre class="brush: js"><var>Promise.race(iterable)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Итерируемый объект, такой как ({{jsxref("Array")}}). Смотри <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Выполненный или отклоненный {{jsxref("Promise")}} в зависимости от результата первого завершенного из переданных в итерируемом объекте обещаний.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>race</code>  возвращает <code>Обещание </code>(<code>Promise</code>) с результатом, первого завершенного из переданных обещаний. Т.е. возвратит resolve или reject, в зависимости от того, что случится первым.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Promise.race_–_пример_с_setTimeout">Использование <code>Promise.race</code> – пример с <code>setTimeout</code></h3>
+
+<pre class="brush: js">var p1 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 500, "один");
+});
+var p2 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 100, "два");
+});
+
+Promise.race([p1, p2]).then(function(value) {
+ console.log(value); // "два"
+ // Оба вернули resolve, однако p2 вернул результат первым
+});
+
+var p3 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 100, "три");
+});
+var p4 = new Promise(function(resolve, reject) {
+ setTimeout(reject, 500, "четыре");
+});
+
+Promise.race([p3, p4]).then(function(value) {
+ console.log(value); // "три"
+ // p3 быстрее, поэтому выведется значение его resolve
+}, function(reason) {
+ // Не вызывается
+});
+
+var p5 = new Promise(function(resolve, reject) {
+ setTimeout(resolve, 500, "пять");
+});
+var p6 = new Promise(function(resolve, reject) {
+ setTimeout(reject, 100, "шесть");
+});
+
+Promise.race([p5, p6]).then(function(value) {
+ // Не вызывается
+}, function(reason) {
+ console.log(reason); // "шесть"
+ // p6 быстрее, выводится его rejects
+});
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.race', 'Promise.race')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.race', 'Promise.race')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Promise.race")}}</p>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..f234d5122f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/reject/index.html
@@ -0,0 +1,76 @@
+---
+title: Promise.reject()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/reject
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/reject
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Promise.reject(reason)</strong></code> возвращает объект <code>Promise, который был отклонен по указанной причине</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.reject(reason)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>reason</dt>
+ <dd>Причина по которой <code>Promise</code> был отклонен.</dd>
+ <dt>
+ <h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+ <p>Отклоненный с указаной причиной {{jsxref("Promise")}}.</p>
+ </dt>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Promise.reject</code> возвращает <code>Promise</code> который был отклонен. В целях отладки и выборочного отлова ошибок, удобно использовать в качестве причины объекты {{jsxref("Error")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_статического_метода_Promise.reject()">Использование статического метода Promise.reject()</h3>
+
+<pre class="brush: js">Promise.reject(new Error("провал")).then(function(success) {
+ // не вызывается
+}, function(error) {
+ console.log(error); // печатает "провал" + Stacktrace
+ throw error; // повторно выбрасываем ошибку, вызывая новый reject
+});</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.reject', 'Promise.reject')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Исходное определение в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.reject', 'Promise.reject')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Promise.reject")}}</p>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li><a href="http://bluebirdjs.com/docs/api/error.html">Выборочный отлов ошибок с использованием библиотеки BlueBird Promise</a></li>
+</ul>
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
new file mode 100644
index 0000000000..13a8ba9ee9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/resolve/index.html
@@ -0,0 +1,138 @@
+---
+title: Promise.resolve()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/resolve
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Обещание
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/resolve
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Promise.resolve(value)</strong></code> возвращает {{jsxref("Promise")}} выполненый с переданным значением. Если переданное значение является thenable - обьект (т.е. имеет метод {{jsxref("Promise.then", "\"then\" method")}}), возвращаемое обещание будет следовать thenable - обьекту, принимая свое состояние; в ином случае возвращаемое обещание будет выполнено с переданным значением.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Promise.resolve(value)</var>;
+Promise.resolve(promise);
+Promise.resolve(thenable);
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Значение с которым будет выполнено обещание. Может также быть обещанием или обьект подобный обещанию (thenable - обьект имеющий метод then).</dd>
+</dl>
+
+<h3 id="Возращаемое_значение">Возращаемое значение</h3>
+
+<p>Выполненый с переданным значением {{jsxref("Promise")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Метод Promise.resolve</code> возвращает выполненое обещание (<code>Promise</code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_Promise.resolve">Использование метода <code>Promise.resolve</code></h3>
+
+<pre class="brush: js">Promise.resolve("Success").then(function(value) {
+ console.log(value); // "Success"
+}, function(value) {
+ // не будет вызвана
+});
+</pre>
+
+<h3 id="Выполнение_с_массивом">Выполнение с массивом</h3>
+
+<pre class="brush: js">var p = Promise.resolve([1,2,3]);
+p.then(function(v) {
+ console.log(v[0]); // 1
+});
+</pre>
+
+<h3 id="Выполнение_с_другим_обещанием_Promise">Выполнение с другим обещанием ( <code>Promise</code>)</h3>
+
+<pre class="brush: js">var original = Promise.resolve(true);
+var cast = Promise.resolve(original);
+cast.then(function(v) {
+ console.log(v); // true
+});
+</pre>
+
+<h3 id="Выполнение_с_thenable_объектом_и_выбрасывание_исключений">Выполнение с thenable объектом и выбрасывание исключений</h3>
+
+<pre class="brush: js">// Выполнение с thenable объектом
+var p1 = Promise.resolve({
+ then: function(onFulfill, onReject) { onFulfill("fulfilled!"); }
+});
+console.log(p1 instanceof Promise) // true
+
+p1.then(function(v) {
+ console.log(v); // "fulfilled!"
+ }, function(e) {
+ // не вызывается
+});
+
+// Thenable объект выбрасывает исключение
+// перед вызовом колбека Promise resolves
+var thenable = { then: function(resolve) {
+ throw new TypeError("Throwing");
+ resolve("Resolving");
+}};
+
+var p2 = Promise.resolve(thenable);
+p2.then(function(v) {
+ // не вызывается
+}, function(e) {
+ console.log(e); // TypeError: Throwing
+});
+
+// Thenable объект выбрасывает исключение
+// после вызова колбека Promise resolves
+var thenable = { then: function(resolve) {
+ resolve("Resolving");
+ throw new TypeError("Throwing");
+}};
+
+var p3 = Promise.resolve(thenable);
+p3.then(function(v) {
+ console.log(v); // "Resolving"
+}, function(e) {
+ // не вызывается
+});
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.resolve', 'Promise.resolve')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-promise.resolve', 'Promise.resolve')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript/promise","Promise.resolve")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..bf74e41b6c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/promise/then/index.html
@@ -0,0 +1,158 @@
+---
+title: Promise.prototype.then()
+slug: Web/JavaScript/Reference/Global_Objects/Promise/then
+tags:
+ - ECMAScript6
+ - JavaScript
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Promise/then
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>then()</strong></code> возвращает {{jsxref("Promise")}}. Метод может принимать два аргумента: колбэк-функции для случаев выполнения и отклонения промиса.</p>
+
+<div class="note">
+<p> Если один или оба аргумента отсутсвуют или их значения не функции, то <code>then</code> пропустит их и не выбросит ошибку. Если для <code>Promise</code>, который переходит в состояние <code>выполнен</code> или <code>отклонен</code> вызван метод <code>then</code>, и у данного метода нет нужного обработчика, то в таком случае <code>then</code> просто возвращает промис с состоянием начального <code>Promise</code>, для которого <code>then</code> был вызван.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>p.then(onFulfilled[, onRejected])</var>;
+
+p.then(value =&gt; {
+ // выполнение
+ }, reason =&gt; {
+ // отклонение
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>onFulfilled</code> {{optional_inline}}</dt>
+ <dd>{{jsxref("Function")}} вызывается, когда <code>Promise</code> выполнен. Эта функция принимает один аргумент, значение с которым промис был выполнен. Если значение onFulfilled не функция, то оно автоматически заменяется на "Identity" функцию (возвращает полученный аргумент)</dd>
+ <dt><code>onRejected</code> {{optional_inline}}</dt>
+ <dd>{{jsxref("Function")}} вызывается, когда <code>Promise</code>  отклонен. Эта функция принимает один аргумент, значение с которым промис был отклонен. Если значение onRejected не функция, то оно автоматически заменяется на "Thrower" функцию (выбрасывает полученный аргумент как ошибку)</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Так как и метод <code>then</code>, и метод {{jsxref("Promise.prototype.catch()")}} возвращают <code>Promise</code>, их можно вызвать цепочкой — эта операция называется <em>соединение</em>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_then">Использование метода <code>then</code></h3>
+
+<pre class="brush: js notranslate">var p1 = new Promise(function(resolve, reject) {
+ resolve("Успех!");
+ // или
+ // reject("Ошибка!");
+});
+
+p1.then(function(value) {
+ console.log(value); // Успех!
+}, function(reason) {
+ console.log(reason); // Ошибка!
+});
+</pre>
+
+<h3 id="Соединение">Соединение</h3>
+
+<p>Так как метод <code>then</code> возвращает <code>Promise</code> (обещание), вы можете объединить несколько вызовов <code>then</code> в цепочку. Значения возвращаемые из onFulfilled или onRejected коллбэков будут автоматически обернуты в обещание.</p>
+
+<pre class="brush: js notranslate">var p2 = new Promise(function(resolve, reject) {
+ resolve(1);
+});
+
+p2.then(function(value) {
+ console.log(value); // 1
+ return value + 1;
+}).then(function(value) {
+ console.log(value); // 2
+});
+
+p2.then(function(value) {
+ console.log(value); // 1
+});
+</pre>
+
+<p>Вы также можете соединить одну функцию, имеющую подобную с обещаниями API, с другой функцией.</p>
+
+<pre class="brush: js notranslate">function fetch_current_data() {
+ // API функции fetch() возвращает обещание. Эта функция
+ // имеет аналогичный API, за исключением значения в случае выполнения
+  return fetch("current-data.json").then((response) =&gt; {
+ if (response.headers.get("content-type") != "application/json") {
+ throw new TypeError();
+ }
+ var j = response.json();
+ // можем что-нибудь делать с j
+ return j; // в случае выполнения обещания, значение
+ // передается в fetch_current_data().then()
+ });
+}
+</pre>
+
+<p>Если onFulfilled возвращает обещание, возвращаемое значение может быть выполнено (resolved) / отклонено (rejected) обещанием.</p>
+
+<pre class="brush: js notranslate">function resolveLater(resolve, reject) {
+ setTimeout(function () {
+ resolve(10);
+ }, 1000);
+}
+function rejectLater(resolve, reject) {
+ setTimeout(function () {
+ reject(20);
+ }, 1000);
+}
+
+var p1 = Promise.resolve("foo");
+var p2 = p1.then(function() {
+ // Возвращает обещание, которое будет разрешено значением 10 через 1 секунду
+ return new Promise(resolveLater);
+});
+p2.then(function(v) {
+ console.log("resolved", v); // "resolved", 10
+}, function(e) {
+ // не вызвано
+ console.log("rejected", e);
+});
+
+var p3 = p1.then(function() {
+// Возвращает обещание, которое будет отброшено значением 20 через 1 секунду
+ return new Promise(rejectLater);
+});
+p3.then(function(v) {
+ // не
+ console.log("resolved", v);
+}, function(e) {
+ console.log("rejected", e); // "rejected", 20
+});</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-promise.prototype.then', 'Promise.prototype.then')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Promise.then")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Promise")}}</li>
+ <li>{{jsxref("Promise.prototype.catch()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html
new file mode 100644
index 0000000000..a796a08e26
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/deleteproperty/index.html
@@ -0,0 +1,131 @@
+---
+title: handler.deleteProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/deleteProperty
+tags:
+ - Прокси
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/deleteProperty
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>handler.deleteProperty()</code></strong> является "ловушкой" (функция-перехватчик) для оператора {{jsxref("Operators/delete", "delete")}}.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/proxyhandler-deleteproperty.html", "taller")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js">var p = new Proxy(target, {
+ deleteProperty: function(target, property) {
+ }
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<p>Следующие параметры передаются в метод <code>deleteProperty</code>.</p>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Целевой объект.</dd>
+ <dt><code>property</code></dt>
+ <dd>Имя или {{jsxref("Symbol")}} свойства, которое нужно удалить.</dd>
+</dl>
+
+<p><code>this</code> в момент вызова ссылается на объект handler.</p>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Метод <code>deleteProperty</code> должен возвращать {{jsxref("Boolean")}}. Значение <code>true</code>, если свойство было успешно удалено, в противном случае <code>false</code>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code><strong>handler.deleteProperty()</strong></code> является "ловушкой" для оператора {{jsxref("Operators/delete", "delete")}}.</p>
+
+<h3 id="Перехваты">Перехваты</h3>
+
+<p>Данная "ловушка" может перехватывать следующие операции:</p>
+
+<ul>
+ <li>Удаление свойства: <code>delete proxy[foo]</code> and <code>delete proxy.foo</code></li>
+ <li>{{jsxref("Reflect.deleteProperty()")}}</li>
+</ul>
+
+<h3 id="Инварианты">Инварианты</h3>
+
+<p>Если следующие инварианты нарушены, то прокси выдаст ошибку {{jsxref("TypeError")}}:</p>
+
+<ul>
+ <li>Свойство не может быть удалено, если оно неконфигурируемое собственное свойство целевого объекта.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий код перехватывает действие оператора {{jsxref("Operators/delete", "delete")}}.</p>
+
+<pre class="brush: js">var p = new Proxy({}, {
+  deleteProperty: function(target, prop) {
+    if (prop in target){
+      delete target[prop]
+      console.log('property removed: ' + prop)
+      return true
+    }
+    else {
+      console.log('property not found: ' + prop)
+      return false
+    }
+  }
+})
+
+var result
+
+p.a = 10
+console.log('a' in p)  // true
+
+result = delete p.a    // "property removed: a"
+console.log(result)    // true
+console.log('a' in p)  // false
+
+result = delete p.a    // "property not found: a"
+console.log(result)    // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-delete-p', '[[Delete]]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Proxy.handler.deleteProperty")}}</p>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+ <li>{{jsxref("Proxy.handler", "handler")}}</li>
+ <li>{{jsxref("Operators/delete", "delete")}} operator</li>
+ <li>{{jsxref("Reflect.deleteProperty()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html
new file mode 100644
index 0000000000..eef887a246
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/index.html
@@ -0,0 +1,134 @@
+---
+title: Proxy handler
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - NeedsTranslation
+ - Proxy
+ - TopicStub
+ - Прокси
+ - Русский
+ - ловушки
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy
+---
+<div>{{JSRef}}</div>
+
+<p>Объект-обработчик прокси - это объект, который содержит ловушки для {{jsxref("Proxy", "proxies", "", 1)}}.</p>
+
+<h2 id="Методы">Методы</h2>
+
+<p><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Все ловушки ставятся по желанию разработчика.</span></span> <span class="ChMk0b JLqJ4b"><span>Если ловушка не была определена, то, по умолчанию, операция перенаправляется на исходный объект (target).</span></span></span></p>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "handler.getPrototypeOf()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.getPrototypeOf")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "handler.setPrototypeOf()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.setPrototypeOf")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/isExtensible", "handler.isExtensible()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.isExtensible")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "handler.preventExtensions()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.preventExtensions")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.getOwnPropertyDescriptor")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/defineProperty", "handler.defineProperty()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.defineProperty")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/has", "handler.has()")}}</dt>
+ <dd>Ловушка для оператора {{jsxref("Operators/in", "in")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/get", "handler.get()")}}</dt>
+ <dd>Ловушка для получения значений из свойств.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/set", "handler.set()")}}</dt>
+ <dd>Ловушка для установки значений в свойства.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/deleteProperty", "handler.deleteProperty()")}}</dt>
+ <dd>Ловушка для оператора {{jsxref("Operators/delete", "delete")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/ownKeys", "handler.ownKeys()")}}</dt>
+ <dd>Ловушка для {{jsxref("Object.getOwnPropertyNames")}} и {{jsxref("Object.getOwnPropertySymbols")}}.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/apply", "handler.apply()")}}</dt>
+ <dd>Ловушка для вызова функции.</dd>
+ <dt>{{jsxref("Global_Objects/Proxy/handler/construct", "handler.construct()")}}</dt>
+ <dd>Ловушка для оператора {{jsxref("Operators/new", "new")}}.</dd>
+</dl>
+
+<p>Некоторые нестандартные ловушки <a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#Proxy">устарели и были удалены</a>.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Определении при инициализации.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots', 'Proxy Object Internal Methods and Internal Slots')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Обработчик <code>enumerate</code> был удален.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>49 [1]</td>
+ <td>{{ CompatGeckoDesktop("18") }}</td>
+ <td>12</td>
+ <td>{{CompatOpera(36)}}</td>
+ <td>{{CompatSafari(10)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("18") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] <a href="https://www.chromestatus.com/features/4811188005240832">Разрешен по умолчанию</a>.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html b/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html
new file mode 100644
index 0000000000..88b030ecc4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/handler/set/index.html
@@ -0,0 +1,179 @@
+---
+title: handler.set()
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/handler/set
+tags:
+ - Прокси
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/set
+---
+<div>{{JSRef}}</div>
+
+<p><span id="result_box" lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">Метод <strong>handler.set()</strong> является ловушкой для установки </span></span><span lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">значения </span></span><span id="result_box" lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">свойств</span></span><span lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">у</span></span><span lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">.</span></span></p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js notranslate">var p = new Proxy(target, {
+ set: function(target, property, value, receiver) {
+ }
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<p><span id="result_box" lang="ru"><span>Следующие параметры передаются методу </span></span><code>set()</code> <span lang="ru"><span>.</span> </span><code>this</code><span lang="ru"><span> привязан к обработчику</span></span></p>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Исходный обьект, который проксируется.</dd>
+ <dt><code>property</code></dt>
+ <dd><span id="result_box" lang="ru"><span>Имя свойства, в которое устанавливается значение </span></span><code>value</code><span lang="ru"><span>.</span></span></dd>
+ <dt><code>value</code></dt>
+ <dd><span id="result_box" lang="ru"><span>Значение, устанавливаемое в свойство </span></span><code>property</code><span lang="ru"><span>.</span></span></dd>
+ <dt><code>receiver</code></dt>
+ <dd><span id="result_box" lang="ru"><span>Объект, которому первоначально было присвоено задание.</span> <span>Обычно это сам прокси.</span> <span>Но обработчик </span></span><code>set()</code><span lang="ru"><span> также может быть вызван косвенно, через цепочку прототипов или различными другими способами.</span><br>
+      <span>Например, предположим, что скрипт выполняет </span></span><code><var>obj</var>.name = "jen"</code><span lang="ru"><span>, при этом </span></span><code><var>obj</var></code><span lang="ru"><span> не является прокси и не имеет собственного свойства </span></span><code>.name</code><span lang="ru"><span>, но имеет прокси в цепочке прототипов.</span> Б<span>удет вызван обработчик прокси </span></span><code>set()</code><span lang="ru"><span> , а </span></span><code><var>obj</var></code><span lang="ru"><span> будет передан в качестве получателя.</span></span></dd>
+ <dd></dd>
+</dl>
+
+<h3 id="Возвращаемые_результаты">Возвращаемые результаты</h3>
+
+<p>Метод <code>set</code> <span id="result_box" lang="ru"><span>должен возвращать boolean значение</span></span>.</p>
+
+<ul>
+ <li>Возвращает <code>true</code>, если <span id="result_box" lang="ru"><span>присвоение выполнено успешно</span></span>.</li>
+ <li>Если метод <code>set()</code> возвращает <code>false</code>, <span id="result_box" lang="ru"><span>а присваивание произошло в коде строгого режима, то будет выброшена</span></span> {{jsxref("TypeError")}}.</li>
+</ul>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code><strong>handler.set</strong></code> <span id="result_box" lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">является ловушкой для установки </span></span><span lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">значения </span></span><span id="result_box" lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">свойств</span></span><span lang="ru"><span title="The handler.set() method is a trap for setting a property value.
+">у</span></span>.</p>
+
+<h3 id="Перехват">Перехват</h3>
+
+<p>Эта ловушка может перехватывать следующие операции:</p>
+
+<ul>
+ <li>Установка значения свойству: <code>proxy[foo] = bar</code> and <code>proxy.foo = bar</code></li>
+ <li>Установка значения наследованному свойству: <code>Object.create(proxy)[foo] = bar</code></li>
+ <li>{{jsxref("Reflect.set()")}}</li>
+</ul>
+
+<h3 id="Инварианты">Инварианты</h3>
+
+<p>Если нарушены следующие инваринаты, то proxy выбросит {{jsxref("TypeError")}}:</p>
+
+<ul>
+ <li><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Невозможно изменить значение свойства так, чтобы оно отличалось от значения соответствующего свойства целевого объекта, если соответствующее свойство целевого объекта не является доступным для записи и не настраиваемым свойством данных.</span></span></span></li>
+ <li><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Невозможно установить значение свойства, если соответствующее свойство целевого объекта является неконфигурируемым свойством средства доступа, для которого в качестве атрибута [[Set]] указано значение undefined.</span></span></span></li>
+ <li><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>В строгом режиме при возврате из обработчика </span></span></span><code>set()</code><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span> значения </span></span></span><code>false</code><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>, будет выброшено исключение {{jsxref ("TypeError")}}</span></span></span>.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Следующий код перехватывает установку значения свойству</span></span></span><span lang="ru"><span>.</span></span></p>
+
+<pre class="brush: js notranslate">var p = new Proxy({}, {
+  set: function(target, prop, value, receiver) {
+    target[prop] = value
+    console.log('property set: ' + prop + ' = ' + value)
+    return true
+  }
+})
+
+console.log('a' in p)  // false
+
+p.a = 10               // "property set: a = 10"
+console.log('a' in p)  // true
+console.log(p.a)       // 10
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-set-p-v-receiver', '[[Set]]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome("61")}}</td>
+ <td>{{CompatGeckoDesktop("18")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("18")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+ <li>{{jsxref("Proxy.handler", "handler")}}</li>
+ <li>{{jsxref("Reflect.set()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/index.html b/files/ru/web/javascript/reference/global_objects/proxy/index.html
new file mode 100644
index 0000000000..2d8e5ae557
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/index.html
@@ -0,0 +1,482 @@
+---
+title: Прокси
+slug: Web/JavaScript/Reference/Global_Objects/Proxy
+tags:
+ - ECMAScript6
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+ - Объект
+ - Прокси
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy
+---
+<div><font><font>Объект </font></font><code>Proxy</code><font><font> позволяет создать прокси</font><font> для другого объекта, может перехватывать и переопределить основные операции для данного объекта.</font></font></div>
+
+<h2 id="Введение">Введение</h2>
+
+<p>Прокси используются программистами для объявления расширенной семантики JavaScript объектов. Стандартная семантика реализована в движке JavaScript, который обычно написан на низкоуровневом языке программирования, например C++. Прокси позволяют программисту определить поведение объекта при помощи JavaScript. Другими словами они являются <strong>инструментом метапрограммирования</strong>.</p>
+
+<p><strong>Примечание</strong>: реализация прокси в SpiderMonkey является прототипом, в котором прокси API и семантика не стабильны. Также, реализация в SpiderMonkey может не соответствовать последней версии спецификации. Она может быть изменена в любой момент и предоставляется исключительно как экспериментальная функция. <strong>Не полагайтесь на неё в производственном коде.</strong></p>
+
+<p>Эта страница описывает новый API (называемый «непосредственным проксированием»), который является частью Firefox 18. Для просмотра старого API (Firefox 17 и ниже) посетите страницу описания <a href="/en-US/docs/JavaScript/Old_Proxy_API" title="/en-US/docs/JavaScript/Old_Proxy_API">старого прокси API</a>.</p>
+
+<h2 id="Терминология">Терминология</h2>
+
+<dl>
+ <dt>механизм полного перехвата (или "intercession API")</dt>
+ <dd>Технический термин для этой функции.</dd>
+ <dt>прокси (proxy)</dt>
+ <dd>Объект, оборачивающий исходный объект.</dd>
+ <dt>обработчик (handler)</dt>
+ <dd>Объект-заменитель, содержащий ловушки. О<span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>пределяет, какие операции будут перехвачены, также переопределяет перехваченные операции.</span></span></span></dd>
+ <dt>ловушки (traps)</dt>
+ <dd>Методы, которые предоставляют доступ к свойствам. Это аналогично концепции ловушек в операционных системах.</dd>
+ <dt>цель (target)</dt>
+ <dd>Исходный объект, который виртуализируется прокси. Он часто используется в качестве источника данных в прокси. Для него проверяются инварианты относительно расширяемости и настраиваемости свойств.</dd>
+</dl>
+
+<h2 id="Прокси">Прокси</h2>
+
+<p>Прокси - это новые объекты; невозможно выполнить "проксирование" существующего объекта. Пример создания прокси:</p>
+
+<pre class="brush: js notranslate">var p = new Proxy(target, handler);
+</pre>
+
+<p>Где:</p>
+
+<ul>
+ <li><code>target</code> — исходный объект (может быть объектом любого типа, включая массив, функцию и даже другой прокси объект).</li>
+ <li><code>handler</code> — объект-обработчик, методы (ловушки) которого определяют поведение прокси во время выполнения операции над ним.</li>
+</ul>
+
+<h2 id="Обработчик">Обработчик</h2>
+
+<p>Все ловушки опциональны. В случае, если ловушка не задана, то стандартным поведением будет перенаправление операции к объекту-цели.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th>JavaScript код</th>
+ <th>Метод обработчика</th>
+ <th>Описание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>Object.getOwnPropertyDescriptor(proxy, name)</code></td>
+ <td><code><strong>getOwnPropertyDescriptor</strong><br>
+ function(target, name) -&gt; PropertyDescriptor | undefined</code></td>
+ <td>Должен возвращать верный объект-описание свойства или <code>undefined</code>, чтобы показать, что свойство с именем <code>name</code> существует в эмулируемом объекте.</td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>Object.getOwnPropertyNames(proxy)</code><br>
+ <code><code>Object.getOwnPropertySymbols(proxy)</code></code><br>
+ <code><code><code>Object.keys(proxy)</code></code></code></p>
+ </td>
+ <td><code><code><strong>ownKeys</strong></code> function(target) -&gt; [string | symbol]</code></td>
+ <td>Возвращает массив всех собственных (не унаследованных) имён свойств эмулируемого объекта.</td>
+ </tr>
+ <tr>
+ <td><code>Object.defineProperty(proxy,name,pd)</code></td>
+ <td><code><strong>defineProperty</strong> function(target, name, propertyDescriptor) -&gt; any</code></td>
+ <td>Задаёт новое свойство, атрибуты которого определяются предоставленным <code>propertyDescriptor</code>. Возвращаемое значение метода игнорируется.</td>
+ </tr>
+ <tr>
+ <td><code>delete proxy.name</code></td>
+ <td><code><strong>deleteProperty</strong> function(target, name) -&gt; boolean</code></td>
+ <td>Удаляет именованное свойство из прокси. Возвращает <code>true</code> в случае успешного удаления свойства <code>name</code>.</td>
+ </tr>
+ <tr>
+ <td><code>Object.preventExtensions(proxy)</code></td>
+ <td><code><strong>preventExtensions</strong> function(target) -&gt; boolean</code></td>
+ <td>Делает объект нерасширяемым. Возвращает <code>true</code> при успешном выполнении.</td>
+ </tr>
+ <tr>
+ <td><code>name in proxy</code></td>
+ <td><code><strong>has</strong> function(target, name) -&gt; boolean</code></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>proxy.name</code> (in the context of "getting the value")</p>
+
+ <p><code>receiver.name</code> (if <code>receiver</code> inherits from a proxy and does not override <code>name</code>)</p>
+ </td>
+ <td><code><strong>get</strong> function(target, name, receiver) -&gt; any</code></td>
+ <td><code>receiver</code> — это прокси или объект, унаследованный от прокси.</td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>proxy.name = val</code> (in the context of "setting the value")</p>
+
+ <p><code>receiver.name = val</code> (if <code>receiver</code> inherits from a proxy and does not override <code>name</code>)</p>
+ </td>
+ <td><code><strong>set</strong> function(target, name, val, receiver) -&gt; boolean</code></td>
+ <td><code style="font-style: normal;">receiver</code> — это прокси или объект, унаследованный от прокси.</td>
+ </tr>
+ <tr>
+ <td>
+ <p><code>proxy(...args)<br>
+ proxy.apply(thisValue, args)<br>
+ proxy.call(thisValue, ...args)</code></p>
+ </td>
+ <td><code><strong>apply</strong> function(target, thisValue, args) -&gt; any</code></td>
+ <td><code>target</code> должен быть функцией.</td>
+ </tr>
+ <tr>
+ <td><code>new proxy(...args)</code></td>
+ <td><code><strong>construct</strong> function(target, args) -&gt; object</code></td>
+ <td><code>target</code> должен быть функцией.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Инварианты">Инварианты</h2>
+
+<p>Несмотря на то, что прокси предоставляют много возможностей пользователям, некоторые операции не перехватываются для сохранения постоянства языка:</p>
+
+<ul>
+ <li>Простой и строгий оператор равенства (<code>==</code>, <code>===</code>) не перехватывается. <code>p1 === p2</code> равны, только если <code>p1</code> и <code>p2</code> ссылаются на один и тот же прокси.</li>
+ <li>Текущая реализация <code>Object.getPrototypeOf(proxy)</code> всегда возвращает <code>Object.getPrototypeOf(target)</code>, потому что в ES2015 перехватчик getPrototypeOf пока не реализован.</li>
+ <li><code>typeof proxy</code> всегда возвращает  <code>typeof target</code>. В частности, <code>proxy</code> может быть использован как функция только если <code>target </code>является функцией.</li>
+ <li><code>Array.isArray(proxy)</code> всегда возвращает  <code>Array.isArray(target)</code>.</li>
+ <li><code>Object.prototype.toString.call(proxy)</code> всегда возвращает <code>Object.prototype.toString.call(target)</code>, потому что в  ES2015 перехватчик Symbol.toStringTag пока не реализован.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<p>Объект, возвращающий значение <code>37</code>, в случае отсутствия свойства с указанным именем:</p>
+
+<pre class="brush: js notranslate">var handler = {
+ get: function(target, name){
+ return name in target?
+ target[name] :
+ 37;
+ }
+};
+
+var p = new Proxy({}, handler);
+p.a = 1;
+p.b = undefined;
+
+console.log(p.a, p.b); // 1, undefined
+console.log('c' in p, p.c); // false, 37
+</pre>
+
+<h3 id="Перенаправляющий_прокси">Перенаправляющий прокси</h3>
+
+<p>В данном примере мы используем JavaScript объект, к которому наш прокси направляет все запросы:</p>
+
+<pre class="brush: js notranslate">var target = {};
+var p = new Proxy(target, {});
+
+p.a = 37; // операция перенаправлена прокси
+
+console.log(target.a); // 37. Операция была успешно перенаправлена
+</pre>
+
+<h3 id="Проверка">Проверка</h3>
+
+<p>При помощи <code>Proxy</code> вы можете легко проверять передаваемые объекту значения:</p>
+
+<pre class="brush: js notranslate">let validator = {
+ set: function(obj, prop, value) {
+ if (prop === 'age') {
+ if (!Number.isInteger(value)) {
+ throw new TypeError('The age is not an integer');
+ }
+ if (value &gt; 200) {
+ throw new RangeError('The age seems invalid');
+ }
+ }
+
+ // Стандартное сохранение значения
+ obj[prop] = value;
+ }
+};
+
+let person = new Proxy({}, validator);
+
+person.age = 100;
+console.log(person.age); // 100
+person.age = 'young'; // Вызовет исключение
+person.age = 300; // Вызовет исключение
+</pre>
+
+<h3 id="Дополнение_конструктора">Дополнение конструктора</h3>
+
+<p>Функция прокси может легко дополнить конструктор новым:</p>
+
+<pre class="brush: js notranslate">function extend(sup, base) {
+    var descriptor = Object.getOwnPropertyDescriptor(
+        base.prototype, 'constructor',
+    );
+
+  const prototype = {...base.prototype}
+
+  base.prototype = Object.create(sup.prototype);
+  base.prototype = Object.assign(base.prototype, prototype);
+
+    var handler = {
+        construct: function(target, args) {
+            var obj = Object.create(base.prototype);
+            this.apply(target, obj, args);
+            return obj;
+        },
+        apply: function(target, that, args) {
+            sup.apply(that, args);
+            base.apply(that, args);
+        },
+    };
+    var proxy = new Proxy(base, handler);
+    descriptor.value = proxy;
+    Object.defineProperty(base.prototype, 'constructor', descriptor);
+    return proxy;
+}
+
+var Person = function(name) {
+    this.name = name;
+};
+
+var Boy = extend(Person, function(name, age) {
+    this.age = age;
+});
+
+Boy.prototype.sex = 'M';
+
+var Peter = new Boy('Peter', 13);
+console.log(Peter.sex); // "M"
+console.log(Peter.name); // "Peter"
+console.log(Peter.age); // 13
+</pre>
+
+<h3 id="Манипуляция_DOM_элементами">Манипуляция<span style="font-size: 1.71428571428571rem;"> DOM </span><span style="font-size: 1.71428571428571rem;">элементами</span></h3>
+
+<p>Иногда возникает необходимость переключить атрибут или имя класса у двух разных элементов:</p>
+
+<pre class="brush: js notranslate">let view = new Proxy({
+ selected: null
+},
+{
+ set: function(obj, prop, newval) {
+ let oldval = obj[prop];
+
+ if (prop === 'selected') {
+ if (oldval) {
+ oldval.setAttribute('aria-selected', 'false');
+ }
+ if (newval) {
+ newval.setAttribute('aria-selected', 'true');
+ }
+ }
+
+ // Стандартное сохранение значения
+ obj[prop] = newval;
+ }
+});
+
+let i1 = view.selected = document.getElementById('item-1');
+console.log(i1.getAttribute('aria-selected')); // 'true'
+
+let i2 = view.selected = document.getElementById('item-2');
+console.log(i1.getAttribute('aria-selected')); // 'false'
+console.log(i2.getAttribute('aria-selected')); // 'true'
+</pre>
+
+<h3 id="Изменение_значений_и_дополнительные_свойства">Изменение значений и дополнительные свойства</h3>
+
+<p>Прокси объект <code>products</code> проверяет передаваемые значения и преобразует их в массив в случае необходимости. Объект также поддерживает дополнительное свойство <code>latestBrowser</code> на чтение и запись.</p>
+
+<pre class="brush: js notranslate">let products = new Proxy({
+ browsers: ['Internet Explorer', 'Netscape']
+},
+{
+ get: function(obj, prop) {
+ // Дополнительное свойство
+ if (prop === 'latestBrowser') {
+ return obj.browsers[obj.browsers.length - 1];
+ }
+
+ // Стандартный возврат значения
+ return obj[prop];
+ },
+ set: function(obj, prop, value) {
+ // Дополнительное свойство
+ if (prop === 'latestBrowser') {
+ obj.browsers.push(value);
+ return;
+ }
+
+ // Преобразование значения, если оно не массив
+ if (typeof value === 'string') {
+ value = [value];
+ }
+
+ // Стандартное сохранение значения
+ obj[prop] = value;
+ }
+});
+
+console.log(products.browsers); // ['Internet Explorer', 'Netscape']
+products.browsers = 'Firefox'; // передаётся как строка (по ошибке)
+console.log(products.browsers); // ['Firefox'] &lt;- проблем нет, значение - массив
+
+products.latestBrowser = 'Chrome';
+console.log(products.browsers); // ['Firefox', 'Chrome']
+console.log(products.latestBrowser); // 'Chrome'
+</pre>
+
+<h3 id="Поиск_элемента_массива_по_его_свойству">Поиск элемента массива по его свойству</h3>
+
+<p>Данный прокси расширяет массив дополнительными возможностями. Как вы видите, вы можете гибко "задавать" свойства без использования <a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperties"><code>Object.defineProperties</code></a>. Данный пример также может быть использован для поиска строки таблицы по её ячейке. В этом случае целью будет <a href="/en-US/docs/DOM/table.rows"><code>table.rows</code></a>.</p>
+
+<pre class="brush: js notranslate">let products = new Proxy([
+ { name: 'Firefox', type: 'browser' },
+ { name: 'SeaMonkey', type: 'browser' },
+ { name: 'Thunderbird', type: 'mailer' }
+],
+{
+ get: function(obj, prop) {
+ // Стандартное возвращение значения; prop обычно является числом
+ if (prop in obj) {
+ return obj[prop];
+ }
+
+ // Получение количества продуктов; псевдоним products.length
+ if (prop === 'number') {
+ return obj.length;
+ }
+
+ let result, types = {};
+
+ for (let product of obj) {
+ if (product.name === prop) {
+ result = product;
+ }
+ if (types[product.type]) {
+ types[product.type].push(product);
+ } else {
+ types[product.type] = [product];
+ }
+ }
+
+ // Получение продукта по имени
+ if (result) {
+ return result;
+ }
+
+ // Получение продуктов по типу
+ if (prop in types) {
+ return types[prop];
+ }
+
+ // Получение типов продуктов
+ if (prop === 'types') {
+ return Object.keys(types);
+ }
+
+ return undefined;
+ }
+});
+
+console.log(products[0]); // { name: 'Firefox', type: 'browser' }
+console.log(products['Firefox']); // { name: 'Firefox', type: 'browser' }
+console.log(products['Chrome']); // undefined
+console.log(products.browser); // [{ name: 'Firefox', type: 'browser' }, { name: 'SeaMonkey', type: 'browser' }]
+console.log(products.types); // ['browser', 'mailer']
+console.log(products.number); // 3
+</pre>
+
+<h3 id="Пример_использования_всех_перехватчиков">Пример использования всех перехватчиков</h3>
+
+<p>В данном примере, использующем все виды перехватчиков, мы попытаемся проксировать <em>не нативный</em> объект, который частично приспособлен для этого - <code>docCookies,</code> созданном в разделе <a href="https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support" title="https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support">"little framework" и опубликованном на странице <code>document.cookie</code></a>.</p>
+
+<pre class="brush: js notranslate">/*
+ var docCookies = ... получить объект "docCookies" можно здесь:
+  https://developer.mozilla.org/en-US/docs/DOM/document.cookie#A_little_framework.3A_a_complete_cookies_reader.2Fwriter_with_full_unicode_support
+*/
+
+var docCookies = new Proxy(docCookies, {
+  "get": function (oTarget, sKey) {
+    return oTarget[sKey] || oTarget.getItem(sKey) || undefined;
+  },
+  "set": function (oTarget, sKey, vValue) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.setItem(sKey, vValue);
+  },
+  "deleteProperty": function (oTarget, sKey) {
+    if (sKey in oTarget) { return false; }
+    return oTarget.removeItem(sKey);
+  },
+  "enumerate": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "iterate": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "ownKeys": function (oTarget, sKey) {
+    return oTarget.keys();
+  },
+  "has": function (oTarget, sKey) {
+    return sKey in oTarget || oTarget.hasItem(sKey);
+  },
+  "hasOwn": function (oTarget, sKey) {
+    return oTarget.hasItem(sKey);
+  },
+  "defineProperty": function (oTarget, sKey, oDesc) {
+    if (oDesc &amp;&amp; "value" in oDesc) { oTarget.setItem(sKey, oDesc.value); }
+    return oTarget;
+  },
+  "getPropertyNames": function (oTarget) {
+    return Object.getPropertyNames(oTarget).concat(oTarget.keys());
+  },
+  "getOwnPropertyNames": function (oTarget) {
+    return Object.getOwnPropertyNames(oTarget).concat(oTarget.keys());
+  },
+  "getPropertyDescriptor": function (oTarget, sKey) {
+    var vValue = oTarget[sKey] || oTarget.getItem(sKey)
+    return vValue ? {
+      "value": vValue,
+      "writable": true,
+      "enumerable": true,
+      "configurable": false
+    } : undefined;
+  },
+  "getOwnPropertyDescriptor": function (oTarget, sKey) {
+    var vValue = oTarget.getItem(sKey);
+    return vValue ? {
+      "value": vValue,
+      "writable": true,
+      "enumerable": true,
+      "configurable": false
+    } : undefined;
+  },
+  "fix":  function (oTarget) {
+    return "not implemented yet!";
+  },
+});
+
+/* Проверка cookies */
+
+alert(docCookies.my_cookie1 = "First value");
+alert(docCookies.getItem("my_cookie1"));
+
+docCookies.setItem("my_cookie1", "Changed value");
+alert(docCookies.my_cookie1);</pre>
+
+<h2 id="See_also" name="See_also" style="line-height: 30px; font-size: 2.14285714285714rem;">Смотрите также</h2>
+
+<ul>
+ <li><a class="external" href="http://jsconf.eu/2010/speaker/be_proxy_objects.html">"Proxies are awesome" презентация Brendan Eich на JSConf</a> (<a class="external" href="http://www.slideshare.net/BrendanEich/metaprog-5303821">слайды</a>)</li>
+ <li><a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies">Страница предложения ECMAScript Harmony Proxy</a> и <a class="external" href="http://wiki.ecmascript.org/doku.php?id=harmony:proxies_semantics">страница ECMAScript Harmony proxy semantics</a></li>
+ <li><a class="external" href="http://soft.vub.ac.be/~tvcutsem/proxies/">Руководство по прокси</a></li>
+ <li><a href="/en-US/docs/JavaScript/Old_Proxy_API" title="/en-US/docs/JavaScript/Old_Proxy_API">Старая страница Proxy API</a></li>
+ <li><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object/watch"><code>Object.watch</code></a> - не стандартная возможность, поддерживается только в движке Gecko.</li>
+</ul>
+
+<h2 id="Лицензионные_примечания">Лицензионные примечания</h2>
+
+<p>Некоторое содержимое (текст, примеры) данной страницы было скопировано или адаптировано со страниц <a class="external" href="http://wiki.ecmascript.org/doku.php">вики ECMAScript</a>, имеющей лицензию <a class="external" href="http://creativecommons.org/licenses/by-nc-sa/2.0/">CC 2.0 BY-NC-SA</a></p>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/proxy/apply/index.html b/files/ru/web/javascript/reference/global_objects/proxy/proxy/apply/index.html
new file mode 100644
index 0000000000..81ea9d0605
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/proxy/apply/index.html
@@ -0,0 +1,111 @@
+---
+title: handler.apply()
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply
+tags:
+ - Прокси
+ - вызов функции
+ - ловушка
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/apply
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>handler.apply()</code></strong> является ловушкой для вызова функции.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/proxyhandler-apply.html", "taller")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">const <var>p</var> = new Proxy(<var>target</var>, {
+ apply: function(<var>target</var>, <var>thisArg</var>, <var>argumentsList</var>) {
+ }
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<p>Методу <code>apply()</code> передаются следующие параметры. <code>this</code> связан с объектом-обработчиком.</p>
+
+<dl>
+ <dt><code><var>target</var></code></dt>
+ <dd>Исходный объект.</dd>
+ <dt><code><var>thisArg</var></code></dt>
+ <dd>Аргумент <code>this</code> для вызова.</dd>
+ <dt><code><var>argumentsList</var></code></dt>
+ <dd>Список аргументов для вызова.</dd>
+</dl>
+
+<h3 id="Возврат_значения">Возврат значения</h3>
+
+<p>Метод <code>apply()</code> может возвращать значение.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code><strong>handler.apply()</strong></code> является ловушкой для вызова функции.</p>
+
+<h3 id="Перехват">Перехват</h3>
+
+<p>Ловушка может перехватывать следующие операции:</p>
+
+<ul>
+ <li><code><var>proxy</var>(...<var>args</var>)</code></li>
+ <li>{{jsxref("Function.prototype.apply()")}} и {{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Reflect.apply()")}}</li>
+</ul>
+
+<h3 id="Инварианты">Инварианты</h3>
+
+<p>Если следующие инваринаты нарушены, то прокси выбросит {{jsxref("TypeError")}}.</p>
+
+<p>Исходный объект <code><var>target</var></code> должен быть самовызываемым. То есть, это должна быть функция-объект.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ловушка_для_вызова_функции">Ловушка для вызова функции</h3>
+
+<p>Следующий код ловит вызов функции.</p>
+
+<pre class="brush: js notranslate">const p = new Proxy(function() {}, {
+ apply: function(target, thisArg, argumentsList) {
+ console.log('called: ' + argumentsList.join(', '));
+ return argumentsList[0] + argumentsList[1] + argumentsList[2];
+ }
+});
+
+console.log(p(1, 2, 3)); // "called: 1, 2, 3"
+ // 6
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist', '[[Call]]')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Proxy.handler.apply")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+ <li>{{jsxref("Proxy.handler", "handler")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Reflect.apply()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/proxy/get/index.html b/files/ru/web/javascript/reference/global_objects/proxy/proxy/get/index.html
new file mode 100644
index 0000000000..2d6be05af5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/proxy/get/index.html
@@ -0,0 +1,127 @@
+---
+title: handler.get()
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy/get
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>handler.get()</code></strong> является ловушкой для получения значения свойства.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/proxyhandler-get.html", "taller")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox notranslate">const <var>p</var> = new Proxy(<var>target</var>, {
+ get: function(<var>target</var>, <var>property</var>, <var>receiver</var>) {
+ }
+});
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<p>Следующие параметры передаются методу <code>get()</code>. <code>this</code> привязан к обработчику.</p>
+
+<dl>
+ <dt><code><var>target</var></code></dt>
+ <dd>Исходный объект, который проксируется.</dd>
+ <dt><code><var>property</var></code></dt>
+ <dd>Наименование или {{jsxref("Symbol")}} получаемого свойства. </dd>
+ <dt><code><var>receiver</var></code></dt>
+ <dd><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Прокси или объект, наследуемый от прокси.</span></span></span>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение"><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Возвращаемое значение</span></span></span></h3>
+
+<p>Метод <code>get()</code> может возвращать значение.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code><strong>handler.get()</strong></code> является ловушкой для получения значения свойства.</p>
+
+<h3 id="Перехват">Перехват</h3>
+
+<p>Эта ловушка может перехватывать следующие операции:</p>
+
+<ul>
+ <li>Доступ к свойству: <code><var>proxy</var>[<var>foo</var>]</code>and <code><var>proxy</var>.<var>bar</var></code></li>
+ <li>Доступ к наследованному свойству: <code>Object.create(<var>proxy</var>)[<var>foo</var>]</code></li>
+ <li>{{jsxref("Reflect.get()")}}</li>
+</ul>
+
+<h3 id="Инварианты">Инварианты</h3>
+
+<p>Если следующие инваринаты нарушены, то прокси выбросит {{jsxref("TypeError")}}:</p>
+
+<ul>
+ <li><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Значение, сообщаемое для свойства, должно быть таким же, как значение соответствующего свойства целевого объекта, если свойство целевого объекта является неперезаписываемым, не настраиваемым свойством собственных данных.</span></span></span></li>
+ <li><span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>Значение, сообщаемое для свойства, должно быть </span></span></span>undefined, <span class="VIiyi" lang="ru"><span class="ChMk0b JLqJ4b"><span>если соответствующее свойство целевого объекта не является настраиваемым собственным свойством доступа, которое</span></span></span> <code>undefined</code> как и его атрибут <code>[[Get]]</code> attribute.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ловушка_для_получения_значения_свойства">Ловушка для получения значения свойства</h3>
+
+<p>Следующий код перехватывает получение значения свойства.</p>
+
+<pre class="brush: js notranslate">const p = new Proxy({}, {
+ get: function(target, property, receiver) {
+ console.log('called: ' + property);
+ return 10;
+ }
+});
+
+console.log(p.a); // "called: a"
+ // 10
+</pre>
+
+<p>Следующий код нарушает инвариант.</p>
+
+<pre class="brush: js notranslate">const obj = {};
+Object.defineProperty(obj, 'a', {
+ configurable: false,
+ enumerable: false,
+ value: 10,
+ writable: false
+});
+
+const p = new Proxy(obj, {
+ get: function(target, property) {
+ return 20;
+ }
+});
+
+p.a; // TypeError is thrown
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver', '[[Get]]')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Proxy.handler.get")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+ <li>{{jsxref("Proxy.handler", "handler")}}</li>
+ <li>{{jsxref("Reflect.get()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/proxy/index.html b/files/ru/web/javascript/reference/global_objects/proxy/proxy/index.html
new file mode 100644
index 0000000000..1bf6b70b43
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/proxy/index.html
@@ -0,0 +1,125 @@
+---
+title: Proxy() constructor
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy
+tags:
+ - Constructor
+ - JavaScript
+ - NeedsTranslation
+ - Proxy
+ - Reference
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/Proxy
+---
+<div>{{JSRef}}</div>
+
+<p>The <code><strong>Proxy()</strong></code> constructor is used to create {{jsxref("Proxy")}} objects.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox notranslate">new Proxy(<var>target</var>, <var>handler</var>)</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code><var>target</var></code></dt>
+ <dd>A target object to wrap with <code>Proxy</code>. It can be any sort of object, including a native array, a function, or even another proxy.</dd>
+ <dt><code><var>handler</var></code></dt>
+ <dd>An object whose properties are functions that define the behavior of the proxy when an operation is performed on it.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>Use the <code>Proxy()</code> constructor to create a new <code>Proxy</code> object. This constructor takes two mandatory arguments:</p>
+
+<ul>
+ <li><code>target</code> is the object for which you want to create the proxy</li>
+ <li><code>handler</code> is the object that defines the custom behavior of the proxy.</li>
+</ul>
+
+<p>An empty handler will create a proxy that behaves, in almost all respects, exactly like the target. By defining any of a set group of functions on the <code>handler</code> object, you can customise specific aspects of the proxy's behavior. For example, by defining <code>get()</code> you can provide a customised version of the target's <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessor</a>.</p>
+
+<h3 id="Handler_functions">Handler functions</h3>
+
+<p>This section lists all the handler functions you can define. Handler functions are sometimes called <em>traps</em>, because they trap calls to the underlying target object.</p>
+
+<dl>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/apply", "handler.apply()")}}</dt>
+ <dd>A trap for a function call.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/construct", "handler.construct()")}}</dt>
+ <dd>A trap for the {{JSxRef("Operators/new", "new")}} operator.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/defineProperty", "handler.defineProperty()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.defineProperty")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/deleteProperty", "handler.deleteProperty()")}}</dt>
+ <dd>A trap for the {{JSxRef("Operators/delete", "delete")}} operator.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/get", "handler.get()")}}</dt>
+ <dd>A trap for getting property values.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/getOwnPropertyDescriptor", "handler.getOwnPropertyDescriptor()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.getOwnPropertyDescriptor")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/getPrototypeOf", "handler.getPrototypeOf()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.getPrototypeOf")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/has", "handler.has()")}}</dt>
+ <dd>A trap for the {{JSxRef("Operators/in", "in")}} operator.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/isExtensible", "handler.isExtensible()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.isExtensible")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/ownKeys", "handler.ownKeys()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.getOwnPropertyNames")}} and {{JSxRef("Object.getOwnPropertySymbols")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/preventExtensions", "handler.preventExtensions()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.preventExtensions")}}.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/set", "handler.set()")}}</dt>
+ <dd>A trap for setting property values.</dd>
+ <dt>{{JSxRef("Global_Objects/Proxy/Proxy/setPrototypeOf", "handler.setPrototypeOf()")}}</dt>
+ <dd>A trap for {{JSxRef("Object.setPrototypeOf")}}.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Selectively_proxy_property_accessors">Selectively proxy property accessors</h3>
+
+<p>In this example the target has two properties, <code>notProxied</code> and <code>proxied</code>. We define a handler that returns a different value for <code>proxied</code>, and lets any other accesses through to the target.</p>
+
+<pre class="brush: js notranslate">const target = {
+ notProxied: "original value",
+ proxied: "original value"
+};
+
+const handler = {
+ get: function(target, prop, receiver) {
+ if (prop === "proxied") {
+ return "replaced value";
+ }
+ return Reflect.get(...arguments);
+ }
+};
+
+const proxy = new Proxy(target, handler);
+
+console.log(proxy.notProxied); // "original value"
+console.log(proxy.proxied); // "replaced value"</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy-constructor', 'Proxy constructor')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Proxy.Proxy")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Meta_programming"><code>Proxy</code> and <code>Reflect</code> in the JavaScript Guide</a></li>
+ <li>{{jsxref("Global_Objects/Reflect", "Reflect")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/proxy/revocable/index.html b/files/ru/web/javascript/reference/global_objects/proxy/revocable/index.html
new file mode 100644
index 0000000000..fbc4009f60
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/proxy/revocable/index.html
@@ -0,0 +1,91 @@
+---
+title: Proxy.revocable()
+slug: Web/JavaScript/Reference/Global_Objects/Proxy/revocable
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Proxy
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Proxy/revocable
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Proxy.revocable()</strong></code> используется, чтобы создать отменяемый {{jsxref("Proxy")}} объект.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Proxy.revocable(target, handler);
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<div>{{ Page("/docs/Web/JavaScript/Reference/Global_Objects/Proxy", "Parameters") }}</div>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Создаётся и возвращается отменяемый <code>Proxy</code> объект.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Отменяемый <code>Proxy</code> - объект со следующими двумя свойствами <code>{proxy: proxy, revoke: revoke}</code>.</p>
+
+<dl>
+ <dt><code>proxy</code></dt>
+ <dd>Объект <code>Proxy</code>, созданный с помощью вызова <code>new Proxy(target, handler)</code>.</dd>
+ <dt><code>revoke</code></dt>
+ <dd>Функция, не принимающая аргументов, которая сделает недействительным (выключит) <code>proxy</code>.</dd>
+</dl>
+
+<p>Если вызовется функция <code>revoke()</code>, <code>proxy</code> становится неиспользуемым: Любой <code>proxy</code>-перехватчик событий объекта будет вызывать исключение {{jsxref("TypeError")}}. Как только <code>proxy</code> отменена, она останется отменённой и дальше, и может быть собрана сборщиком мусора. Повторный вызов <code>revoke()</code> не будет иметь никакого эффекта.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var revocable = Proxy.revocable({}, {
+ get: function(target, name) {
+ return "[[" + name + "]]";
+ }
+});
+var proxy = revocable.proxy;
+console.log(proxy.foo); // "[[foo]]"
+
+revocable.revoke();
+
+console.log(proxy.foo); // Вызвано исключение TypeError
+proxy.foo = 1 // TypeError снова
+delete proxy.foo; // Всё ещё TypeError
+typeof proxy // "object", typeof не вызывает никаких proxy-перехватчиков событий
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-proxy.revocable', 'Proxy Revocation Functions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузерами">Совместимость браузерами</h2>
+
+<div class="hidden">Таблица совместимости с браузерами на этой странице сгенерирована из структурированных данных. Если вы хотите внести свой вклад, добавить данные, пожалуйста посетите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Proxy.revocable")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Proxy")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/rangeerror/index.html b/files/ru/web/javascript/reference/global_objects/rangeerror/index.html
new file mode 100644
index 0000000000..c81cd31cdc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/rangeerror/index.html
@@ -0,0 +1,151 @@
+---
+title: RangeError
+slug: Web/JavaScript/Reference/Global_Objects/RangeError
+tags:
+ - Error
+ - JavaScript
+ - Object
+ - RangeError
+translation_of: Web/JavaScript/Reference/Global_Objects/RangeError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Объект <code><strong>RangeError</strong></code> представляет ошибку, возникающую, когда значение не входит в множество или выходит за диапазон допустимых значений.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>new RangeError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Исключение <code>RangeError</code> выбрасывается при попытке передать аргументом в функцию число, которое не входит в допустимый диапазон значений аргумента этой функции. Оно может возникать при создании массива с неправильной длиной через конструктор {{jsxref("Array")}}, или при передаче плохих значений в методы числа {{jsxref("Number.toExponential()")}}, {{jsxref("Number.toFixed()")}} или {{jsxref("Number.toPrecision()")}}.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt>{{jsxref("RangeError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>RangeError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Глобальный объект <code>RangeError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="RangeError_instances" name="RangeError_instances">Экземпляры объекта <code>RangeError</code></h2>
+
+<h3 id="Properties_of_RangeError_instances" name="Properties_of_RangeError_instances">Свойства</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/RangeError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_RangeError_instances" name="Methods_of_RangeError_instances">Методы</h3>
+<div>{{page('/ru/Web/JavaScript/Reference/Global_Objects/RangeError/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_RangeError" name="Example:_Using_RangeError">Пример: использование <code>RangeError</code></h3>
+<pre class="brush: js">var check = function(num) {
+ if (num &lt; MIN || num &gt; MAX) {
+ throw new RangeError('Параметр должен быть между ' + MIN + ' и ' + MAX);
+ }
+};
+
+try {
+ check(500);
+}
+catch (e) {
+ if (e instanceof RangeError) {
+ // Обработка ошибки диапазона
+ }
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.2', 'RangeError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-rangeerror', 'RangeError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("RangeError.prototype")}}</li>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Number.toExponential()")}}</li>
+ <li>{{jsxref("Number.toFixed()")}}</li>
+ <li>{{jsxref("Number.toPrecision()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/rangeerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/rangeerror/prototype/index.html
new file mode 100644
index 0000000000..e537146615
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/rangeerror/prototype/index.html
@@ -0,0 +1,122 @@
+---
+title: RangeError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/RangeError/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+ - RangeError
+translation_of: Web/JavaScript/Reference/Global_Objects/RangeError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>RangeError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("RangeError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("RangeError")}} наследуются от объекта <code>RangeError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>RangeError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "RangeError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("RangeError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "RangeError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "RangeError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "RangeError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "RangeError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "RangeError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("RangeError")}} не содержит собственных методов, экземпляры {{jsxref("RangeError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/referenceerror/index.html b/files/ru/web/javascript/reference/global_objects/referenceerror/index.html
new file mode 100644
index 0000000000..b7e2dbf000
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/referenceerror/index.html
@@ -0,0 +1,131 @@
+---
+title: ReferenceError
+slug: Web/JavaScript/Reference/Global_Objects/ReferenceError
+tags:
+ - Error
+ - JavaScript
+ - Object
+ - Reference
+ - ReferenceError
+translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <code><strong>ReferenceError</strong></code> представляет ошибку, возникающую при обращении к несуществующей переменной.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new ReferenceError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Исключение <code>ReferenceError</code> выбрасывается при попытке обратиться к переменной, которая не была объявлена.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("ReferenceError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>ReferenceError</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<p>Глобальный объект <code>ReferenceError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Экземпляры_объекта_ReferenceError">Экземпляры объекта <code>ReferenceError</code></h2>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError/prototype', 'Properties')}}</div>
+
+<h3 id="Методы_2">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError/prototype', 'Methods')}}</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Перехват_ReferenceError">Перехват <code>ReferenceError</code></h3>
+
+<pre class="brush: js">try {
+ var a = undefinedVariable;
+} catch (e) {
+ console.log(e instanceof ReferenceError); // true
+ console.log(e.message); // "undefinedVariable is not defined"
+ console.log(e.name); // "ReferenceError"
+ console.log(e.fileName); // "Scratchpad/1"
+ console.log(e.lineNumber); // 2
+ console.log(e.columnNumber); // 6
+ console.log(e.stack); // "@Scratchpad/2:2:7\n"
+}
+</pre>
+
+<h3 id="Выбрасывание_ReferenceError">Выбрасывание <code>ReferenceError</code></h3>
+
+<pre class="brush: js">try {
+ throw new ReferenceError('Привет', 'someFile.js', 10);
+} catch (e) {
+ console.log(e instanceof ReferenceError); // true
+ console.log(e.message); // "Привет"
+ console.log(e.name); // "ReferenceError"
+ console.log(e.fileName); // "someFile.js"
+ console.log(e.lineNumber); // 10
+ console.log(e.columnNumber); // 0
+ console.log(e.stack); // "@Scratchpad/2:2:9\n"
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.3', 'ReferenceError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-referenceerror', 'ReferenceError')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<p>{{Compat("javascript.builtins.ReferenceError")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("ReferenceError.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/referenceerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/referenceerror/prototype/index.html
new file mode 100644
index 0000000000..0c237f9c3c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/referenceerror/prototype/index.html
@@ -0,0 +1,122 @@
+---
+title: ReferenceError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/ReferenceError/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+ - ReferenceError
+translation_of: Web/JavaScript/Reference/Global_Objects/ReferenceError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>ReferenceError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("ReferenceError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("ReferenceError")}} наследуются от объекта <code>ReferenceError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>ReferenceError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "ReferenceError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("ReferenceError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "ReferenceError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "ReferenceError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "ReferenceError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "ReferenceError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "ReferenceError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("ReferenceError")}} не содержит собственных методов, экземпляры {{jsxref("ReferenceError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/reflect/apply/index.html b/files/ru/web/javascript/reference/global_objects/reflect/apply/index.html
new file mode 100644
index 0000000000..927f5b52b8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/apply/index.html
@@ -0,0 +1,101 @@
+---
+title: Reflect.apply()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/apply
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Reflect
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/apply
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Reflect</strong></code><strong><code>.apply()</code></strong> вызывает переданную ему функцию с указанными аргументами.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-apply.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера находится в репозаитории GitHub. Если вы хотите внести свой вклад в интерактивные примеры, пожалуйста, клонируйте репозитроий <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправляйте нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.apply(target, thisArgument, argumentsList)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>target</dt>
+ <dd>Функция, которую необходимо вызвать.</dd>
+ <dt>thisArgument</dt>
+ <dd>Значение переменной <code>this</code> во время вызова функции <em><code>target</code></em>.</dd>
+ <dt>argumentsList</dt>
+ <dd>Объект, подобный массиву, содержащий аргументы, с которыми должна быть вызвана функция <em><code>target</code></em>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращается значение, которое вернёт функция <em><code>target</code></em> с указанным значением переменной <code><strong>this</strong></code> и аргументами.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>{{jsxref("TypeError")}}, если функция <code><em>target</em></code> не может быть вызвана.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В ES5, обычно используется метод {{jsxref("Function.prototype.apply()")}}, чтобы вызвать функцию с указанным значением переменной <code>this</code> и <code>arguments</code>, переданными как массив (или <a href="/ru/docs/Web/JavaScript/Guide/Indexed_collections#Working_with_array-like_objects">массивоподобный объект</a>).</p>
+
+<pre class="brush: js">Function.prototype.apply.call(Math.floor, undefined, [1.75]);</pre>
+
+<p>С использованием <code>Reflect.apply</code> это действие становится более понятным и занимает меньше места в коде.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Reflect.apply()">Использование <code>Reflect.apply()</code></h3>
+
+<pre class="brush: js">Reflect.apply(Math.floor, undefined, [1.75]);
+// 1;
+
+Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
+// "hello"
+
+Reflect.apply(RegExp.prototype.exec, /вы/, ['<span class="_Tgc _s8w">превысокомногорассмотрительствующий</span>']).index;
+// 4
+
+Reflect.apply(''.charAt, 'пони', [3]);
+// "и"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.apply', 'Reflect.apply')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.apply', 'Reflect.apply')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div class="hidden">Таблица поддержки браузерами на этой странице сгенерирована из структурированных данных. Если вы хотите внести свой вклад и добавить данные, пожалуйста, посетите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Reflect.apply")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..e5eaa5af39
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/construct/index.html
@@ -0,0 +1,151 @@
+---
+title: Reflect.construct()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+tags:
+ - ECMAScript6
+ - Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Reflect</strong></code><strong><code>.construct()</code></strong> работает как <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a>. Он эквивалентен <code>new target(...args)</code>. Это также дает дополнительную возможность указать другой прототип.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-construct.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.construct(target, argumentsList[, newTarget])
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Целевая функция для вызова.</dd>
+ <dt><code>argumentsList</code></dt>
+ <dd>Массивоподобный объект указывающий аргументы, с которыми <code>target</code> должна вызываться.</dd>
+ <dt><code>newTarget</code> {{optional_inline}}</dt>
+ <dd>Конструктор, чей прототип должен быть использован. Смотрите также <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target"><code>new.target</code></a> оператор. Если <code>newTarget</code> не указан, то используется <code>target</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый экземпляр <code>target</code> (или <code>newTarget</code>, если указан), инициализируется <code>target</code> как конструктор с заданными аргументами.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>Исключение {{jsxref("TypeError")}}, если <code>target</code> или <code>newTarget</code> не являются конструкторами.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>Reflect.construct()</code> позволяет вам вызывать конструктор с любым числом аргументов (что также возможно с использованием <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax">spread syntax</a> вместе с <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a>).</p>
+
+<pre class="brush: js">var obj = new Foo(...args);
+var obj = Reflect.construct(Foo, args);
+</pre>
+
+<h3 id="Reflect.construct()_против_Object.create()"><code>Reflect.construct()</code> против <code>Object.create()</code></h3>
+
+<p>До появления <code>Reflect</code>, объекты могли быть созданы с использованием произвольной комбинации из конструктора и прототипа при помощи {{jsxref("Object.create()")}}.</p>
+
+<pre class="brush: js">function OneClass() {
+ this.name = 'one';
+}
+
+function OtherClass() {
+ this.name = 'other';
+}
+
+// Данный вызов:
+var obj1 = Reflect.construct(OneClass, args, OtherClass);
+
+// ...будет аналогичен данному:
+var obj2 = Object.create(OtherClass.prototype);
+OneClass.apply(obj2, args);
+
+console.log(obj1.name); // 'one'
+console.log(obj2.name); // 'one'
+
+console.log(obj1 instanceof OneClass); // false
+console.log(obj2 instanceof OneClass); // false
+
+console.log(obj1 instanceof OtherClass); // true
+console.log(obj2 instanceof OtherClass); // true
+</pre>
+
+<p>В любом случае, пока конечный результат один и тот же, существует одно важное отличие в этом процессе. При использовании <code>Object.create()</code> и {{jsxref("Function.prototype.apply()")}}, оператор <code>new.target</code> будет указывать на <code>undefined</code> внутри функции используемой в качестве конструктора, пока ключевое слово <code>new</code> не будет использовано для создания объекта.</p>
+
+<p>С другой стороны, в случае вызова <code>Reflect.construct()</code>, оператор <code>new.target</code> будет указывать на параметр <code>newTarget</code> если он задан, или <code>target</code> в отличном случае.</p>
+
+<pre class="brush: js">function OneClass() {
+ console.log('OneClass');
+ console.log(new.target);
+}
+function OtherClass() {
+ console.log('OtherClass');
+ console.log(new.target);
+}
+
+var obj1 = Reflect.construct(OneClass, args);
+// Вывод:
+// OneClass
+// function OneClass { ... }
+
+var obj2 = Reflect.construct(OneClass, args, OtherClass);
+// Вывод:
+// OneClass
+// function OtherClass { ... }
+
+var obj3 = Object.create(OtherClass.prototype);
+OneClass.apply(obj3, args);
+// Вывод:
+// OneClass
+// undefined
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использования_Reflect.construct()">Использования <code>Reflect.construct()</code></h3>
+
+<pre class="brush: js">var d = Reflect.construct(Date, [1776, 6, 4]);
+d instanceof Date; // true
+d.getFullYear(); // 1776
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.construct', 'Reflect.construct')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.construct")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target"><code>new.target</code></a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/reflect/defineproperty/index.html b/files/ru/web/javascript/reference/global_objects/reflect/defineproperty/index.html
new file mode 100644
index 0000000000..b4d2cba107
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/defineproperty/index.html
@@ -0,0 +1,98 @@
+---
+title: Reflect.defineProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty
+tags:
+ - ECMAScript 2015
+ - Method
+ - Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Reflect</strong></code><strong><code>.defineProperty()</code></strong> похож на {{jsxref("Object.defineProperty()")}}, но возвращает {{jsxref("Boolean")}}.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-defineproperty.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.defineProperty(<em>target</em>, <em>propertyKey</em>, <em>attributes</em>)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Объект, в котором определяется свойство.</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>Имя определяемого или изменяемого свойства.</dd>
+ <dt><code>attributes</code></dt>
+ <dd>Атрибуты для определяемого или изменяемого свойства.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращается значение {{jsxref("Boolean")}}, указывающее было ли свойство успешно определено.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>Исключение {{jsxref("TypeError")}}, если <code>target</code> не является {{jsxref("Object")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>Reflect.defineProperty</code> позволяет точно дополнить или изменить свойство объекта. Для более подробной информации смотрите на аналогичный метод - {{jsxref("Object.defineProperty")}}. <code>Object.defineProperty</code> возвращает объект или выбрасывает исключение {{jsxref("TypeError")}}, если свойство не было успешно определено. <code>Reflect.defineProperty</code>, в любом случае, просто возвращает {{jsxref("Boolean")}}, указывающее было ли свойство успешно определено.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использования_Reflect.defineProperty()">Использования <code>Reflect.defineProperty()</code></h3>
+
+<pre class="brush: js">var obj = {};
+Reflect.defineProperty(obj, 'x', {value: 7}); // true
+obj.x; // 7
+</pre>
+
+<h3 id="Проверка_успешно_ли_было_определено_свойство">Проверка успешно ли было определено свойство</h3>
+
+<p>При использовании {{jsxref("Object.defineProperty")}}, который возвращал объект в случае успеха, либо выбрасывал исключение {{jsxref("TypeError")}}, вы должны были использовать конструкцию <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code> для того, чтобы поймать ошибку, которая случилась при определении свойства. Потому что <code>Reflect.defineProperty</code> возвращает {{jsxref("Boolean")}} в любом случае, вы можете использовать конструкцию <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code>:</p>
+
+<pre class="brush: js">if (Reflect.defineProperty(target, property, attributes)) {
+ // успех
+} else {
+ // неудача
+}</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.defineproperty', 'Reflect.defineProperty')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.defineProperty")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/reflect/deleteproperty/index.html b/files/ru/web/javascript/reference/global_objects/reflect/deleteproperty/index.html
new file mode 100644
index 0000000000..64ba452ae5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/deleteproperty/index.html
@@ -0,0 +1,92 @@
+---
+title: Reflect.deleteProperty()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/deleteProperty
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Reflect</strong></code><strong><code>.deleteProperty()</code></strong> позволяет удалять свойства из объекта. Реализация данной функции схожа с оператором <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code></a>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-deleteproperty.html", "taller")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.deleteProperty(<em>target</em>, <em>propertyKey</em>)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Целевой объект в котором будет удалено свойство.</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>Имя удаляемого свойства.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Boolean")}} указывающий, было ли свойство успешно удалено.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>Исключение {{jsxref("TypeError")}}, если <code>target</code> не является {{jsxref("Object")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>Reflect.deleteProperty</code> позволяет вам удалить свойство объекта. Он возвращает {{jsxref("Boolean")}} указывающий, было ли свойство успешно удалено. Он так же идентичен оператору <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code> без использования строгого режима.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использования_Reflect.deleteProperty()">Использования <code>Reflect.deleteProperty()</code></h3>
+
+<pre class="brush: js">var obj = { x: 1, y: 2 };
+Reflect.deleteProperty(obj, 'x'); // true
+obj; // { y: 2 }
+
+var arr = [1, 2, 3, 4, 5];
+Reflect.deleteProperty(arr, '3'); // true
+arr; // [1, 2, 3, , 5]
+
+// Возвращает true даже если такого свойства не существует
+Reflect.deleteProperty({}, 'foo'); // true
+
+// Возвращает false если такое свойство ненастраивоемое
+Reflect.deleteProperty(Object.freeze({foo: 1}), 'foo'); // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.deleteproperty', 'Reflect.deleteProperty')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.deleteProperty")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code> operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/reflect/get/index.html b/files/ru/web/javascript/reference/global_objects/reflect/get/index.html
new file mode 100644
index 0000000000..96d70ed7e7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/get/index.html
@@ -0,0 +1,99 @@
+---
+title: Reflect.get()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/get
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Reflect
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/get
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <strong><code>Reflect.get()</code></strong> работает также, словно если бы мы получали свойство объекта (<code>target[propertyKey]</code>) с помощью функции.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-get.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера находится в репозитории GitHub. Если вы хотите внести вклад в развитие интерактивных примеров, склонируйте репозиторий <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.get(target, propertyKey[, receiver])
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Объект, к свойству которого идёт обращение.</dd>
+ <dt><code>propertyKey</code></dt>
+ <dd>Название свойства, значение которого необходимо получить.</dd>
+ <dt>receiver {{optional_inline}}</dt>
+ <dd>Значение, которое получит переменная <code>this</code> при вызове геттера.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Значение свойства <code>propertyKey</code>.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>{{jsxref("TypeError")}}, если <code>target</code> не {{jsxref("Object")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>Reflect.get</code> позволяет получить значение свойства некоторого объекта. Он похож на обычный доступ к значению свойства объекта <a href="/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors">значению свойства объекта</a>, только с синтаксисом функции.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Reflect.get()">Использование <code>Reflect.get()</code></h3>
+
+<pre class="brush: js">// Объект
+var obj = { x: 1, y: 2 };
+Reflect.get(obj, 'x'); // 1
+
+// Мессив
+Reflect.get(['ноль', 'один'], 1); // "один"
+
+// Proxy, перехватывающий get
+var x = {p: 1};
+var obj = new Proxy(x, {
+ get(t, k, r) { return k + 'bar'; }
+});
+Reflect.get(obj, 'foo'); // "foobar"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.get', 'Reflect.get')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.get', 'Reflect.get')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div class="hidden">Таблица поддержки браузерами на этой странице сгенерирована из структурированных данных. Если вы хотите внести свой вклад и добавить свои данные, пожалуйста, посетите <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.Reflect.get")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/reflect/index.html b/files/ru/web/javascript/reference/global_objects/reflect/index.html
new file mode 100644
index 0000000000..0eb627a905
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/index.html
@@ -0,0 +1,153 @@
+---
+title: Reflect
+slug: Web/JavaScript/Reference/Global_Objects/Reflect
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect
+---
+<div>{{JSRef}}</div>
+
+<p><strong>Reflect</strong> - это встроенный объект, который предоставляет методы для перехватывания JavaScript операций. Эти методы аналогичны методам <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">proxy handler</a>`ов. <code>Reflect</code> - это не функциональный, а простой объект, он не является сконструированным.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В отличие от большинства глобальных объектов, <code>Reflect</code> - это не конструктор. Вы не можете использовать его с <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>оператором new</code></a> или вызывать <code>Reflect,</code> как функцию. Все свойства и методы объекта <code>Reflect</code> являются статическими (так же, как и у объекта {{jsxref("Math")}}).</p>
+
+<h2 id="Методы">Методы</h2>
+
+<p>Объект <code>Reflect</code> обеспечивает работу статических функций, называющиеся так же, как <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler">методы proxy handler</a>`а. Некоторые из этих методов - те же, что и соответствующие им методы класса {{jsxref("Object")}}.</p>
+
+<dl>
+ <dt>{{jsxref("Reflect.apply()")}}</dt>
+ <dd>Вызывает целевую функцию с аргументами, переданными в параметре <code>args</code>. Смотрите также {{jsxref("Function.prototype.apply()")}}.</dd>
+ <dt>{{jsxref("Reflect.construct()")}}</dt>
+ <dd> Оператор <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a> как функция. Аналогично <code>new target(...args)</code>. Также предоставляет возможность определить другой прототип.</dd>
+ <dt>{{jsxref("Reflect.defineProperty()")}}</dt>
+ <dd>Похож на {{jsxref("Object.defineProperty()")}}. Возвращает {{jsxref("Boolean")}}.</dd>
+ <dt>{{jsxref("Reflect.deleteProperty()")}}</dt>
+ <dd>Оператор <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete"><code>delete</code></a> как функция. Аналогично <code>delete target[name]</code>.</dd>
+ <dt>{{jsxref("Reflect.enumerate()")}}</dt>
+ <dd>Похож на цикл <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>for...in</code></a>. Возвращает итератор с собственными перечисляемыми и наследуемыми свойствами целевого объекта.</dd>
+ <dt>{{jsxref("Reflect.get()")}}</dt>
+ <dd>Функция, которая возвращает значение свойств.</dd>
+ <dt>{{jsxref("Reflect.getOwnPropertyDescriptor()")}}</dt>
+ <dd>Аналогично {{jsxref("Object.getOwnPropertyDescriptor()")}}. Возвращает дескриптор указанного свойства если присутствует в объекте, иначе {{jsxref("undefined")}}.</dd>
+ <dt>{{jsxref("Reflect.getPrototypeOf()")}}</dt>
+ <dd>Аналогично {{jsxref("Object.getPrototypeOf()")}}.</dd>
+ <dt>{{jsxref("Reflect.has()")}}</dt>
+ <dd>Оператор <a href="/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> </a>как функция. Возвращает значение {{jsxref("Boolean")}} в зависимости от факта наличия собственного или наследованного свойства.</dd>
+ <dt>{{jsxref("Reflect.isExtensible()")}}</dt>
+ <dd>Аналогично {{jsxref("Object.isExtensible()")}}.</dd>
+ <dt>{{jsxref("Reflect.ownKeys()")}}</dt>
+ <dd>Возвращает массив строк с именами собственных (не наследованных) свойств.</dd>
+ <dt>{{jsxref("Reflect.preventExtensions()")}}</dt>
+ <dd>Аналогично {{jsxref("Object.preventExtensions()")}}. Возвращает {{jsxref("Boolean")}}.</dd>
+ <dt>{{jsxref("Reflect.set()")}}</dt>
+ <dd>Функция, присваивающая значения свойствам. Возвращает {{jsxref("Boolean")}} значение <code>true</code> при успешном выполнении.</dd>
+ <dt>{{jsxref("Reflect.setPrototypeOf()")}}</dt>
+ <dd>Функция, присваивающая прототип целевому объекту.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Проверка_наличия_конкретных_свойств_у_объекта">Проверка наличия конкретных свойств у объекта</h3>
+
+<pre class="brush: js notranslate">const duck = {
+ name: 'Maurice',
+ color: 'white',
+ greeting: function() {
+ console.log(`Quaaaack! My name is ${this.name}`);
+ }
+}
+
+Reflect.has(duck, 'color');
+// true
+Reflect.has(duck, 'haircut');
+// false</pre>
+
+<h3 id="Возврат_собственных_ключей_объекта">Возврат собственных ключей объекта</h3>
+
+<pre class="brush: js notranslate">Reflect.ownKeys(duck);
+// [ "name", "color", "greeting" ]</pre>
+
+<h3 id="Добавление_нового_свойства_в_объект">Добавление нового свойства в объект</h3>
+
+<pre class="brush: js notranslate">Reflect.set(duck, 'eyes', 'black');
+// вернется "true" если вызов успешен
+// объект "duck" теперь содержит свойство 'eyes' со знчением 'black'</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-reflect-object', 'Reflect')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("44")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("42")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("42")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Глобальный объект {{jsxref("Proxy")}}.</li>
+ <li>Объект {{jsxref("Proxy.handler", "handler")}}.</li>
+</ul>
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
new file mode 100644
index 0000000000..a218116d09
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/reflect/ownkeys/index.html
@@ -0,0 +1,89 @@
+---
+title: Reflect.ownKeys()
+slug: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys
+translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/ownKeys
+---
+<div>{{JSRef}}</div>
+
+<p>Статический метод <code><strong>Reflect</strong></code><strong><code>.ownKeys()</code></strong> возвращает массив имен, а также <code>Symbols</code> собственных полей объекта <code>target</code> .</p>
+
+<div>{{EmbedInteractiveExample("pages/js/reflect-ownkeys.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в GitHub репозитории. Если вы хотите сделать вклад в развитии интерактивных примеров, пожалуйста клонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Reflect.ownKeys(target)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>target</code></dt>
+ <dd>Объект <code>target</code>, из которого получаем собственные ключи.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Массив {{jsxref("Array")}} собственных полей объекта <code>target</code>.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>Выбрасывает ислючение {{jsxref("TypeError")}}, если <code>target</code> не является {{jsxref("Object")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>Reflect.ownKeys</code> возвращает массив собственных ключей объекта <code>target</code>. Эквивалентом этого метода является <code>{{jsxref("Object.getOwnPropertyNames")}}(target).concat({{jsxref("Object.getOwnPropertySymbols")}}(target))</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_Reflect.ownKeys()">Использование <code>Reflect.ownKeys()</code></h3>
+
+<pre class="brush: js">Reflect.ownKeys({z: 3, y: 2, x: 1}); // [ "z", "y", "x" ]
+Reflect.ownKeys([]); // ["length"]
+
+var sym = Symbol.for('comet');
+var sym2 = Symbol.for('meteor');
+var obj = {[sym]: 0, 'str': 0, '773': 0, '0': 0,
+ [sym2]: 0, '-1': 0, '8': 0, 'second str': 0};
+Reflect.ownKeys(obj);
+// [ "0", "8", "773", "str", "-1", "second str", Symbol(comet), Symbol(meteor) ]
+// Индексы в порядке их перечисления,
+// Строки в порядке их ввода,
+// Symbols в порядке их ввода
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-reflect.ownkeys', 'Reflect.ownKeys')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Reflect.ownKeys")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Reflect")}}</li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/@@search/index.html b/files/ru/web/javascript/reference/global_objects/regexp/@@search/index.html
new file mode 100644
index 0000000000..ee37017a2a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/@@search/index.html
@@ -0,0 +1,116 @@
+---
+title: 'RegExp.prototype[@@search]()'
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@search
+tags:
+ - JavaScript
+ - Prototype
+ - Reference
+ - RegExp
+ - метод
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@search
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>[@@search]()</code></strong> выполняет поиск совпадения между регулярным выражением <code>this</code> и строкой.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>regexp</var>[Symbol.search](str)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>{{jsxref("String")}}, являющийся объектом поиска.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<dl>
+ <dt>integer</dt>
+ <dd>В случае успеха, <code>[@@search]()</code> вернёт индекс первого совпадения регулярного выражения внутри строки. В противном случае, он вернёт -1.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот метод вызывается внутрнее в {{jsxref("String.prototype.search()")}}. Например, два следующих примера вернут один и тот же результат.</p>
+
+<pre class="brush: js">'abc'.search(/a/);
+
+/a/[Symbol.search]('abc');</pre>
+
+<p>Этот метод существует для настройки поведения поиска в подклассах <code>RegExp</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Прямой_вызов">Прямой вызов</h3>
+
+<p>Этот метод можно использовать почти так же, как {{jsxref("String.prototype.search()")}}, за исключением другого <code>this</code> и другого порядка аргументов.</p>
+
+<pre class="brush: js">var re = /-/g;
+var str = '2016-01-02';
+var result = re[Symbol.search](str);
+console.log(result); // 4
+</pre>
+
+<h3 id="Используя_search_в_подклассах">Используя <code>@@search</code> в подклассах</h3>
+
+<p>Подкласс {{jsxref("RegExp")}} может быть перезаписан с помощью метода <code>[@@search]()</code> для изменения поведения.</p>
+
+<pre class="brush: js">class MyRegExp extends RegExp {
+ constructor(str) {
+ super(str)
+ this.pattern = str;
+ }
+ [Symbol.search](str) {
+ return str.indexOf(this.pattern);
+ }
+}
+
+var re = new MyRegExp('a+b');
+var str = 'ab a+b';
+var result = str.search(re); // String.prototype.search calls re[@@search].
+console.log(result); // 3
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-regexp.prototype-@@search', 'RegExp.prototype[@@search]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создаётся из структурированных данных. Если Вы хотите дополнить эти данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.RegExp.@@search")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.search()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..8a0e07c804
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/@@split/index.html
@@ -0,0 +1,113 @@
+---
+title: 'RegExp.prototype[@@split]()'
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@split
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@split
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>[@@split]()</code></strong> метод делит объект {{jsxref("String")}}  в массив сторок, путём разбиения строки на подстроки.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/regexp-prototype-@@split.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>regexp</var>[Symbol.split](str[, <var>limit</var>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Цель разбиения.</dd>
+ <dt><code>limit</code></dt>
+ <dd>
+ <p>Необязательное. Целое число ограничивающее кол-во рабиений. <code>[@@split]()</code> метод разбивает все совпадения <code>this</code> RegExp шаблона, до тех пор пока не достигнет числа <code>limit</code> или строка будет короче <code>this</code> шаблона.</p>
+ </dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("Array")}} содержит подстроки как элементы.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот метод вызывает {{jsxref("String.prototype.split()")}}, если аргумент <code>separator</code> объект {{jsxref("RegExp")}}. Для примера, два данных выражения возвращают одинаковый результат.</p>
+
+<pre class="brush: js">'a-b-c'.split(/-/);
+
+/-/[Symbol.split]('a-b-c');</pre>
+
+<p>Этот метод существует для кастомизации поведения (разбиения) подкласса <code>RegExp</code>.</p>
+
+<p>Если аргумент <code>str</code> <strong>не </strong>объект типа {{jsxref("RegExp")}}, метод {{jsxref("String.prototype.split()")}} не вызывается, так же не создается объект типа {{jsxref("RegExp")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Прямой_вызов">Прямой вызов</h3>
+
+<p>Этот метод может быть использован, так же как {{jsxref("String.prototype.split()")}}, кроме случаев когда <code>this</code> отличаются и аргументы идут в разном порядке.</p>
+
+<pre class="brush: js">var re = /-/g;
+var str = '2016-01-02';
+var result = re[Symbol.split](str);
+console.log(result); // ["2016", "01", "02"]
+</pre>
+
+<h3 id="Использование_split_в_подклассах">Использование <code>@@split</code> в подклассах</h3>
+
+<p>Подклассы {{jsxref("RegExp")}} могут переопределить <code>[@@split]()</code> для изменения дефольтного поведения.</p>
+
+<pre class="brush: js">class MyRegExp extends RegExp {
+ [Symbol.split](str, limit) {
+ var result = RegExp.prototype[Symbol.split].call(this, str, limit);
+ return result.map(x =&gt; "(" + x + ")");
+ }
+}
+
+var re = new MyRegExp('-');
+var str = '2016-01-02';
+var result = str.split(re); // String.prototype.split calls re[@@split].
+console.log(result); // ["(2016)", "(01)", "(02)"]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-regexp.prototype-@@split', 'RegExp.prototype[@@split]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.RegExp.@@split")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/exec/index.html b/files/ru/web/javascript/reference/global_objects/regexp/exec/index.html
new file mode 100644
index 0000000000..fdd7c92041
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/exec/index.html
@@ -0,0 +1,228 @@
+---
+title: RegExp.prototype.exec()
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/exec
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/exec
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>exec()</code></strong> выполняет поиск сопоставления регулярного выражения в указанной строке. Возвращает массив с результатами или {{jsxref("null")}}.</p>
+
+<p>Если целью выполнения является просто определить, проходит оно или нет, используйте метод {{jsxref("RegExp.prototype.test()")}}, либо метод строки {{jsxref("String.prototype.search()")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>regexObj</var>.exec(<var>str</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Строка, с которой производится сопоставление регулярного выражения.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Если сопоставление успешно выполнилось, метод <code>exec()</code> возвращает массив и обновляет свойства объекта регулярного выражения. Возвращаемый массив в первом элементе содержит сопоставленный текст, а в последующих элементах — текст, захваченный при сопоставлении круглыми скобками.</p>
+
+<p>Если сопоставление не удалось, метод <code>exec()</code> возвращает {{jsxref("null")}}.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Рассмотрим следующий пример:</p>
+
+<pre class="brush: js">// Сопоставляется с фразой «кайф, сплющь», за которой следует слово «вши»,
+// игнорируя любые символы между ними. Запоминает слова «сплющь» и «вши».
+// Игнорирует регистр символов.
+var re = /кайф,\s(сплющь).+?(вши)/ig;
+var result = re.exec('Эх, чужд кайф, сплющь объём вши, грызя цент.');
+</pre>
+
+<p>Таблица ниже показывает результаты выполнения данного примера:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header">Объект</td>
+ <td class="header">Свойство/Индекс</td>
+ <td class="header">Описание</td>
+ <td class="header">Пример</td>
+ </tr>
+ <tr>
+ <td rowspan="4"><code>result</code></td>
+ <td><code>[0]</code></td>
+ <td>Все сопоставившиеся символы в строке.</td>
+ <td><code>кайф, сплющь объём вши</code></td>
+ </tr>
+ <tr>
+ <td><code>[1], ...[<em>n</em>]</code></td>
+ <td>Сопоставившиеся подстроки в круглых скобках, если они присутствуют. Количество возможных подстрок ничем не ограничено.</td>
+ <td><code>[1] = сплющь<br>
+ [2] = вши</code></td>
+ </tr>
+ <tr>
+ <td><code>index</code></td>
+ <td>Индекс сопоставления в строке, начинается с нуля.</td>
+ <td><code>9</code></td>
+ </tr>
+ <tr>
+ <td><code>input</code></td>
+ <td>Оригинальная строка.</td>
+ <td><code>Эх, чужд кайф, сплющь объём вши, грызя цент.</code></td>
+ </tr>
+ <tr>
+ <td rowspan="5"><code>re</code></td>
+ <td><code>lastIndex</code></td>
+ <td>Индекс, с которого начнётся следующая попытка сопоставления. Если отсутствует флаг <code>"g"</code>, остаётся равным нулю.</td>
+ <td><code>31</code></td>
+ </tr>
+ <tr>
+ <td><code>ignoreCase</code></td>
+ <td>Указывает, что в регулярном выражении используется флаг игнорирования регистра <code>"i"</code>.</td>
+ <td><code>true</code></td>
+ </tr>
+ <tr>
+ <td><code>global</code></td>
+ <td>Указывает, что в регулярном выражении используется флаг глобального сопоставления <code>"g"</code>.</td>
+ <td><code>true</code></td>
+ </tr>
+ <tr>
+ <td><code>multiline</code></td>
+ <td>Указывает, что в регулярном выражении используется флаг сопоставления по нескольким строкам <code>"m"</code>.</td>
+ <td><code>false</code></td>
+ </tr>
+ <tr>
+ <td><code>source</code></td>
+ <td>Текст шаблона регулярного выражения.</td>
+ <td><code>кайф,\s(сплющь).+?(вши)</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Finding_successive_matches" name="Example:_Finding_successive_matches">Пример: поиск последовательных сопоставлений</h3>
+
+<p>Если ваше регулярное выражение использует флаг <code>"g"</code>, вы можете использовать метод <code>exec()</code> несколько раз для нахождения последовательных сопоставлений в одной и той же строке. Если вы сделаете это, поиск начнётся по подстроке строки <code>str</code>, начало которой определяется свойством {{jsxref("RegExp.lastIndex", "lastIndex")}} регулярного выражения (метод {{jsxref("RegExp.prototype.test()", "test()")}} также увеличивает свойство {{jsxref("RegExp.lastIndex", "lastIndex")}}). Например, предположим, что у вас есть следующий скрипт:</p>
+
+<pre class="brush: js">var myRe = /аб*/g;
+var str = 'аббвгдеабж';
+var myArray;
+while ((myArray = myRe.exec(str)) !== null) {
+ var msg = 'Найдено ' + myArray[0] + '. ';
+ msg += 'Следующее сопоставление начнётся с позиции ' + myRe.lastIndex;
+ console.log(msg);
+}
+</pre>
+
+<p>Этот скрипт выведет следующий текст:</p>
+
+<pre class="brush: js">Найдено абб. Следующее сопоставление начнётся с позиции 3
+Найдено аб. Следующее сопоставление начнётся с позиции 9
+</pre>
+
+<p>Примечание: не помещайте литерал регулярного выражения (или конструктор {{jsxref("RegExp")}}) внутрь условия <code>while</code>; это приведёт к бесконечному циклу, поскольку свойство {{jsxref("RegExp.lastIndex", "lastIndex")}} будет сбрасываться в ноль на каждой итерации цикла. Также убедитесь, что установлен флаг глобального сопоставления, в противном случае цикл будет бесконечным.</p>
+
+<h3 id="Example:_Using_exec_with_RegExp_literals" name="Example:_Using_exec_with_RegExp_literals">Пример: использование метода <code>exec()</code> вместе с литералами регулярного выражения</h3>
+
+<p>Вы можете использовать метод <code>exec()</code> без создания объекта {{jsxref("RegExp")}}:</p>
+
+<pre class="brush: js">var matches = /(привет \S+)/.exec('Это привет миру!');
+console.log(matches[1]);
+</pre>
+
+<p>Скрипт выведет в журнал строку «привет миру!».</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.6.21', 'RegExp.exec')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype.exec', 'RegExp.exec')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Глава про <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">регулярные выражения</a> в <a href="/ru/docs/Web/JavaScript/Guide">руководстве по JavaScript</a></li>
+ <li>{{jsxref("RegExp")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/flags/index.html b/files/ru/web/javascript/reference/global_objects/regexp/flags/index.html
new file mode 100644
index 0000000000..c69b279c3e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/flags/index.html
@@ -0,0 +1,120 @@
+---
+title: RegExp.prototype.flags
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/flags
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - Référence(2)
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/flags
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>flags</code></strong> возвращает строку, состоящую из флагов текущего регулярного выражения.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Флаги в свойстве <code>flags</code> упорядочены по алфавиту (слева направо, то есть <code>"gimuy"</code>).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_flags" name="Example:_Using_flags">Пример: использование свойства <code>flags</code></h3>
+
+<pre class="brush: js">/foo/ig.flags; // "gi"
+/bar/myu.flags; // "muy"
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<pre class="brush: js">if (RegExp.prototype.flags === undefined) {
+ Object.defineProperty(RegExp.prototype, 'flags', {
+ configurable: true,
+ get: function() {
+ return this.toString().match(/[gimuy]*$/)[0];
+ }
+ });
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.flags', 'RegExp.prototype.flags')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("37")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("37")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/global/index.html b/files/ru/web/javascript/reference/global_objects/regexp/global/index.html
new file mode 100644
index 0000000000..ea31bfb150
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/global/index.html
@@ -0,0 +1,115 @@
+---
+title: RegExp.prototype.global
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/global
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/global
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>global</code></strong> указывает, использовался ли в определении регулярного выражения флаг <code>"g"</code>. Свойство <code>global</code> является свойством только для чтения и принадлежит экземпляру регулярного выражения.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение свойства <code>global</code> имеет тип {{jsxref("Global_Objects/Boolean", "Boolean")}} и содержит <code>true</code>, если при определении регулярного выражения использовался флаг <code>"g"</code>; в противном случае оно содержит <code>false</code>. Флаг <code>"g"</code> указывает на то, что регулярное выражение должно проверять все возможные сопоставления в строке.</p>
+<p>Вы не можете напрямую изменить это свойство.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_global" name="Example:_Using_global">Пример: использование свойства <code>global</code></h3>
+<pre class="brush: js">var regex = new RegExp('foo', 'g');
+
+console.log(regex.global); // true
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
+ JavaScript 1.5: свойство <code>global</code> является свойством экземпляра {{jsxref("Global_Objects/RegExp", "RegExp")}}, а не самого объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.7.2', 'RegExp.prototype.global')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.global', 'RegExp.prototype.global')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Свойство <code>global</code> теперь является свойством доступа в прототипе объекта, а не собственным свойством данных экземпляра.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+ <li>{{jsxref("RegExp.prototype.sticky")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/ignorecase/index.html b/files/ru/web/javascript/reference/global_objects/regexp/ignorecase/index.html
new file mode 100644
index 0000000000..f8888887b5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/ignorecase/index.html
@@ -0,0 +1,115 @@
+---
+title: RegExp.prototype.ignoreCase
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/ignoreCase
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>ignoreCase</code></strong> указывает, использовался ли в определении регулярного выражения флаг <code>"i"</code>. Свойство <code>ignoreCase</code> является свойством только для чтения и принадлежит экземпляру регулярного выражения.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение свойства <code>ignoreCase</code> имеет тип {{jsxref("Global_Objects/Boolean", "Boolean")}} и содержит <code>true</code>, если при определении регулярного выражения использовался флаг <code>"i"</code>; в противном случае оно содержит <code>false</code>. Флаг <code>"i"</code> указывает на то, что регистр символов в строке, с которой сопоставляется регулярное выражение, должен игнорироваться.</p>
+<p>Вы не можете напрямую изменить это свойство.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_ignoreCase" name="Example:_Using_ignoreCase">Пример: использование свойства <code>ignoreCase</code></h3>
+<pre class="brush: js">var regex = new RegExp('foo', 'i');
+
+console.log(regex.ignoreCase); // true
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
+ JavaScript 1.5: свойство <code>ignoreCase</code> является свойством экземпляра {{jsxref("Global_Objects/RegExp", "RegExp")}}, а не самого объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.7.3', 'RegExp.prototype.ignoreCase')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.ignorecase', 'RegExp.prototype.ignoreCase')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Свойство <code>ignoreCase</code> теперь является свойством доступа в прототипе объекта, а не собственным свойством данных экземпляра.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+ <li>{{jsxref("RegExp.prototype.sticky")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/index.html b/files/ru/web/javascript/reference/global_objects/regexp/index.html
new file mode 100644
index 0000000000..9a864bee32
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/index.html
@@ -0,0 +1,665 @@
+---
+title: RegExp
+slug: Web/JavaScript/Reference/Global_Objects/RegExp
+tags:
+ - Constructor
+ - JavaScript
+ - Reference
+ - RegExp
+ - Référence(2)
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Конструктор <strong><code>RegExp</code></strong> создаёт объект регулярного выражения для сопоставления текста с шаблоном.</p>
+
+<p>Введение в то, что представляют собой регулярные выражения, читайте в <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">главе «Регулярные выражения» в руководстве по JavaScript</a>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/regexp-constructor.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории на GitHub. Если вы хотите участвовать в проекте интерактивных примеров, пожалуйста, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и пришлите нам запрос на принятие изменений.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<p>Возможны как литеральная запись, так и запись через конструктор:</p>
+
+<pre class="syntaxbox notranslate"><code>/<var>pattern</var>/<var>flags</var>
+new RegExp(<var>pattern</var>, <var>flags</var>)</code>
+</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>pattern</code></dt>
+ <dd>Текст регулярного выражения.</dd>
+ <dt><code>flags</code></dt>
+ <dd>
+ <p>Если определён, может принимать любую комбинацию нижеследующих значений:</p>
+
+ <dl>
+ <dt><code>g</code></dt>
+ <dd>глобальное сопоставление</dd>
+ <dt><code>i</code></dt>
+ <dd>игнорирование регистра при сопоставлении</dd>
+ <dt><code>m</code></dt>
+ <dd>сопоставление по нескольким строкам; символы начала и конца (^ и $) начинают работать по нескольким строкам (то есть, происходит сопоставление с началом или концом <em>каждой</em> строки (строки разделяются символами \n или \r), а не только с началом или концом всей вводимой строки)</dd>
+ <dt><code>y</code> {{experimental_inline}}</dt>
+ <dd>«липкий» поиск; сопоставление в целевой строке начинается с индекса, на который указывает свойство <code>lastIndex</code> этого регулярного выражения (и не пытается сопоставиться с любого более позднего индекса).</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Существует два способа создания объекта <code>RegExp</code>: литеральная запись и использование конструктора. При записи строк параметры в литеральной записи не используют символы кавычек, в то время как параметры функции-конструктора используют кавычки. Так что следующие выражения создают одинаковые регулярные выражения:</p>
+
+<pre class="brush: js notranslate">/ab+c/i;
+new RegExp('ab+c', 'i');
+</pre>
+
+<p>Литеральная запись обеспечивает компиляцию регулярного выражения при вычислении выражения. Используйте литеральную запись если регулярное выражение будет неизменным. Например, если вы используете литеральную запись для конструирования регулярного выражения, используемого в цикле, регулярное выражение не будет перекомпилироваться на каждой итерации.</p>
+
+<p>Конструктор объекта регулярного выражения, например, <code>new RegExp('ab+c')</code>, обеспечивает компиляцию регулярного выражения во время выполнения. Используйте функцию-конструктор, если вы знаете, что шаблон регулярного выражения будет меняться или если вы не знаете шаблон и получаете его из внешних источников, например, из пользовательского ввода.</p>
+
+<p>При использовании функции-конструктора необходимо использовать обычные правила экранирования в строках (предварять специальные символы символом обратного слеша «\»). Например, следующие выражения эквивалентны:</p>
+
+<pre class="brush: js notranslate">var re = /\w+/;
+var re = new RegExp('\\w+');
+</pre>
+
+<h2 id="Special_characters_meaning_in_regular_expressions" name="Special_characters_meaning_in_regular_expressions">Значение специальных символов в регулярных выражениях</h2>
+
+<ul>
+ <li><a href="#character-classes">Символьные классы</a></li>
+ <li><a href="#character-sets">Наборы символов</a></li>
+ <li><a href="#boundaries">Границы</a></li>
+ <li><a href="#grouping-back-references">Группировка и обратные ссылки</a></li>
+ <li><a href="#quantifiers">Квантификаторы</a></li>
+</ul>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr id="character-classes">
+ <th colspan="2">Символьные классы</th>
+ </tr>
+ <tr>
+ <th>Символ</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td><code>.</code></td>
+ <td>
+ <p>(Точка, десятичная запятая) сопоставляется с любым символом <em>за исключением</em> символов новой строки: <code>\n</code>, <code>\r</code>, <code>\u2028</code> или <code>\u2029</code>.</p>
+
+ <p>Обратите внимание, что флаг многострочности <code>m</code> не изменяет поведение точки. Так что для сопоставления с шаблона с несколькими строками используйте набор символов <code>[^]</code> (конечно, если только вам не нужно поддерживать старые версии IE), он сопоставляется с любым символом, включая символы новой строки.</p>
+
+ <p>Например, шаблон <code>/.н/</code> сопоставляется с подстрокой «ан», но не подстрокой «ну», во фразе «ну что, потанцуем».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\d</code></td>
+ <td>
+ <p>Сопоставляется с символом цифры в базовом латинском алфавите. Эквивалентен набору символов <code>[0-9]</code>.</p>
+
+ <p>Например, шаблоны <code>/\d/</code> и <code>/[0-9]/</code> сопоставляются с подстрокой «2» в строке «B2 — это номер люкс».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\D</code></td>
+ <td>
+ <p>Сопоставляется с любым символом, который не является цифрой в базовом латинском алфавите. Эквивалентен набору символов <code>[^0-9]</code>.</p>
+
+ <p>Например, шаблоны <code>/\D/</code> и <code>/[^0-9]/</code> сопоставляются с подстрокой «B» в строке «B2 — это номер люкс».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\w</code></td>
+ <td>
+ <p>Сопоставляется с любым алфавитно-цифровым символом из базового латинского алфавита, включая символ подчёркивания. Эквивалентен набору символов <code>[A-Za-z0-9_]</code>.</p>
+
+ <p>Например, шаблон <code>/\w/</code> сопоставляется с подстрокой «a» в строке «apple», с подстрокой «5» в строке «$5.28» и с подстрокой «3» в строке «3D».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\W</code></td>
+ <td>
+ <p>Сопоставляется с любым символом из базового латинского алфавита, не являющимся символом, из которых состоят слова. Эквивалентен набору символов <code>[^A-Za-z0-9_]</code>.</p>
+
+ <p>Например, шаблоны <code>/\W/</code> и <code>/[^A-Za-z0-9_]/</code> сопоставляются с подстрокой «%» в строке «50%».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\s</code></td>
+ <td>
+ <p>Сопоставляется с одиночным пробельным символом, который включает в себя пробел, табуляцию, подачу страницы, перевод строки и другие пробельные символы Юникода. Эквивалентен набору символов <code>[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​​\u202f\u205f​\u3000]</code>.</p>
+
+ <p>Например, шаблон <code>/\s\w*/</code> сопоставляется с подстрокой « bar» в строке «foo bar».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\S</code></td>
+ <td>
+ <p>Сопоставляется с одиночным символом, не являющимся пробельным. Эквивалентен набору символов <code>[^ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​\u2001\u2002​\u2003\u2004​\u2005\u2006​\u2007\u2008​\u2009\u200a​\u2028\u2029​\u202f\u205f​\u3000]</code>.</p>
+
+ <p>Например, шаблон <code>/\S\w*/</code> сопоставляется с подстрокой «foo» в строке «foo bar».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td>Сопоставляется с символом табуляции.</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td>Сопоставляется с символом возврата каретки.</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td>Сопоставляется с символом перевода строки.</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td>Сопоставляется с символом вертикальной табуляции.</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td>Сопоставляется с символом подачи страницы.</td>
+ </tr>
+ <tr>
+ <td><code>[\b]</code></td>
+ <td>Сопоставляется с символом забоя (не перепутайте его с символьным классом <code>\b</code>).</td>
+ </tr>
+ <tr>
+ <td><code>\0</code></td>
+ <td>Сопоставляется с нулевым символом. Не ставьте за ним другую цифру.</td>
+ </tr>
+ <tr>
+ <td><code>\c<em>X</em></code></td>
+ <td>
+ <p>Где <code><em>X</em></code> является буквой от «A» до «Z». Сопоставляется с управляющим символом в строке.</p>
+
+ <p>Например, шаблон <code>/\cM/</code> сопоставляется с символом control-M в строке.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\x<em>hh</em></code></td>
+ <td>Сопоставляется с символом с кодом <code><em>hh</em></code> (две шестнадцатеричные цифры).</td>
+ </tr>
+ <tr>
+ <td><code>\u<em>hhhh</em></code></td>
+ <td>Сопоставляется с символом со значением Юникода <code><em>hhhh</em></code> (четыре шестнадцатеричные цифры).</td>
+ </tr>
+ <tr>
+ <td><code>\</code></td>
+ <td>
+ <p>Для символов, которые обычно трактуются буквально, указывает, что следующий символ является специальным и не должен интерпретироваться буквально.</p>
+
+ <p>Например, шаблон <code>/b/</code> сопоставляется с символом «b». Поместив перед ним символ обратного слеша, то есть превратив шаблон в <code>/\b/</code>, символ приобретёт специальное значение, обозначающее сопоставление с границей слова.</p>
+
+ <p><em>или</em></p>
+
+ <p>Для символов, которые обычно трактуются специальным образом, указывает, что следующий символ не является специальным и должен интерпретироваться буквально.</p>
+
+ <p>Например, звёздочка «*» является специальным символом, обозначающим ноль или более вхождений предшествующего символа при сопоставлении; поэтому шаблон <code>/a*/</code> означает сопоставление с нулём или более символов «a». Для буквального сопоставления со звёздочкой <code>*</code> предварите её символом обратного слеша; например, шаблон <code>/a\*/</code> сопоставляется со строкой «a*».</p>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr id="character-sets">
+ <th colspan="2">Наборы символов</th>
+ </tr>
+ <tr>
+ <th>Символ</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td><code>[xyz]</code></td>
+ <td>
+ <p>Набор символов. Сопоставляется с любым из заключённых в квадратные скобки символов. С помощью дефиса вы можете определить диапазон символов.</p>
+
+ <p>Например, шаблон <code>[абвгд]</code> означает тоже самое, что и шаблон <code>[а-д]</code>. Они сопоставляются с символом «г» в слове «грудинка» и символом «б» в слове «отбивная».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>[^xyz]</code></td>
+ <td>
+ <p>Отрицательный или дополнительный набор символов. То есть он сопоставляется со всеми символами, что не заключены в квадратные скобки. С помощью дефиса вы можете определить диапазон символов.</p>
+
+ <p>Например, шаблон <code>[^абвгд]</code> означает тоже самое, что и шаблон <code>[^а-д]</code>. Они сопоставляются с символом «е» в слове «бекон» и символом «о» в слове «отбивная».</p>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr id="boundaries">
+ <th colspan="2">Границы</th>
+ </tr>
+ <tr>
+ <th>Символ</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td><code>^</code></td>
+ <td>
+ <p>Сопоставляется c началом ввода. Если установлен флаг многострочности, также сопоставляется с позицией сразу за символом переноса строки.</p>
+
+ <p>Например, шаблон <code>/^Б/</code> не сопоставляется с буквой «Б» в строке «буква Б», но сопоставляеся с первой буквой «Б» в строке «Буква Б».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>$</code></td>
+ <td>
+ <p>Сопоставляется c концом ввода. Если установлен флаг многострочности, также сопоставляется с позицией сразу перед символом переноса строки.</p>
+
+ <p>Например, шаблон <code>/т$/</code> не сопоставляется с буквой «т» в слове «кормить», но сопоставляеся с ней в слове «кормит».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\b</code></td>
+ <td>
+ <p>Сопоставляется с границей слова нулевой ширины, например с позицией между буквой и пробелом (не путайте его с набором символов <code>[\b]</code>).</p>
+
+ <p>Например, шаблон <code>/\bпол/</code> сопоставляется с подстрокой «пол» в строке «в полдень»; шаблон <code>/но\b/</code> сопоставляется с подстрокой «но» в строке «возможно завтра».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\B</code></td>
+ <td>
+ <p>Сопоставляется с границей не-слов нулевой ширины, например с позицией между двумя буквами или двумя пробелами.</p>
+
+ <p>Например, шаблон <code>/\Bдень/</code> сопоставляется с подстрокой «день» в строке «в полдень»; шаблон <code>/за\B/</code> сопоставляется с подстрокой «за» в строке «возможно завтра».</p>
+ </td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr id="grouping-back-references">
+ <th colspan="2">Группировка и обратные ссылки</th>
+ </tr>
+ <tr>
+ <th>Символ</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td><code>(<em>x</em>)</code></td>
+ <td>
+ <p>Сопоставляется с <code><em>x</em></code> и запоминает сопоставление. Называется «захватывающие скобки».</p>
+
+ <p>Например, шаблон <code>/(foo)/</code> сопоставлется с подстрокой «foo» и запоминает её в строке «foo bar». Сопоставленую подстроку можно достать из элементов <code>[1], ..., [n]</code> результирующего массива или из предопределённых свойств <code>$1, ..., $9</code> объекта <code>RegExp</code>.</p>
+
+ <p>Захват групп ведёт к проседанию производительности. Если вам не нужно повторно ссылаться на захваченную подстроку, лучше использовать скобки без захвата (смотрите ниже).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>\<em>n</em></code></td>
+ <td>
+ <p>Где <code><em>n</em></code> является целым положительным числом. Обратная ссылка на последнюю сопоставившуюся подстроку в <em>n</em>-ных по счёту круглых скобках в регулярном выражении (нумерация скобок идет слева направо).</p>
+
+ <p>Например, шаблон <code>/яблоко(,)\sапельсин\1/</code> сопоставится подстроке «яблоко, апельсин,» в строке «яблоко, апельсин, вишня, персик». Более подробный пример смотрите после этой таблицы.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>(?:<em>x</em>)</code></td>
+ <td>Сопоставляется с <code><em>x</em></code>, но не запоминает сопоставление. Называется «незахватывающие скобки». Сопоставленную подстроку нельзя достать из элементов <code>[1], ..., [n]</code> результирующего массива или из предопределённых свойств <code>$1, ..., $9</code> объекта <code>RegExp</code>.</td>
+ </tr>
+ </tbody>
+ <tbody>
+ <tr id="quantifiers">
+ <th colspan="2">Квантификаторы</th>
+ </tr>
+ <tr>
+ <th>Символ</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td><code><em>x</em>*</code></td>
+ <td>
+ <p>Сопоставляется с предшествующим элементом <em>x</em> ноль или более раз.</p>
+
+ <p>Например, шаблон <code>/ела*/</code> сопоставляется с подстрокой «ел» в строке «Призрак просвистел» и подстрокой «ела» в строке «Птица пропела», но ни с чем не сопоставится в строке «Козёл хмыкнул».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>+</code></td>
+ <td>
+ <p>Сопоставляется с предшествующим элементом <em>x</em> один или более раз. Эквивалентен квантификатору <code>{1,}</code>.</p>
+
+ <p>Например, шаблон <code>/о+/</code> сопоставляется с символом «о» в строке «конфета» и со всеми символами «о» в строке «коооооонфета».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>*?</code><br>
+ <code><em>x</em>+?</code></td>
+ <td>
+ <p>Сопоставляется с предшествующим элементом <em>x</em> подобно квантификаторам <code>*</code> и <code>+</code>, описанным выше, однако ищет минимально возможное сопоставление.</p>
+
+ <p>Например, шаблон <code>/".*?"/</code> сопоставляется с подстрокой «"foo"» в строке «"foo" "bar"» и не сопоставляется со строкой «"foo" "bar"», поскольку за звёздочкой <code>*</code> следует символ вопроса <code>?</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>?</code></td>
+ <td>
+ <p>Сопоставляется с предшествующим элементом <em>x</em> ноль или один раз.</p>
+
+ <p>Например, шаблон <code>/о?то?/</code> сопоставляется с подстрокой «от» в строке «кот» и подстрокой «то» в строке «ток».</p>
+
+ <p>Если символ используется сразу после какого-то из квантификаторов <code>*</code>, <code>+</code>, <code>?</code>, или <code>{}</code>, то он делает этот квантификатор «нежадным» (сопоставление происходит минимально возможное количество раз), в противоположность «жадному» поведению квантификатора по умолчанию (сопоставление происходит максимально возможное количество раз).</p>
+
+ <p>Также символ используется в квантификаторах предпросмотра <code>(?=)</code>, <code>(?!)</code> и <code>(?:)</code>, также описанных в этой таблице.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>(?=<em>y</em>)</code></td>
+ <td>Сопоставлется с <code><em>x</em></code>, только если за <code><em>x</em></code> следует <code><em>y</em></code>. Например, шаблон <code>/Джек(?=Шпрот)/</code> сопоставлется со строкой «Джек» только если за ней следует строка «Шпрот». Шаблон <code>/Джек(?=Шпрот|Мороз)/</code> сопоставлется со строкой «Джек» только если за ней следуют строки «Шпрот» или «Мороз». Однако, ни «Шпрот», ни «Мороз» не являются частью результата сопоставления.</td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>(?!<em>y</em>)</code></td>
+ <td>
+ <p>Сопоставлется с <code><em>x</em></code>, только если за <code><em>x</em></code> не следует <code><em>y</em></code>. Например, шаблон <code>/\d+(?!\.)/</code> сопоставляется с числом только если за ним не следует десятичная запятая.</p>
+
+ <p>Выражение <code>/\d+(?!\.)/.exec('3.141')</code> сопоставится с «141» но не с «3.141».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>(?&lt;=<em>y</em>)<em>x</em></code></td>
+ <td>
+ <p><code><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Сопоставляется с </span></font><em>x</em></code>, только если <code><em>x</em></code> предшествует <code><em>y</em></code></p>
+
+ <p>Например, /<code>(?&lt;=Пётр)Иванов/</code> сопоставится с "Иванов" только если ему будет предшествовать "Петр".<br>
+ <code>/(?&lt;=Пётр|Владислав)Иванов/</code> сопоставится с "Иванов" только если ему будет предшествовать "Пётр" или "Владислав".<br>
+ В любом случае, ни "Пётр" ни "Владислав" не войдут в результат сопоставления.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>(?&lt;!<em>y</em>)<em>x</em></code></td>
+ <td>
+ <table>
+ <tbody>
+ <tr>
+ <td>
+ <p><code><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Сопоставляется с </span></font><em>x</em></code>, только если <code><em>x</em></code> не предшествует <code><em>y</em></code></p>
+
+ <p>Например, <code>/(?&lt;!-)\d+/</code> сопоставится с цифрой, только если ей не предшествует минус.<br>
+ <code>/(?&lt;!-)\d+/.exec('3')</code> вернет "3".<br>
+  <code>/(?&lt;!-)\d+/.exec('-3')</code>  не сопоставится с цифрой, тк цифре перед цифрой 3 присутствует минус.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>|<em>y</em></code></td>
+ <td>
+ <p>Сопоставляется либо с <code><em>x</em></code>, либо с <code><em>y</em></code>.</p>
+
+ <p>Например, шаблон <code>/зелёное|красное/</code> сопоставится с подстрокой «зелёное» в строке «зелёное яблоко» и подстрокой «красное» в строке «красное яблоко».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>{<em>n</em>}</code></td>
+ <td>
+ <p>Где <code><em>n</em></code> является целым положительным числом. Сопоставляется точно с <code><em>n</em></code> вхождениями предшествующего элемента <em>x</em>.</p>
+
+ <p>Например, шаблон <code>/о{2}/</code> не сопоставится с символом «о» в слове «конфета», но сопоставится со всеми символами «о» в слове «коонфета» и с первыми двумя символами «о» в слове «кооонфета».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>{<em>n</em>,}</code></td>
+ <td>
+ <p>Где <code><em>n</em></code> является целым положительным числом. Сопоставляется по крайней мере с <code><em>n</em></code> вхождениями предшествующего элемента <em>x</em>.</p>
+
+ <p>Например, шаблон <code>/о{2,}/</code> не сопоставится с символом «о» в слове «конфета», но сопоставится со всеми символами «о» в словах «коонфета» и даже в «кооооооонфета».</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><em>x</em>{<em>n</em>,<em>m</em>}</code></td>
+ <td>
+ <p>Где <code><em>n</em></code> и <code><em>m</em></code> являются целыми положительными числами. Сопоставляется по крайней мере с <code><em>n</em></code> но не более, чем с <code><em>m</em></code> вхождениями предшествующего элемента <em>x</em>.</p>
+
+ <p>Например, шаблон <code>/о{1,3}/</code> ни с чем не сопоставится в слове «кнфета», с символом «о» в слове «конфета», с двумя символами «о» в слове «коонфета» и с первыми тремя символами «о» в слове «кооооооонфета». Обратите внимание, что при сопоставлении со словом «кооооооонфета» сопоставиласть только подстрока «ооо», хотя слово содержало гораздо больше символов «о».</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("RegExp.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства ко всем объектам регулярных выражений.</dd>
+ <dt><code>RegExp.length</code></dt>
+ <dd>Значение <code>RegExp.length</code> равно 2.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "Properties", "prototype")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<p>Глобальный объект <code>RegExp</code> не имеет собственных методов, однако, он наследует некоторые методы через цепочку прототипов.</p>
+
+<div>{{jsOverrides("Function", "Methods", "prototype")}}</div>
+
+<h2 id="RegExp_prototype_objects_and_instances" name="RegExp_prototype_objects_and_instances">Экземпляры регулярного выражения</h2>
+
+<h3 id="Properties_of_RegExp_instance" name="Properties_of_RegExp_instance">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_RegExp_instance" name="Methods_of_RegExp_instance">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/RegExp/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_a_regular_expression_to_change_data_format" name="Example:_Using_a_regular_expression_to_change_data_format">Пример: использование регулярных выражений для смены формата данных</h3>
+
+<p>Следующий скрипт использует метод {{jsxref("String.prototype.replace()", "replace()")}} экземпляра строки {{jsxref("Global_Objects/String", "String")}} для сопоставления с именем в формате <em>имя фамилия</em> и выводит его в формате <em>фамилия, имя</em>. В тесте замены скрипт использует заменители <code>$1</code> и <code>$2</code>, которые заменяются на результаты соответствующих сопоставившихся подгрупп регулярного выражения.</p>
+
+<pre class="brush: js notranslate">var re = /(\w+)\s(\w+)/;
+var str = 'John Smith';
+var newstr = str.replace(re, '$2, $1');
+console.log(newstr);
+
+// пример с русскими буквами
+var re = /([а-яё]+)\s([а-яё]+)/i;
+var str = 'Джон Смит';
+var newstr = str.replace(re, '$2, $1');
+console.log(newstr);
+</pre>
+
+<p>Пример выведет «Smith, John» и «Смит, Джон»</p>
+
+<h3 id="Example_Using_regular_expression_to_split_lines" name="Example:_Using_regular_expression_to_split_lines">Пример: использование регулярного выражения для разбиения строк с различными символами конца строки</h3>
+
+<p>Символы конца строки различаются на различных платформах (Unix, Windows и так далее). Разбиение строк из этого примера работает на всех платформах.</p>
+
+<pre class="brush: js notranslate">var text = 'Некоторый текст\nЕщё текст\r\nИ ещё\rЭто конец';
+var lines = text.split(/\r\n|\r|\n/);
+console.log(lines); // выведет [ 'Некоторый текст', 'Ещё текст', 'И ещё', 'Это конец' ]
+</pre>
+
+<p>Обратите внимание, что порядок шаблонов в регулярном выражении имеет значение.</p>
+
+<h3 id="Example_Using_regular_expression_on_multiple_lines" name="Example:_Using_regular_expression_on_multiple_lines">Пример: использование регулярных выражений на нескольких строках</h3>
+
+<pre class="brush: js notranslate">var s = 'Please yes\nmake my day!';
+s.match(/yes.*day/);
+// Вернёт null
+s.match(/yes[^]*day/);
+// Вернёт 'yes\nmake my day'
+</pre>
+
+<h3 id="Example_Using_a_regular_expression_with_the_.22sticky.22_flag" name="Example:_Using_a_regular_expression_with_the_.22sticky.22_flag">Пример: использование регулярных выражений с флагом «липучести»</h3>
+
+<p>Этот пример демонстрирует, как можно использовать флаг «липучести» регулярных выражений для сопоставления с отдельными строками многострочного ввода.</p>
+
+<pre class="brush: js notranslate">var text = 'Первая строка\nВторая строка';
+var regex = /(\S+) строка\n?/y;
+
+var match = regex.exec(text);
+console.log(match[1]); // напечатает 'Первая'
+console.log(regex.lastIndex); // напечатает '14'
+
+var match2 = regex.exec(text);
+console.log(match2[1]); // напечатает 'Вторая'
+console.log(regex.lastIndex); // напечатает '27'
+
+var match3 = regex.exec(text);
+console.log(match3 === null); // напечатает 'true'
+</pre>
+
+<p>Во время выполнения можно проверить, поддерживается ли флаг «липучести», при помощи блока <code>try { … } catch { … }</code>. Для этого надо использовать либо выражение с <code>eval(…)</code>, либо конструктор <code>RegExp(<var>строка-регулярки</var>, <var>строка-с-флагами</var>)</code> (поскольку нотация <code>/<var>регулярка</var>/<var>флаги</var></code> обрабатывается во время компиляции, исключение будет выброшено до того, как выполнение достигнет блока <code>catch</code>). Например:</p>
+
+<pre class="brush: js notranslate">var supports_sticky;
+try { RegExp('', 'y'); supports_sticky = true; }
+catch(e) { supports_sticky = false; }
+console.log(supports_sticky); // напечатает 'true'
+</pre>
+
+<h3 id="Example_Regular_expression_and_Unicode_characters" name="Example:_Regular_expression_and_Unicode_characters">Пример: регулярные выражения и символы Юникода</h3>
+
+<p>Как уже сказано выше, символьные классы <code>\w</code> и <code>\W</code> сопоставляются только с базовыми символами ASCII; то есть, с символами от «a» до «z», от «A» до «Z», от «0» до «9» и символом «_». Для сопоставления с символами из других языков, например, с кириллическими или иврита, используйте форму <code>\uhhhh</code>, где «hhhh» — это значение символа Юникода, записанное в шестнадцатеричной форме. Этот пример демонстрирует, как можно выделить символы Юникода, составляющие слова.</p>
+
+<pre class="brush: js notranslate">var text = 'Образец text на русском языке';
+var regex = /[\u0400-\u04FF]+/g;
+
+var match = regex.exec(text);
+console.log(match[0]); // напечатает 'Образец'
+console.log(regex.lastIndex); // напечатает '7'
+
+var match2 = regex.exec(text);
+console.log(match2[0]); // напечатает 'на' [не 'text']
+console.log(regex.lastIndex); // напечатает '15'
+
+// и так далее
+</pre>
+
+<p>Вот на этом внешнем ресурсе можно составить полный диапазон блоков Юникода для различных письменностей: <a href="http://kourge.net/projects/regexp-unicode-block">regexp-unicode-block</a>.</p>
+
+<h3 id="Example_Extracting_subdomain_name_from_URL" name="Example:_Extracting_subdomain_name_from_URL">Пример: извлечение имени поддомена из URL</h3>
+
+<pre class="brush: js notranslate">var url = 'http://xxx.domain.com';
+console.log(/[^.]+/.exec(url)[0].substr(7)); // напечатает 'xxx'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10', 'RegExp')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp-regular-expression-objects', 'RegExp')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Флаг «липучести» («y»)</td>
+ <td>{{CompatChrome("39")}} (через флаг)</td>
+ <td>{{CompatGeckoDesktop("1.9")}} ES4-Style {{bug(773687)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Флаг «липучести» («y»)</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("1.9")}} ES4-Style {{bug(773687)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko_specific_notes" name="Gecko_specific_notes">Примечания по Gecko</h3>
+
+<p>Начиная с Gecko 34 {{geckoRelease(34)}}, в случае захвата группы с квантификаторами, предотвращающими появление группы в результате сопоставления, сопоставившийся текст для захваченной группы теперь имеет значение <code>undefined</code> вместо пустой строки:</p>
+
+<pre class="brush: js notranslate">// Firefox 33 или более ранние
+'x'.replace(/x(.)?/g, function(m, group) {
+ console.log("'group:" + group + "'");
+}); // 'group:'
+
+// Firefox 34 или более новые
+'x'.replace(/x(.)?/g, function(m, group) {
+ console.log("'group:" + group + "'");
+}); // 'group:undefined'
+</pre>
+
+<p>Обратите внимание, что для поддержания обратной совместимости, свойства <code>RegExp.$N</code> по-прежнему возвращают пустую строку вместо значения <code>undefined</code> (<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1053944">bug 1053944</a>).</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Глава про <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">регулярные выражения</a> в <a href="/ru/docs/Web/JavaScript/Guide">руководстве по JavaScript</a></li>
+ <li>{{jsxref("String.prototype.match()")}}</li>
+ <li>{{jsxref("String.prototype.replace()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/input/index.html b/files/ru/web/javascript/reference/global_objects/regexp/input/index.html
new file mode 100644
index 0000000000..1e85d92013
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/input/index.html
@@ -0,0 +1,55 @@
+---
+title: RegExp.input ($_)
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/input
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/input
+---
+<div>{{JSRef}} {{non-standard_header}}</div>
+
+<p>Нестандартное свойство <strong><code>input</code> </strong>является статическим свойством регулярных выражений. Оно содержит строку, для которой произошло совпадение по регулярному выражению. Значение свойства также можно получить как <code>RegExp.$_</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>RegExp</var>.input
+RegExp.$_
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Поскольку свойство <code>input</code> статическое, к нему можно обратиться только как <code>RegExp.input</code> или <code>RegExp.$_</code>.</p>
+
+<p>Значение данного свойства изменяется каждый раз при возникновении совпадений с регулярным выражением для новой строки.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_input_и__">Использование <code>input</code> и <code>$_</code></h3>
+
+<pre class="brush: js">var re = /hi/g;
+re.test('hi there!');
+RegExp.input; // "hi there!"
+re.test('foo'); // новая проверка, совпадений нет
+RegExp.$_; // "hi there!"
+re.test('hi world!'); // новая проверка, совпадение есть
+RegExp.$_; // "hi world!"
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<p>Не стандартизированно. Не является частью какой-либо спецификации.</p>
+
+<h2 id="Поддержка_в_браузерах">Поддержка в браузерах</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.RegExp.input")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.lastMatch", "RegExp.lastMatch ($&amp;)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.lastParen", "RegExp.lastParen ($+)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.leftContext", "RegExp.leftContext ($`)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.rightContext", "RegExp.rightContext ($')")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.n", "RegExp.$1-$9")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/lastindex/index.html b/files/ru/web/javascript/reference/global_objects/regexp/lastindex/index.html
new file mode 100644
index 0000000000..3b9b80efea
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/lastindex/index.html
@@ -0,0 +1,130 @@
+---
+title: RegExp.lastIndex
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
+tags:
+ - JavaScript
+ - Property
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastIndex
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>lastIndex</code></strong> является целочисленным свойством регулярного выражения, доступным как для чтения, так и для записи, которое определяет индекс, с которого следует начинать следующее сопоставление.</p>
+
+<div>{{js_property_attributes(1, 0, 0)}}</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>regExpObj</var>.lastIndex</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Это свойство устанавливается только в том случае, если в регулярном выражении используется флаг <code>"g"</code>, указывающий на необходимость глобального поиска. Оно подчиняется следующим правилам:</p>
+<ul>
+ <li>Если свойство <code>lastIndex</code> больше длины строки, методы {{jsxref("RegExp.prototype.test()", "test()")}} и {{jsxref("RegExp.prototype.exec()", "exec()")}} завершатся с неудачей, а свойство <code>lastIndex</code> будет установлено в 0.</li>
+ <li>Если свойство <code>lastIndex</code> равно длине строки и регулярное выражение сопоставляется с пустой строкой, то регулярное выражение начнёт сопоставляться, начиная с позиции <code>lastIndex</code>.</li>
+ <li>Если свойство <code>lastIndex</code> равно длине строки и регулярное выражение не сопоставляется с пустой строкой, то регулярное выражение не соответствует входу и свойство <code>lastIndex</code> сбрасывается в 0.</li>
+ <li>Во всех остальных случаях свойство <code>lastIndex</code> устанавливается в позицию, следующую за самым последним сопоставлением.</li>
+</ul>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_lastIndex" name="Example:_Using_lastIndex">Пример: использование свойства <code>lastIndex</code></h3>
+<p>Рассмотрим следующую последовательность инструкций:</p>
+<pre class="brush: js">var re = /(привет)?/g;
+</pre>
+<p>Сопоставляется с пустой строкой.</p>
+<pre class="brush: js">console.log(re.exec('привет'));
+console.log(re.lastIndex);
+</pre>
+<p>Выведет массив <code>["привет", "привет"]</code>, а свойство <code>lastIndex</code> будет равным 6.</p>
+<pre class="brush: js">console.log(re.exec('привет'));
+console.log(re.lastIndex);
+</pre>
+<p>Выведет массив <code>["", undefined]</code>, «пустой» массив, чей нулевой элемент является сопоставившейся строкой. В данном случае, ей является пустая строка, поскольку свойство <code>lastIndex</code> было равно 6 (и остаётся равным 6), а строка <code>"привет"</code> имеет длину 6.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
+ JavaScript 1.5: свойство <code>lastIndex</code> является свойством экземпляра {{jsxref("RegExp")}}, а не самого объекта {{jsxref("RegExp")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.7.5', 'RegExp.lastIndex')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-regexp-instances', 'RegExp.lastIndex')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+ <li>{{jsxref("RegExp.prototype.sticky")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..94e140a0a8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/lastmatch/index.html
@@ -0,0 +1,54 @@
+---
+title: RegExp.lastMatch ($&)
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/lastMatch
+---
+<div>{{JSRef}} {{non-standard_header}}</div>
+
+<p>Нестандартное свойство <strong>lastMatch </strong>является доступным только для чтения статическим свойством регулярных выражений. Оно содержит последние совпавшие символы. Значение свойства также можно получить как <code>RegExp.$&amp;</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>RegExp</var>.lastMatch
+RegExp['$&amp;']
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Поскольку свойство <code>lastMatch</code>  статическое, к нему можно обратиться только как  <code>RegExp.lastMatch</code> или <code>RegExp['$&amp;'].</code></p>
+
+<p>Значение свойства <code>lastMatch</code> доступно только для чтение и изменяется при успешном совпадении с регулярным выражением.</p>
+
+<p>Поскольку использование символа "&amp;" приведет к выбрасыванию ошибки {{jsxref("SyntaxError")}}, обратиться к данному свойству с помощью точечной нотации(<code>RegExp.$&amp;</code>) нельзя. Вместо этого стоит использовать <a href="/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors">скобочную нотацию</a> (<code>RegExp['$&amp;']</code>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_lastMatch_и">Использование <code>lastMatch</code> и <code>$&amp;</code></h3>
+
+<pre class="brush: js notranslate">var re = /hi/g;
+re.test('hi there!');
+RegExp.lastMatch; // "hi"
+RegExp['$&amp;']; // "hi"
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<p>Не стандартизированно. Не является частью какой-либо спецификации.</p>
+
+<h2 id="Поддержка_в_браузерах">Поддержка в браузерах</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.RegExp.lastMatch")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.input", "RegExp.input ($_)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.lastParen", "RegExp.lastParen ($+)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.leftContext", "RegExp.leftContext ($`)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.rightContext", "RegExp.rightContext ($')")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.n", "RegExp.$1-$9")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/multiline/index.html b/files/ru/web/javascript/reference/global_objects/regexp/multiline/index.html
new file mode 100644
index 0000000000..734964950f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/multiline/index.html
@@ -0,0 +1,115 @@
+---
+title: RegExp.prototype.multiline
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/multiline
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/multiline
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>multiline</code></strong> указывает, использовался ли в определении регулярного выражения флаг <code>"m"</code>. Свойство <code>multiline</code> является свойством только для чтения и принадлежит экземпляру регулярного выражения.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Значение свойства <code>multiline</code> имеет тип {{jsxref("Global_Objects/Boolean", "Boolean")}} и содержит <code>true</code>, если при определении регулярного выражения использовался флаг <code>"m"</code>; в противном случае оно содержит <code>false</code>. Флаг <code>"m"</code> указывает на то, что многострочная входная строка должна рассматриваться в виде нескольких строк. Например, если используется флаг <code>"m"</code>, специальные символы <code>"^"</code> и <code>"$"</code> меняют своё поведение: с установленным флагом они сопоставляются в началом / концом каждой строки в многострочной строке, а не с началом / концом всей многострочной строки.</p>
+<p>Вы не можете напрямую изменить это свойство.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_multiline" name="Example:_Using_multiline">Пример: использование свойства <code>multiline</code></h3>
+<pre class="brush: js">var regex = new RegExp('foo', 'm');
+
+console.log(regex.multiline); // true
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
+ JavaScript 1.5: свойство <code>multiline</code> является свойством экземпляра {{jsxref("Global_Objects/RegExp", "RegExp")}}, а не самого объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.7.4', 'RegExp.prototype.multiline')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.multiline', 'RegExp.prototype.multiline')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Свойство <code>multiline</code> теперь является свойством доступа в прототипе объекта, а не собственным свойством данных экземпляра.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+ <li>{{jsxref("RegExp.prototype.sticky")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..a785e92f01
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/n/index.html
@@ -0,0 +1,64 @@
+---
+title: RegExp.$1-$9
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/n
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/n
+---
+<div>{{JSRef}} {{non-standard_header}}</div>
+
+<p>Нестандартные свойства <strong>$1, $2, $3, $4, $5, $6, $7, $8, $9</strong> являются статическими и доступными только для чтения свойствами регулярных выражений, которые содержат найденые подстроки, обернутые в скобки.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>RegExp</var>.$1
+RegExp.$2</code>
+RegExp.$3
+RegExp.$4
+RegExp.$5
+RegExp.$6
+RegExp.$7
+RegExp.$8
+RegExp.$9
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Свойства $1, ..., $9 являются статичными, они не являются свойствами конкретного объекта регулярного выражения, поэтому вы всегда можете использовать их как <code>RegExp.$1</code>, ..., <code>RegExp.$9</code>.</p>
+
+<p>Значения этих свойств не доступны для изменения, они модифицируются всякий раз при успешном совпадении регулярного выражения.</p>
+
+<p>Количество возможных подстрок в круглых скобках неограничено, но объект <code>RegExp</code> может содержать в себе только последние 9. Вы можете получить доступ ко всем подстрокам, совпавшим с выражениями внутри круглых скобок, с помощью индексов возвращенного массива.</p>
+
+<p>Эти свойства могу использоваться при замене текста в методе {{jsxref("String.replace")}}. Когда используете его, не добавляйте их в <code>RegExp</code>. Пример ниже демонстрирует правильное применение. Когда круглые скобки не включены в регулярное выражение, код интерпритирует такие значения, как <code>$n</code> буквально, как литерал (n - положительное число).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_n_со_String.replace">Использование <code>$n</code> со <code>String.replace</code></h3>
+
+<p>Следующий код использует метод {{jsxref("String.prototype.replace()", "replace()")}} строки {{jsxref("String")}}, чтобы преобразовать строку в формате <em>Имя Фамилия</em> в формат <em>Фамилия, Имя</em>. В коде замены текста используются <code>$1</code> и <code>$2</code> чтобы указать порядок вывода результата совпадений полученных при сравнивании с шаблоном регулярного выражения, имеющего круглые скобки.</p>
+
+<pre class="brush: js">var re = /(\w+)\s(\w+)/;
+var str = 'John Smith';
+str.replace(re, '$2, $1'); // "Smith, John"
+RegExp.$1; // "John"
+RegExp.$2; // "Smith"
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<p>Не стандартизированно. Не является частью какой-либо спецификации</p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.RegExp.n")}}</p>
+
+<div id="compat-mobile"></div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.input", "RegExp.input ($_)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.lastMatch", "RegExp.lastMatch ($&amp;)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.lastParen", "RegExp.lastParen ($+)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.leftContext", "RegExp.leftContext ($`)")}}</li>
+ <li>{{non-standard_inline}} {{jsxref("RegExp.rightContext", "RegExp.rightContext ($')")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/prototype/index.html b/files/ru/web/javascript/reference/global_objects/regexp/prototype/index.html
new file mode 100644
index 0000000000..dd6989d2fd
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/prototype/index.html
@@ -0,0 +1,140 @@
+---
+title: RegExp.prototype
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/prototype
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>RegExp.prototype</code></strong> представляет объект прототипа для констуктора {{jsxref("Global_Objects/RegExp", "RegExp")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Описание экземпляров регулярных выражений смотрите на странице документации, посвящёной объекту {{jsxref("Global_Objects/RegExp", "RegExp")}}. Экземпляры регулярных выражений наследуются от <code>RegExp.prototype</code>. Изменение объекта прототипа распространяется на все экземпляры регулярных выражений.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<p>Также смотрите <a href="/ru/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#RegExp_Properties">устаревшие свойства объекта <code>RegExp</code></a></p>
+<p>Обратите внимание, что некоторые свойста объекта {{jsxref("Global_Objects/RegExp", "RegExp")}} имеют как длинные, так и короткие (Perl-подобные) имена. Оба имени всегда ссылаются на одно и тоже значение. Perl — это язык программирования, откуда JavaScript взял свои регулярные выражения.</p>
+<dl>
+ <dt><code>RegExp.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип объекта.</dd>
+ <dt>{{jsxref("RegExp.prototype.global")}}</dt>
+ <dd>Определяет, надо ли проверять регулярное выражение на все возможные сопоставления со строкой, или достаточно только первый раз.</dd>
+ <dt>{{jsxref("RegExp.prototype.ignoreCase")}}</dt>
+ <dd>Определяет, надо ли игнорировать регистр символов при попытке сопоставления со строкой.</dd>
+ <dt>{{jsxref("RegExp.prototype.lastIndex")}}</dt>
+ <dd>Индекс, по которому начинается следующее сопоставление.</dd>
+ <dt>{{jsxref("RegExp.prototype.multiline")}}</dt>
+ <dd>Определяет, надо ли искать по нескольким строкам.</dd>
+ <dt>{{jsxref("RegExp.prototype.source")}}</dt>
+ <dd>Текст шаблона.</dd>
+ <dt>{{jsxref("RegExp.prototype.sticky")}} {{experimental_inline}}</dt>
+ <dd>Определяет, включён ли режим «липкого» поиска.</dd>
+ <dt>{{jsxref("RegExp.prototype.flags")}} {{experimental_inline}}</dt>
+ <dd>Строка, состоящая из флагов объекта регулярного выражения.</dd>
+</dl>
+<div>{{jsOverrides("Object", "properties", "constructor", "global", "ignoreCase", "lastIndex", "multiline", "source", "sticky")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Также смотрите <a href="/ru/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features#RegExp_Methods">устаревшие методы объекта <code>RegExp</code></a></p>
+<dl>
+ <dt>{{jsxref("RegExp.prototype.exec()")}}</dt>
+ <dd>Выполняет поиск сопоставлений регулярного выражения в своём строковом параметре.</dd>
+ <dt>{{jsxref("RegExp.prototype.test()")}}</dt>
+ <dd>Пытается сопоставить регулярное выражение своему строковому параметру.</dd>
+ <dt>{{jsxref("RegExp.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает объектный литерал, представляющий указаный объект; вы можете использовать это значение для создания нового объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("RegExp.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, представляющую указаннный объект. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+</dl>
+<div>{{jsOverrides("Object", "Methods", "exec", "test", "toSource", "toString")}}</div>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.5.1', 'RegExp')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype', 'RegExp.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>Глава про <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">регулярные выражения</a> в <a href="/ru/docs/Web/JavaScript/Guide">руководстве по JavaScript</a></li>
+ <li>{{jsxref("Global_Objects/RegExp", "RegExp")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/source/index.html b/files/ru/web/javascript/reference/global_objects/regexp/source/index.html
new file mode 100644
index 0000000000..32d0bb687d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/source/index.html
@@ -0,0 +1,121 @@
+---
+title: RegExp.prototype.source
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/source
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/source
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>source</code></strong> возвращает {{jsxref("Global_Objects/String", "строку", "", 1)}}, содержащую текст шаблона регулярного выражения без прямых слешей с обеих сторон и без флагов регулярного выражения.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_source" name="Example:_Using_source">Пример: использование свойства <code>source</code></h3>
+
+<pre class="brush: js">var regex = /fooBar/ig;
+
+console.log(regex.source); // 'fooBar', не содержит прямые слеши /.../ и флаги 'ig'.
+</pre>
+
+<p>Начиная с ECMAScript 5, свойство <code>source</code> больше не возвращает пустую строку для пустых регулярных выражений. Вместо этого, возвращается строка" (?:)". Кроме того, теперь экранируются символы окончания строк (такие как, "\n").</p>
+
+<pre>new RegExp().source; // "(?:)"
+
+new RegExp('\n').source === '\n'; // true, до появления ES5
+new RegExp('\n').source === '\\n'; // true, начиная с ES5</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.<br>
+ JavaScript 1.5: свойство <code>source</code> является свойством экземпляра {{jsxref("Global_Objects/RegExp", "RegExp")}}, а не самого объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.7.1', 'RegExp.prototype.source')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.source', 'RegExp.prototype.source')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Свойство <code>source</code> теперь является свойством доступа в прототипе объекта, а не собственным свойством данных экземпляра.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp.prototype.flags")}}</li>
+</ul>
+
+<div class="ddict_btn" style="top: 882px; left: 573.6px;"><img></div>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/sticky/index.html b/files/ru/web/javascript/reference/global_objects/regexp/sticky/index.html
new file mode 100644
index 0000000000..84801849db
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/sticky/index.html
@@ -0,0 +1,139 @@
+---
+title: RegExp.prototype.sticky
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/sticky
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - RegExp
+ - Référence(2)
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/sticky
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>sticky</code></strong> отражает тот факт, является ли поиск «липким» (то есть, начинается ли он с индекса, на который указывает свойство {{jsxref("RegExp.lastIndex", "lastIndex")}} регулярного выражения). Свойство <code>sticky</code> является свойством только для чтения и принадлежит экземпляру регулярного выражения.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Значение свойства <code><strong>sticky</strong></code> имеет тип {{jsxref("Global_Objects/Boolean", "Boolean")}} и содержит <code>true</code>, если при определении регулярного выражения использовался флаг <code>"y",</code> в противном случае оно содержит <code>false</code>. Флаг <code>"y"</code> указывает на то, что регулярное выражение сопоставляется с целевой строкой начиная с позиции, на которую указывает его свойство {{jsxref("RegExp.lastIndex", "lastIndex")}} (и не пытается сопоставиться по любому более старшему индексу). Такое поведение позволяет эффективно использовать символ <code>"^"</code> сопоставления-с-началом в любом месте строки путём смены значения свойства {{jsxref("RegExp.lastIndex", "lastIndex")}}.</p>
+
+<p>Вы не можете напрямую изменить это свойство.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_a_regular_expression_with_the_.22sticky.22_flag" name="Example:_Using_a_regular_expression_with_the_.22sticky.22_flag">Пример: использование регулярных выражений с флагом «липучести»</h3>
+
+<p>Этот пример демонстрирует, как можно использовать флаг «липучести» регулярных выражений для сопоставления с отдельными строками многострочного ввода.</p>
+
+<pre class="brush: js">var text = 'Первая строка\nВторая строка';
+var regex = /(\S+) строка\n?/y;
+
+var match = regex.exec(text);
+console.log(match[1]); // напечатает 'Первая'
+console.log(regex.lastIndex); // напечатает '14'
+
+var match2 = regex.exec(text);
+console.log(match2[1]); // напечатает 'Вторая'
+console.log(regex.lastIndex); // напечатает '27'
+
+var match3 = regex.exec(text);
+console.log(match3 === null); // напечатает 'true'
+</pre>
+
+<h2 id="Compatibility_test" name="Compatibility_test">Проверка совместимости</h2>
+
+<p>Во время выполнения можно проверить, поддерживается ли флаг «липучести», при помощи блока <code>try { … } catch { … }</code>. Для этого надо использовать либо выражение с <code>eval(…)</code>, либо конструктор <code>RegExp(<var>строка регулярного выражения</var>, <var>строка-с-флагами</var>)</code> (поскольку нотация <code>/<var>регулярное выражение</var>/<var>флаги</var></code> обрабатывается во время компиляции, исключение будет выброшено до того, как выполнение достигнет блока <code>catch</code>). Например:</p>
+
+<pre class="brush: js">var supports_sticky;
+try { RegExp('', 'y'); supports_sticky = true; }
+catch(e) { supports_sticky = false; }
+console.log(supports_sticky); // напечатает 'false' в Firefox 2 и 'true' в Firefox 3+
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-regexp.prototype.sticky', 'RegExp.prototype.sticky')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("1.9")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("1.9")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/test/index.html b/files/ru/web/javascript/reference/global_objects/regexp/test/index.html
new file mode 100644
index 0000000000..3723064858
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/test/index.html
@@ -0,0 +1,143 @@
+---
+title: RegExp.prototype.test()
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/test
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/test
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>test()</code></strong> выполняет поиск сопоставления регулярного выражения указанной строке. Возвращает <code>true</code> или <code>false</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre><code><var>regexObj</var>.test(str)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Строка, с которой сопоставляется регулярное выражение.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Логическое значение: <code>true</code> или <code>false</code>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Используйте метод <code>test()</code>, если вы просто хотите узнать, находится ли шаблон в строке (он почти аналогичен методу {{jsxref("String.prototype.search()")}}, только вместо индекса шаблона возвращает <code>true</code> или <code>false</code>); для получения дополнительной информации о сопоставлении (но за счёт более медленного выполнения) используйте метод {{jsxref("RegExp.prototype.exec()", "exec()")}} (он аналогичен методу {{jsxref("String.prototype.match()")}}). Как и при вызове метода {{jsxref("RegExp.prototype.exec()", "exec()")}} (или при совместном с ним вызове), метод <code>test()</code>, вызванный несколько раз на одном и том же экземпляре глобального регулярного выражения, будет начинать проверку с конца предыдущего сопоставления.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_test" name="Example:_Using_test">Пример: использование метода <code>test()</code></h3>
+
+<p>Следующий пример печатает сообщение, в зависимости от того, была ли проверка успешной:</p>
+
+<pre class="brush: js">function testinput(re, str){
+ var midstring;
+ if (re.test(str)) {
+ midstring = ' содержит ';
+ } else {
+ midstring = ' не содержит ';
+ }
+ console.log(str + midstring + re.source);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.10.6.3', 'RegExp.test')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype.test', 'RegExp.test')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<p>До Gecko 8.0 {{geckoRelease("8.0")}} метод <code>test()</code> был реализован неправильно; когда он вызывался без параметров, он проверял на сопоставление предыдущее проверенное значение (свойство <code>RegExp.input</code>) вместо сопоставления со строкой <code>"undefined"</code>. Это поведение было исправлено; теперь <code>/undefined/.test()</code> правильно вернёт <code>true</code> вместо ошибки.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>Глава про <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions">регулярные выражения</a> в <a href="/ru/docs/Web/JavaScript/Guide">руководстве по JavaScript</a></li>
+ <li>{{jsxref("Global_Objects/RegExp", "RegExp")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/tosource/index.html b/files/ru/web/javascript/reference/global_objects/regexp/tosource/index.html
new file mode 100644
index 0000000000..470f288df6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/tosource/index.html
@@ -0,0 +1,106 @@
+---
+title: RegExp.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/toSource
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+ - RegExp
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toSource
+---
+<div>{{JSRef("Global_Objects", "RegExp")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>toSource()</code></strong> возвращает строковое представление исходного кода объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>regexObj</var>.toSource()
+RegExp.toSource()
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>toSource()</code> возвращает следующие значения:</p>
+
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}, метод <code>toSource()</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+
+ <pre class="brush: js">function RegExp() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}, метод <code>toSource()</code> возвращает строковое представление исходного кода.</li>
+</ul>
+
+<p>Этот метод обычно вызывается внутри движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/regexp/tostring/index.html b/files/ru/web/javascript/reference/global_objects/regexp/tostring/index.html
new file mode 100644
index 0000000000..2e0d9badec
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/tostring/index.html
@@ -0,0 +1,116 @@
+---
+title: RegExp.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/toString
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - RegExp
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/toString
+---
+<div>{{JSRef("Global_Objects", "RegExp")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toString()</code></strong> возвращает строковое представление регулярного выражения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>regexObj</var>.toString()</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<p>Нет.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Global_Objects/RegExp", "RegExp")}} переопределяет метод <code>toString()</code> объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString()")}}. Для объектов {{jsxref("Global_Objects/RegExp", "RegExp")}}, метод <code>toString()</code> возвращает строковое представление регулярного выражения.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toString" name="Example:_Using_toString">Пример: использование метода <code>toString()</code></h3>
+<p>Следующий пример отображает строковое значение объекта {{jsxref("Global_Objects/RegExp", "RegExp")}}:</p>
+<pre class="brush: js">var myExp = new RegExp('a+b+c');
+console.log(myExp.toString()); // отобразит '/a+b+c/'
+
+var foo = new RegExp('bar', 'g');
+console.log(foo.toString()); // отобразит '/bar/g'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.2', 'RegExp.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-regexp.prototype.tostring', 'RegExp.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..6f585f94f7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/regexp/unicode/index.html
@@ -0,0 +1,70 @@
+---
+title: RegExp.prototype.unicode
+slug: Web/JavaScript/Reference/Global_Objects/RegExp/unicode
+translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/unicode
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство unicode указывает, используется ли флаг «u» с регулярным выражением. Свойство unicode доступно только для чтения конкретного экземпляра регулярного выражения.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/regexp-prototype-unicode.html", "taller")}}</div>
+
+<p class="hidden">Источник этого интерактивного примера хранится в GitHub репозитории. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте https://github.com/mdn/interactive-examples и отправьте нам pull request.</p>
+
+<div>{{js_property_attributes(0, 0, 1)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Значение unicode является {{jsxref ("Boolean")}}. True, если используется флаг u, или false - противном случае. Флаг «u» позволяет использовать различные функции, связанные с Unicode. С флагом «u» любые escape-последовательности кода Unicode будут интерпретироваться как таковые, например.</p>
+
+<p>Вы не можете напрямую изменить это свойство. Оно доступно только для чтения.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Испльзование_свойства_unicode">Испльзование свойства <code>unicode</code></h3>
+
+<pre class="brush: js">var regex = new RegExp('\u{61}', 'u');
+
+console.log(regex.unicode); // true
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-regexp.prototype.unicode', 'RegExp.prototype.unicode')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, зайдите на https://github.com/mdn/browser-compat-data и отправьте нам pull request.</div>
+
+<p>{{Compat("javascript.builtins.RegExp.unicode")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp.lastIndex")}}</li>
+ <li>{{jsxref("RegExp.prototype.global")}}</li>
+ <li>{{jsxref("RegExp.prototype.ignoreCase")}}</li>
+ <li>{{jsxref("RegExp.prototype.multiline")}}</li>
+ <li>{{jsxref("RegExp.prototype.source")}}</li>
+ <li>{{jsxref("RegExp.prototype.sticky")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/add/index.html b/files/ru/web/javascript/reference/global_objects/set/add/index.html
new file mode 100644
index 0000000000..44ac1e81b8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/add/index.html
@@ -0,0 +1,76 @@
+---
+title: Set.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/Set/add
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/add
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>add()</strong></code> добавляет новый элемент с заданным значением в конец объекта <code>Set</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-add.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.add(value);</code></pre>
+
+<h3 id="Параметы">Параметы</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Обязательное. Значение элемента, добавляемого в объект <code>Set</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Объект <code>Set</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_add">Использование метода <code>add</code> </h3>
+
+<pre class="brush: js">var mySet = new Set();
+
+mySet.add(1);
+mySet.add(5).add('some text'); // можно делать цепочки
+
+console.log(mySet);
+// Set [1, 5, "some text"]
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.add', 'Set.prototype.add')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.add', 'Set.prototype.add')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.add")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("Set.prototype.delete()")}}</li>
+ <li>{{jsxref("Set.prototype.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/clear/index.html b/files/ru/web/javascript/reference/global_objects/set/clear/index.html
new file mode 100644
index 0000000000..376c848719
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/clear/index.html
@@ -0,0 +1,74 @@
+---
+title: Set.prototype.clear()
+slug: Web/JavaScript/Reference/Global_Objects/Set/clear
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - set
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/clear
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>clear()</strong></code> удаляет все элементы из объекта <code>Set</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.clear();</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_clear">Использование метода <code>clear</code></h3>
+
+<pre class="brush: js">var mySet = new Set();
+mySet.add(1);
+mySet.add('foo');
+
+mySet.size; // 2
+mySet.has('foo'); // true
+
+mySet.clear();
+
+mySet.size; // 0
+mySet.has('bar') // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.clear', 'Set.prototype.clear')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.clear', 'Set.prototype.clear')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.clear")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("Set.prototype.delete()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..3ba75646a8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/delete/index.html
@@ -0,0 +1,93 @@
+---
+title: Set.prototype.delete()
+slug: Web/JavaScript/Reference/Global_Objects/Set/delete
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/delete
+---
+<div>{{JSRef}}</div>
+
+<div>Метод <code><strong>delete()</strong></code> удаляет уникальный элемент из объекта <code>Set</code>.</div>
+
+<div></div>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-delete.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.delete(value);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Обязательный. Значение элемента для удаления из объекта <code>Set</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><code>true</code>, если элемент был успешно удален из объекта <code>Set</code>, иначе <code>false</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_delete">Использование метода <code>delete</code></h3>
+
+<pre class="brush: js">var mySet = new Set();
+mySet.add('foo');
+
+mySet.delete('bar'); // Вернет false. Отсутсвует элемент "bar" для удаления.
+mySet.delete('foo'); // Вернет true. Успешно удален.
+
+mySet.has('foo'); // Вернет false. Элемент "foo" больше не присутствует.
+</pre>
+
+<p>Давайте проверим как удалить Object из Set.</p>
+
+<pre class="brush: js">var setObj = new Set(); // Создаем новый Set.
+
+setObj.add({x: 10, y: 20}); // Добавляем объект в набор.
+
+setObj.add({x: 20, y: 30}); // Добавляем объект в набор.
+
+// Удаляем любой point с `x &gt; 10`.
+setObj.forEach(function(point){
+ if(point.x &gt; 10){
+ setObj.delete(point)
+ }
+})
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.delete', 'Set.prototype.delete')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.delete', 'Set.prototype.delete')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.delete")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("Set.prototype.clear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/entries/index.html b/files/ru/web/javascript/reference/global_objects/set/entries/index.html
new file mode 100644
index 0000000000..52184bd79a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/entries/index.html
@@ -0,0 +1,71 @@
+---
+title: Set.prototype.entries()
+slug: Web/JavaScript/Reference/Global_Objects/Set/entries
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/entries
+---
+<div>{{JSRef}}</div>
+
+<p>Метод  <code><strong>entries()</strong></code> возвращает новый <strong><code><a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators">Итератор</a></code></strong>, который содержит массив <strong><code>[значение, значение]</code></strong> для каждого элемента в объекте <code>Set</code> в порядке их добавления. Для объекта <code>Set</code> не существует ключа <code>key</code>, как в объекте <code>Map</code>. Тем не менее, чтобы API было схож с объектом <code>Map</code>, каждая <em>запись</em> содержит значение как в <em>ключе,</em> так и в <em>значении</em>, возвращая массив <code>[значение, значение]</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-entries.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.entries()</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый <code>Итератор</code>, который содержит массив <code>[значение, значение]</code> для каждого элемента, полученного в <code>Set</code> в порядке их добавления. </p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_entries">Использование <code>entries()</code></h3>
+
+<pre class="brush:js">var mySet = new Set();
+mySet.add('foobar');
+mySet.add(1);
+mySet.add('baz');
+
+var setIter = mySet.entries();
+
+console.log(setIter.next().value); // ["foobar", "foobar"]
+console.log(setIter.next().value); // [1, 1]
+console.log(setIter.next().value); // ["baz", "baz"]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.entries', 'Set.prototype.entries')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первоначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.entries', 'Set.prototype.entries')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.entries")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set.prototype.keys()")}}</li>
+ <li>{{jsxref("Set.prototype.values()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..5ed212666b
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/foreach/index.html
@@ -0,0 +1,110 @@
+---
+title: Set.prototype.forEach()
+slug: Web/JavaScript/Reference/Global_Objects/Set/forEach
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/forEach
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>forEach()</strong></code> выполняет функцию по одному разу для каждого элемента из <code>Set</code> в порядке их расположения.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-foreach.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>mySet</em>.forEach(<em>callback</em>[, <var>thisArg</var>]<code>)</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функция, которая будет выполнена для каждого элемента, принимает три параметра:</dd>
+ <dd>
+ <dl>
+ <dt><code>currentValue</code>, <code>currentKey</code></dt>
+ <dd>Текущий элемент из <code>Set</code>. Т.к. в <code>Set</code> нет ключей,  в каждом будет лежать value.</dd>
+ <dt><code>set</code></dt>
+ <dd>Сам объект <code>Set</code> для которого был вызван <code>forEach()</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code></dt>
+ <dd>Значение, используемое как <code>this</code> в ходе выполнения <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>forEach()</code> выполняет <code>callback</code> по одному разу для каждого значения, которое находится в объекте <code>Set</code>. Функция не будет выполняться для значений, которые были удалены. Тем не менее функция выполнится с элементами, значение которых <code>undefined</code>.</p>
+
+<p><code>callback</code> вызывается с <strong>тремя аргументами</strong>:</p>
+
+<ul>
+ <li><strong>значение элемента</strong></li>
+ <li><strong>ключ элемента</strong></li>
+ <li><strong><code>Set</code> объект обхода</strong></li>
+</ul>
+
+<p>В объектах типа <code>Set</code> нет ключей, поэтому оба первых аргумента принимают <strong>значение</strong> содержащееся в  {{jsxref("Set")}}. Это делает метод  <code>forEach()</code> для объекта Set совместимым с методами <code>forEach()</code> других объектов, таких как {{jsxref("Map.foreach", "Map")}} и {{jsxref("Array.forEach","Array")}}.</p>
+
+<p><code><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Если аргумент </span></font>thisArg</code> был передан в <code>forEach()</code>, то он будет передан в  <code>callback</code> , во время исполнения, для использование его в качестве <code>this</code>.  Иначе в <code>this</code> будет хранится значение <code>undefined</code>.  Значение <code>this</code> используемое в  <code>callback</code> определено согласно <a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">с обычными правилами определения  <code>this</code> используемого функцией</a> </p>
+
+<p>Каждое значение используется только один раз, исключая те случаи, когда оно было удалено и передобавлено до того, как <code>forEach()</code> завершился. <code>callback</code> не будет выполнена для элементов, которые были удалены до их использования. Новые значения, которые были добавлены до того как <code>forEach()</code> завершился будут использованы.</p>
+
+<p><code>forEach()</code> выполняет <code>callback</code> однажды для каждого элемента из объекта <code>Set</code>; Он не возвращает никакого значения.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Содержимое_объекта_Set">Содержимое объекта <code>Set</code> </h3>
+
+<p>Приведенный код показывает состояние каждого элемента в объекте <code>Set</code>:</p>
+
+<pre class="brush:js">function logSetElements(value1, value2, set) {
+ console.log('s[' + value1 + '] = ' + value2);
+}
+
+new Set(['foo', 'bar', undefined]).forEach(logSetElements);
+
+// logs:
+// "s[foo] = foo"
+// "s[bar] = bar"
+// "s[undefined] = undefined"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.foreach', 'Set.prototype.forEach')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_в_браузерах">Совместимость в браузерах</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.forEach")}}</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Map.prototype.forEach()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/has/index.html b/files/ru/web/javascript/reference/global_objects/set/has/index.html
new file mode 100644
index 0000000000..45a5de9131
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/has/index.html
@@ -0,0 +1,91 @@
+---
+title: Set.prototype.has()
+slug: Web/JavaScript/Reference/Global_Objects/Set/has
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/has
+---
+<div>{{JSRef}}</div>
+
+<p>Метод  <code><strong>has()</strong></code> возвращает логическое значение, показывающее, существует ли элемент с указанным значением в объекте  <code>Set</code> или нет.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-has.html")}}</div>
+
+
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.has(value);</code></pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Required. The value to test for presence in the <code>Set</code> object.</dd>
+</dl>
+
+<h3 id="Return_value">Return value</h3>
+
+<dl>
+ <dt>Boolean</dt>
+ <dd>
+ <p>Returns <code>true</code> if an element with the specified value exists in the <code>Set</code> object; otherwise <code>false</code>.</p>
+
+ <div class="note">
+ <p><strong>Note:</strong> Technically speaking, <code>has()</code> uses the <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality">sameValueZero</a></code> algorithm to determine whether the given element is found.</p>
+ </div>
+ </dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Using_the_has_method">Using the <code>has</code> method</h3>
+
+<pre class="brush: js">var mySet = new Set();
+mySet.add('foo');
+
+mySet.has('foo'); // returns true
+mySet.has('bar'); // returns false
+
+var set1 = new Set();
+var obj1 = {'key1': 1};
+set1.add(obj1);
+
+set1.has(obj1); // returns true
+set1.has({'key1': 1}); // returns false because they are different object references
+set1.add({'key1': 1}); // now set1 contains 2 entries
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.has', 'Set.prototype.has')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.has', 'Set.prototype.has')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.has")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("Set.prototype.add()")}}</li>
+ <li>{{jsxref("Set.prototype.delete()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/index.html b/files/ru/web/javascript/reference/global_objects/set/index.html
new file mode 100644
index 0000000000..0233c7fcb5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/index.html
@@ -0,0 +1,242 @@
+---
+title: Set
+slug: Web/JavaScript/Reference/Global_Objects/Set
+tags:
+ - ECMAScript6
+ - JavaScript
+ - set
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Global_Objects/Set
+---
+<div>{{JSRef("Global_Objects", "Set")}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p>Объекты <strong><code>Set</code></strong> позволяют вам сохранять <em>уникальные</em> значения любого типа, как {{Glossary("Primitive", "примитивы")}}, так и другие типы объектов.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"> new Set([iterable]);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>iterable</dt>
+ <dd>При передаче <a href="/ru/docs/Web/JavaScript/Reference/Statements/for...of">итерируемого объекта</a>, все его элементы будут добавлены в новый Set. Иначе (или при <code>null</code>) новый <code>Set</code> будет пуст.</dd>
+ <dt>
+ <h3 id="Возвращает">Возвращает</h3>
+ </dt>
+ <dd>
+ <p>Новый <code>Set</code> объект.</p>
+ </dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объекты <code>Set</code> представляют коллекции значений, по которым вы можете выполнить обход в порядке вставки элементов. Значение элемента в <code>Set</code> может присутствовать <strong>только в одном экземпляре</strong>, что обеспечивает его уникальность в коллекции <code>Set</code>.</p>
+
+<h3 id="Сравнение_значений">Сравнение значений</h3>
+
+<p>Поскольку каждое значение в <code>Set</code> должно быть уникальным, сравнение значений основано на алгоритме "подобное значение": <code>NaN</code> равно <code>NaN</code> (несмотря на то, что <code>NaN !== NaN</code>); все другие значения рассматриваются равными исходя из семантики оператора строго равенства ===. В ранних версиях черновика ECMAScript 6 <code>-0</code> и <code>+0</code> считались разными (несмотря на то, что <code>-0 === +0</code>), это было изменено в последующих версиях и адаптировано в Gecko 29 {{geckoRelease("29")}} ({{bug("952870")}}) и <a href="https://code.google.com/p/v8/issues/detail?id=3069">последней ночной сборке Chrome</a>. <code>NaN</code> и <code>undefined</code> также могут сохраняться в <code>Set</code>.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>Set.length</code></dt>
+ <dd>Значение свойства <code>length</code> всегда равно 0.</dd>
+ <dd>Чтобы узнать количество элементов в <code>Set</code>, используйте {{jsxref("Set.prototype.size")}}.</dd>
+ <dt>{{jsxref("Set.@@species", "get Set[@@species]")}}</dt>
+ <dd>Функция-конструктор, которая используется для создания производных объектов.</dd>
+ <dt>{{jsxref("Set.prototype")}}</dt>
+ <dd>Представляет прототип конструктора <code>Set</code>. Позволяет добавлять свойства всем объектам типа <code>Set</code>.</dd>
+</dl>
+
+<h2 id="Set_instances" name="Set_instances">Экземпляры <code>Set</code></h2>
+
+<p>Все экземпляры <code>Set</code> унаследованы от {{jsxref("Set.prototype")}}.</p>
+
+<h3 id="Свойства">Свойства</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/Set/prototype','Properties')}}</p>
+
+<h3 id="Методы">Методы</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/Set/prototype','Methods')}}</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_объекта_Set">Использование объекта <code>Set</code></h3>
+
+<pre class="brush: js">var mySet = new Set();
+
+mySet.add(1); // Set { 1 }
+mySet.add(5); // Set { 1, 5 }
+mySet.add(5); // Set { 1, 5 }
+mySet.add("some text"); // Set { 1, 5, 'some text' }
+var o = {a: 1, b: 2};
+mySet.add(o);
+
+mySet.add({a: 1, b: 2}); // переменная o связана с другим объектом, поэтому данная строка также сработает
+
+mySet.has(1); // true
+mySet.has(3); // false, 3 не было добавлено в set
+mySet.has(5); // true
+mySet.has(Math.sqrt(25)); // true
+mySet.has("Some Text".toLowerCase()); // true
+mySet.has(o); // true
+
+mySet.size; // 5
+
+mySet.delete(5); // удаляет 5 из set
+mySet.has(5); // false, 5 было удалено
+
+mySet.size; // 4, было удалено одно значение
+console.log(mySet); // Set {1, 'some text', Object {a: 1, b: 2}, Object {a: 1, b: 2}}</pre>
+
+<h3 id="Обход_Set">Обход Set</h3>
+
+<pre class="brush: js">// обход элементов set
+// выведет элементы по порядку: 1, "some text", {"a": 1, "b": 2}
+for (let item of mySet) console.log(item);
+
+// выведет элементы по порядку: 1, "some text", {"a": 1, "b": 2}
+for (let item of mySet.keys()) console.log(item);
+
+// выведет элементы по порядку: 1, "some text", {"a": 1, "b": 2}
+for (let item of mySet.values()) console.log(item);
+
+// выведет элементы по порядку: 1, "some text", {"a": 1, "b": 2}
+//(key и value в данном случае одинаковы)
+for (let [key, value] of mySet.entries()) console.log(key);
+
+// преобразует Set в Array
+var myArr = Array.from(mySet); // [1, "some text", {"a": 1, "b": 2}]
+
+// следующее будет работать при запуске с HTML документом
+mySet.add(document.body);
+mySet.has(document.querySelector("body")); // true
+
+// преобразования из Array в Set и обратно
+mySet2 = new Set([1,2,3,4]);
+mySet2.size; // 4
+[...mySet2]; // [1,2,3,4]
+
+// пересечение можно представить следующим образом
+var intersection = new Set([...set1].filter(x =&gt; set2.has(x)));
+
+// разность можно представить следующим образом
+var difference = new Set([...set1].filter(x =&gt; !set2.has(x)));
+
+// Обход элементов set при помощи forEach
+mySet.forEach(function(value) {
+ console.log(value);
+});
+
+// 1
+// 2
+// 3
+// 4
+</pre>
+
+<h3 id="Реализация_простых_операций">Реализация простых операций</h3>
+
+<pre class="brush: js"><code>function isSuperset(set, subset) {
+ for (var elem of subset) {
+ if (!set.has(elem)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function union(setA, setB) {
+ var _union = new Set(setA);
+ for (var elem of setB) {
+ _union.add(elem);
+ }
+ return _union;
+}
+
+function intersection(setA, setB) {
+ var _intersection = new Set();
+ for (var elem of setB) {
+ if (setA.has(elem)) {
+ _intersection.add(elem);
+ }
+ }
+ return _intersection;
+}
+
+function difference(setA, setB) {
+ var _difference = new Set(setA);
+ for (var elem of setB) {
+ _difference.delete(elem);
+ }
+ return _difference;
+}
+
+// Например
+var setA = new Set([1, 2, 3, 4]),
+ setB = new Set([2, 3]),
+ setC = new Set([3, 4, 5, 6]);
+
+isSuperset(setA, setB); // =&gt; true
+union(setA, setC); // =&gt; Set [1, 2, 3, 4, 5, 6]
+intersection(setA, setC); // =&gt; Set [3, 4]
+difference(setA, setC); // =&gt; Set [1, 2]</code>
+</pre>
+
+<h3 id="Взаимоотношения_с_объектом_Array">Взаимоотношения с объектом <code>Array</code></h3>
+
+<pre class="brush: js">var myArray = ["value1", "value2", "value3"];
+
+// Используйте конструктор Set для преобразования Array в Set
+var mySet = new Set(myArray);
+
+mySet.has("value1"); // вернёт true
+
+// Используйте spread оператор для преобразования Set в Array
+console.log([...mySet]); // Отобразит тот же массив, что и myArray
+</pre>
+
+<h3 id="Взаимоотношения_со_String">Взаимоотношения со <code>String</code></h3>
+
+<pre class="brush: js"><code>var text = 'India';
+
+var mySet = new Set(text); // Set ['I', 'n', 'd', 'i', 'a']
+mySet.size; // 5</code>
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-set-objects', 'Set')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set-objects', 'Set')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.Set")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakSet")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/prototype/index.html b/files/ru/web/javascript/reference/global_objects/set/prototype/index.html
new file mode 100644
index 0000000000..c546a1997f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/prototype/index.html
@@ -0,0 +1,80 @@
+---
+title: Set.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Set/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/Set
+---
+<div>{{JSRef}}</div>
+
+<p>The <code><strong>Set</strong></code><strong><code>.prototype</code></strong> property represents the prototype for the {{jsxref("Set")}} constructor.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Description">Description</h2>
+
+<p>{{jsxref("Set")}} instances inherit from {{jsxref("Set.prototype")}}. You can use the constructor's prototype object to add properties or methods to all <code>Set</code> instances.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Set.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создала прототип экземпляра. Это функция {{jsxref("Set")}} по умолчанию.</dd>
+ <dt>{{jsxref("Set.prototype.size")}}</dt>
+ <dd>Возвращает количество элементов в объекте <code>Set</code>.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Set.add", "Set.prototype.add(value)")}}</dt>
+ <dd>Добавляет новый элемент с переданным значением в <code>Set</code> объект. Возвращает <code>Set</code> объект.</dd>
+ <dt>{{jsxref("Set.prototype.clear()")}}</dt>
+ <dd>Removes all elements from the <code>Set</code> object.</dd>
+ <dt>{{jsxref("Set.delete", "Set.prototype.delete(value)")}}</dt>
+ <dd>Removes the element associated to the <code>value</code> and returns the value that <code>Set.prototype.has(value)</code> would have previously returned. <code>Set.prototype.has(value)</code> will return <code>false</code> afterwards.</dd>
+ <dt>{{jsxref("Set.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains<strong> an array of <code>[value, value]</code></strong> for each element in the <code>Set</code> object, in insertion order. This is kept similar to the <code>Map</code> object, so that each entry has the same value for its <em>key</em> and <em>value</em> here.</dd>
+ <dt>{{jsxref("Set.forEach", "Set.prototype.forEach(callbackFn[, thisArg])")}}</dt>
+ <dd>Calls <code>callbackFn</code> once for each value present in the <code>Set</code> object, in insertion order. If a <code>thisArg</code> parameter is provided to <code>forEach</code>, it will be used as the <code>this</code> value for each callback.</dd>
+ <dt>{{jsxref("Set.has", "Set.prototype.has(value)")}}</dt>
+ <dd>Returns a boolean asserting whether an element is present with the given value in the <code>Set</code> object or not.</dd>
+ <dt>{{jsxref("Set.prototype.keys()")}}</dt>
+ <dd>Is the same function as the <strong><code>values()</code></strong> function and returns a new <code>Iterator</code> object that contains the values for each element in the <code>Set</code> object in insertion order.</dd>
+ <dt>{{jsxref("Set.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains the <strong>values</strong> for each element in the <code>Set</code> object in insertion order.</dd>
+ <dt>{{jsxref("Set.prototype.@@iterator()", "Set.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains the <strong>values</strong> for each element in the <code>Set</code> object in insertion order.</dd>
+</dl>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype', 'Set.prototype')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype', 'Set.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.prototype")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..66e1d0108e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/set/index.html
@@ -0,0 +1,72 @@
+---
+title: Set() конструктор
+slug: Web/JavaScript/Reference/Global_Objects/Set/Set
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/Set
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary"><strong>Конструктор Set</strong> позволяет создавать объекты Set, в которых хранятся уникальные значения любого типа, будь то <a href="https://developer.mozilla.org/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Primitive">примитивные значения</a> или ссылки на объекты.</span></p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-constructor.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">new Set([<var>iterable</var>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code><var>iterable</var></code> {{optional_inline}}</dt>
+ <dd>
+ <p>Если передается <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/for...of">итеративный объект</a>, все его элементы будут добавлены в новый Set.</p>
+
+ <p>Если вы не укажете этот параметр или его значение равно нулю, новый набор будет пустым.</p>
+ </dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый объект Set.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_объекта_Set">Использование объекта Set</h3>
+
+<pre class="brush: js notranslate">let mySet = new Set()
+
+mySet.add(1) // Set [ 1 ]
+mySet.add(5) // Set [ 1, 5 ]
+mySet.add(5) // Set [ 1, 5 ]
+mySet.add('какой-то текст') // Set [ 1, 5, 'какой-то текст' ]
+let o = {a: 1, b: 2}
+mySet.add(o)</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set-constructor', 'Set constructor')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.Set")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+</ul>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Set">Set</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/size/index.html b/files/ru/web/javascript/reference/global_objects/set/size/index.html
new file mode 100644
index 0000000000..5b530d7331
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/size/index.html
@@ -0,0 +1,68 @@
+---
+title: Set.prototype.size
+slug: Web/JavaScript/Reference/Global_Objects/Set/size
+tags:
+ - ECMAScript6
+ - JavaScript
+ - set
+ - Свойство
+ - прототип
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/size
+---
+<div>{{JSRef}}</div>
+
+<p>Метод доступа <code><strong>size</strong></code> возвращает количество (уникальных) элементов в объекте {{jsxref("Set")}}</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-size.html")}}</div>
+
+
+
+<h2 id="Описание">Описание</h2>
+
+<p>Значение <code>size</code> является целым числом, которое показывает как много записей имеет объект <code>Set</code>. Функция для установки <code>size</code> равна <code>undefined</code>; вы не можете изменить это свойство.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_size">Использование <code>size</code></h3>
+
+<pre class="brush:js">var mySet = new Set();
+mySet.add(1);
+mySet.add(5);
+mySet.add('некоторый текст')
+
+mySet.size; // 3
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-get-set.prototype.size', 'Set.prototype.size')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-set.prototype.size', 'Set.prototype.size')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.size")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/set/values/index.html b/files/ru/web/javascript/reference/global_objects/set/values/index.html
new file mode 100644
index 0000000000..115d300b53
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/set/values/index.html
@@ -0,0 +1,72 @@
+---
+title: Set.prototype.values()
+slug: Web/JavaScript/Reference/Global_Objects/Set/values
+translation_of: Web/JavaScript/Reference/Global_Objects/Set/values
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>values()</strong></code> возвращает новый <code>Итератор</code>, который содержит значения для каждого элемента в объекте <code>Set</code> в порядке их добавления.</p>
+
+<p>Метод <strong><code>keys()</code></strong> является синонимом этого метода (для схожести с объектами {{jsxref("Map")}}). Он ведёт себя точно так же и возвращает <strong>значения</strong> элементов <code>Set</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/set-prototype-values.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>mySet</em>.values();
+</code></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый <code><strong>Итератор</strong></code>, содержащий значения для каждого элемента <code>Set</code>, в порядке их добавления.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Ипсользование_values()">Ипсользование <code>values()</code></h3>
+
+<pre class="brush:js">var mySet = new Set();
+mySet.add('foo');
+mySet.add('bar');
+mySet.add('baz');
+
+var setIter = mySet.values();
+
+console.log(setIter.next().value); // "foo"
+console.log(setIter.next().value); // "bar"
+console.log(setIter.next().value); // "baz"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-set.prototype.values', 'Set.prototype.values')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-set.prototype.values', 'Set.prototype.values')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Set.values")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set.prototype.entries()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html
new file mode 100644
index 0000000000..884ab88fa1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html
@@ -0,0 +1,209 @@
+---
+title: SharedArrayBuffer
+slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
+translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>SharedArrayBuffer</code></strong> используется для создания разделенного буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту {{jsxref("ArrayBuffer")}}, но могут быть использованы для создания обзора на разделенную память. В отличие от <code>ArrayBuffer</code>, <code>SharedArrayBuffer</code> не может быть отсоединен.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new SharedArrayBuffer(length)
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>length</code></dt>
+ <dd>Размер, в байтах, для создания буферного массива.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новый объект <code>SharedArrayBuffer</code> указаной длины. Его содержимое после инициализаци равно 0.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<h3 id="Распределение_и_разделение_память">Распределение и разделение память</h3>
+
+<p>Для разделения памяти с помощью объекта {{jsxref("SharedArrayBuffer")}} между одним агентом в кластере и другим (агент может быть как основной программой web-страницы, так и одним из web-workers), используются <code><a href="/en-US/docs/Web/API/Worker/postMessage">postMessage</a></code> и <a href="/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm">structured cloning</a>.</p>
+
+<p>Алгоритм структурированного клонирования принимает <code>SharedArrayBuffers</code> и <code>TypedArrays,</code> отображенный в <code>SharedArrayBuffers</code>. В обоих случаях, объект  <code>SharedArrayBuffer</code> передается получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для {{jsxref("ArrayBuffer")}}). Однако, блок общих данных, на который ссылаются оба объекта <code>SharedArrayBuffer, </code>это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.</p>
+
+<pre class="brush: js">var sab = new SharedArrayBuffer(1024);
+worker.postMessage(sab);
+</pre>
+
+<h3 id="Обновление_и_синхронизация_разделенной_памяти_с_помощью_Атомарных_операций">Обновление и синхронизация разделенной памяти с помощью Атомарных операций</h3>
+
+<p>Разделенная память может быть создана и изменена одновременно в  workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы {{jsxref("Атомарные", "атомарные", "", 1)}} операции .</p>
+
+<h3 id="API_принимающие_объекты_SharedArrayBuffer">API, принимающие объекты <code>SharedArrayBuffer</code></h3>
+
+<ul>
+ <li>{{domxref("WebGLRenderingContext.bufferData()")}}</li>
+ <li>{{domxref("WebGLRenderingContext.bufferSubData()")}}</li>
+ <li>{{domxref("WebGL2RenderingContext.getBufferSubData()")}}</li>
+</ul>
+
+<h3 id="Конструкции_требуют_оператор_new">Конструкции требуют оператор <code>new</code></h3>
+
+<p>Конструторы <code>SharedArrayBuffer</code> необходимо вызывать с помощью оператора {{jsxref("Operators/new", "new")}}. Вызов конструктора <code>SharedArrayBuffer</code> как функции без указания <code>new</code>, вызовет ошибку {{jsxref("TypeError")}}.</p>
+
+<pre class="brush: js example-bad">var sab = SharedArrayBuffer(1024);
+// TypeError: вызов встроенного конструктора SharedArrayBuffer
+// без new запрещено</pre>
+
+<pre class="brush: js example-good">var sab = new SharedArrayBuffer(1024);</pre>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>SharedArrayBuffer.length</code></dt>
+ <dd>Длина конструктора <code>SharedArrayBuffer,</code> чье значение равно 1.</dd>
+ <dt>{{jsxref("SharedArrayBuffer.prototype")}}</dt>
+ <dd>Позволяет дополнительные свойства для всех объектов <code>SharedArrayBuffer</code>.</dd>
+</dl>
+
+<h2 id="SharedArrayBuffer_объект_prototype"><code>SharedArrayBuffer</code> объект prototype</h2>
+
+<p>Все экземпляры <code>SharedArrayBuffer</code> наследуются от {{jsxref("SharedArrayBuffer.prototype")}}.</p>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Properties')}}</p>
+
+<h3 id="Методы">Методы</h3>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Methods')}}</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}</td>
+ <td>{{Spec2('ES8')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}} [2]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ <tr>
+ <td><code>slice()</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("52")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ <tr>
+ <td>SAB in DataView</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("53")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("55")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ <tr>
+ <td><code>slice()</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("52")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ <tr>
+ <td>SAB in DataView</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("53")}} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("10.1")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] Enabled by default in Firefox 55. In Firefox version 46 until version 54, this feature is disabled by a preference setting (in about:config, set <code>javascript.options.shared_memory</code> to <code>true</code>). </p>
+
+<p>[2] The implementation is under development and needs these runtime flags: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Atomics")}}</li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li>
+ <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– a simple library providing synchronization and work distribution abstractions.</li>
+ <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – a brief tutorial</a></li>
+ <li>
+ <p><a href="https://hacks.mozilla.org/2016/05/a-taste-of-javascripts-new-parallel-primitives/">A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks</a></p>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/@@iterator/index.html b/files/ru/web/javascript/reference/global_objects/string/@@iterator/index.html
new file mode 100644
index 0000000000..a493783be3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/@@iterator/index.html
@@ -0,0 +1,131 @@
+---
+title: 'String.prototype[@@iterator]()'
+slug: Web/JavaScript/Reference/Global_Objects/String/@@iterator
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - Iterator
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/@@iterator
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>[@@iterator]()</code></strong> возвращает новый объект итератора <code>Iterator</code>, который проходит по кодовым точкам строкового значения, возвращая каждую кодовую точку в виде строкового значения.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>string</var>[Symbol.iterator]</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_.5B.40.40iterator.5D" name="Example:_Using_.5B.40.40iterator.5D()">Пример: использование метода <code>[@@iterator]()</code></h3>
+
+<pre class="brush:js notranslate">var string = 'A\uD835\uDC68';
+
+var strIter = string[Symbol.iterator]();
+
+console.log(strIter.next().value); // "A"
+console.log(strIter.next().value); // "\uD835\uDC68"
+</pre>
+
+<h3 id="Example_Using_.5B.40.40iterator.5D_with_for..of" name="Example:_Using_.5B.40.40iterator.5D()_with_for..of">Пример: использование метода <code>[@@iterator]()</code> вместе с циклом <code>for..of</code></h3>
+
+<pre class="brush:js notranslate">var string = 'A\uD835\uDC68B\uD835\uDC69C\uD835\uDC6A';
+
+for (var v of string) {
+ console.log(v);
+}
+// "A"
+// "\uD835\uDC68"
+// "B"
+// "\uD835\uDC69"
+// "C"
+// "\uD835\uDC6A"
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype-@@iterator', 'String.prototype[@@iterator]()')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("17")}} (<code>.iterator</code>)<br>
+ {{CompatGeckoDesktop("27")}} (<code>["@@iterator"]</code>)<br>
+ {{CompatGeckoDesktop("36")}} (<code>[Symbol.iterator]</code>)</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("17")}} (<code>.iterator</code>)<br>
+ {{CompatGeckoMobile("27")}} (<code>["@@iterator"]</code>)<br>
+ {{CompatGeckoMobile("36")}} (<code>[Symbol.iterator]</code>)</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<ul>
+ <li>С Gecko 17 {{geckoRelease("17")}} по Gecko 26 {{geckoRelease("26")}} вместо {{jsxref("Global_Objects/Symbol", "символа", "", 1)}} <code>@@iterator</code> использовалось свойство <code>iterator</code> ({{bug(907077)}}), а с Gecko 27 {{geckoRelease("27")}} по Gecko 35 {{geckoRelease("35")}} — строка-заменитель <code>"@@iterator"</code> ({{bug("918828")}}).</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/anchor/index.html b/files/ru/web/javascript/reference/global_objects/string/anchor/index.html
new file mode 100644
index 0000000000..43b5161a75
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/anchor/index.html
@@ -0,0 +1,131 @@
+---
+title: String.prototype.anchor()
+slug: Web/JavaScript/Reference/Global_Objects/String/anchor
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/anchor
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>anchor()</code></strong> создаёт якорный HTML-элемент {{HTMLElement("a")}}, используемый в качестве цели гиперссылки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.anchor(<var>name</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Строка, представляющая атрибут <code>name</code> создаваемого тега.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>anchor()</code> используется для программного создания и отображения якоря в документе.</p>
+
+<p>Текстовая строка представляет из себя буквальный текст, который ва хотите показать пользователю. Строковый параметр <code>name</code> представляет атрибут <code>name</code> элемента {{HTMLElement("a")}}.</p>
+
+<p>Якоря, созданные методом <code>anchor()</code>, становятся элементами в массиве {{domxref("document.anchors")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_anchor" name="Example:_Using_anchor">Пример: использование метода <code>anchor()</code></h3>
+
+<pre class="brush: js">var myString = 'Оглавление';
+
+document.body.innerHTML = myString.anchor('contents_anchor');
+</pre>
+
+<p>приведёт к выводу следующего HTML:</p>
+
+<pre class="brush: html">&lt;a name="contents_anchor"&gt;Оглавление&lt;/a&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.anchor', 'String.prototype.anchor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<p>Начиная с версии {{gecko("17")}}, символ <code>"</code> (кавычка) в строках, передаваемых в качестве параметра <code>name</code>, заменяется его HTML-мнемоникой <code>&amp;quot;</code>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.link()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/big/index.html b/files/ru/web/javascript/reference/global_objects/string/big/index.html
new file mode 100644
index 0000000000..b0172de18a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/big/index.html
@@ -0,0 +1,112 @@
+---
+title: String.prototype.big()
+slug: Web/JavaScript/Reference/Global_Objects/String/big
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/big
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>big()</code></strong> создаёт HTML-элемент {{HTMLElement("big")}}, заставляющий строку отображаться большим шрифтом.</p>
+<div class="note">
+ <p><strong>Примечание по использованию:</strong> элемент &lt;big&gt; был удалён из <a href="/ru/docs/Web/Guide/HTML/HTML5">HTML5</a> и больше не должен использоваться. Вместо него веб-разработчикам следует использовать свойства <a href="/ru/docs/Web/CSS">CSS</a>.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.big()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>big()</code> заключает строку в тег <code>&lt;big&gt;</code>: <code>"&lt;big&gt;str&lt;/big&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_big" name="Example:_Using_big">Пример: использование метода <code>big()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения размера строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+console.log(worldString.small()); // &lt;small&gt;Привет, мир&lt;/small&gt;
+console.log(worldString.big()); // &lt;big&gt;Привет, мир&lt;/big&gt;
+console.log(worldString.fontsize(7)); // &lt;fontsize=7&gt;Привет, мир&lt;/fontsize&gt;
+</pre>
+<p>При помощи объекта {{domxref("HTMLElement.style", "element.style")}} вы можете получить значение атрибута <code>style</code> элемента и управлять им более обобщённым способом, например:</p>
+<pre class="brush: js">document.getElementById('yourElemId').style.fontSize = '2em';
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.big', 'String.prototype.big')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.fontsize()")}}</li>
+ <li>{{jsxref("String.prototype.small()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/blink/index.html b/files/ru/web/javascript/reference/global_objects/string/blink/index.html
new file mode 100644
index 0000000000..4cb5218f7f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/blink/index.html
@@ -0,0 +1,117 @@
+---
+title: String.prototype.blink()
+slug: Web/JavaScript/Reference/Global_Objects/String/blink
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/blink
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>blink()</code></strong> создаёт HTML-элемент {{HTMLElement("blink")}}, заставляющий строку мерцать.</p>
+<div class="warning">
+ <p><strong>Предупреждение:</strong> мерцающий текст осуждается некоторыми стандартами доступности. Сам элемент <code>&lt;blink&gt;</code> является нестандартным и устаревшим!</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.blink()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>blink()</code> заключает строку в тег <code>&lt;blink&gt;</code>: <code>"&lt;blink&gt;str&lt;/blink&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_blink" name="Example:_Using_blink">Пример: использование метода <code>blink()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения форматирования строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+document.write(worldString.blink());
+document.write(worldString.bold());
+document.write(worldString.italics());
+document.write(worldString.strike());
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">&lt;blink&gt;Привет, мир&lt;/blink&gt;
+&lt;b&gt;Привет, мир&lt;/b&gt;
+&lt;i&gt;Привет, мир&lt;/i&gt;
+&lt;strike&gt;Привет, мир&lt;/strike&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.blink', 'String.prototype.blink')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.bold()")}}</li>
+ <li>{{jsxref("String.prototype.italics()")}}</li>
+ <li>{{jsxref("String.prototype.strike()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/bold/index.html b/files/ru/web/javascript/reference/global_objects/string/bold/index.html
new file mode 100644
index 0000000000..255ff7623c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/bold/index.html
@@ -0,0 +1,114 @@
+---
+title: String.prototype.bold()
+slug: Web/JavaScript/Reference/Global_Objects/String/bold
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/bold
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>bold()</code></strong> создаёт HTML-элемент {{HTMLElement("b")}}, заставляющий строку отображаться полужирным шрифтом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.bold()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>bold()</code> заключает строку в тег <code>&lt;b&gt;</code>: <code>"&lt;b&gt;str&lt;/b&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_bold" name="Example:_Using_bold">Пример: использование метода <code>bold()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения форматирования строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+document.write(worldString.blink());
+document.write(worldString.bold());
+document.write(worldString.italics());
+document.write(worldString.strike());
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">&lt;blink&gt;Привет, мир&lt;/blink&gt;
+&lt;b&gt;Привет, мир&lt;/b&gt;
+&lt;i&gt;Привет, мир&lt;/i&gt;
+&lt;strike&gt;Привет, мир&lt;/strike&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.bold', 'String.prototype.bold')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.blink()")}}</li>
+ <li>{{jsxref("String.prototype.italics()")}}</li>
+ <li>{{jsxref("String.prototype.strike()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/charat/index.html b/files/ru/web/javascript/reference/global_objects/string/charat/index.html
new file mode 100644
index 0000000000..c86dae26aa
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/charat/index.html
@@ -0,0 +1,270 @@
+---
+title: String.prototype.charAt()
+slug: Web/JavaScript/Reference/Global_Objects/String/charAt
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/charAt
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>charAt()</code></strong> возвращает указанный символ из строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.charAt(<var>index</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>index</code></dt>
+ <dd>Целое число от 0 до длины строки минус 1.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Символы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке <code>stringName</code> равен <code>stringName.length - 1</code>. Если предоставленный вами параметр <code>index</code> выходит за пределы этого диапазона, JavaScript вернёт пустую строку.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Displaying_characters_at_different_locations_in_a_string" name="Example:_Displaying_characters_at_different_locations_in_a_string">Пример: отображение символов из различных позиций строки</h3>
+<p>Следующий пример показывает символы в различных позициях в строке <code>"Дивный новый мир"</code>:</p>
+<pre class="brush: js">var anyString = 'Дивный новый мир';
+
+console.log("Символ по индексу 0 равен '" + anyString.charAt(0) + "'");
+console.log("Символ по индексу 1 равен '" + anyString.charAt(1) + "'");
+console.log("Символ по индексу 2 равен '" + anyString.charAt(2) + "'");
+console.log("Символ по индексу 3 равен '" + anyString.charAt(3) + "'");
+console.log("Символ по индексу 4 равен '" + anyString.charAt(4) + "'");
+console.log("Символ по индексу 5 равен '" + anyString.charAt(5) + "'");
+console.log("Символ по индексу 999 равен '" + anyString.charAt(999) + "'");
+</pre>
+<p>Этот код отобразит следующее:</p>
+<pre class="brush: js">Символ по индексу 0 равен 'Д'
+Символ по индексу 1 равен 'и'
+Символ по индексу 2 равен 'в'
+Символ по индексу 3 равен 'н'
+Символ по индексу 4 равен 'ы'
+Символ по индексу 5 равен 'й'
+Символ по индексу 999 равен ''
+</pre>
+
+<h3 id="Example:_Getting_whole_characters" name="Example:_Getting_whole_characters">Пример: получение целых символов</h3>
+<p>Следующий пример показывает, как обойти строку в цикле, каждый раз гарантированно получая целый символ, даже если строка содержит символы, не помещающиеся на Базовую многоязыковую плоскость (БМП).</p>
+<pre class="brush: js">var str = 'A \uD87E\uDC04 Z'; // Также можно использовать не-БМП символы напрямую
+for (var i = 0, chr; i &lt; str.length; i++) {
+ if ((chr = getWholeChar(str, i)) === false) {
+ continue;
+ }
+ // Поместите эти строки в самое начало каждого цикла, передавая в функцию строку
+ // и текущую итерацию; возвращаемая переменная будут представлять
+ // отдельный символ
+
+ console.log(chr);
+}
+
+function getWholeChar(str, i) {
+ var code = str.charCodeAt(i);
+
+ if (isNaN(code)) {
+ return ''; // Позиция не найдена
+ }
+ if (code &lt; 0xD800 || code &gt; 0xDFFF) {
+ return str.charAt(i);
+ }
+
+ // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F,
+ // чтобы трактовать старшую часть суррогатной пары в частной плоскости как
+ // одиночный символ)
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ if (str.length &lt;= (i + 1)) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ var next = str.charCodeAt(i + 1);
+ if (0xDC00 &gt; next || next &gt; 0xDFFF) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ return str.charAt(i) + str.charAt(i + 1);
+ }
+ // Младшая часть суррогатной пары (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF)
+ if (i === 0) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ var prev = str.charCodeAt(i - 1);
+
+ // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую
+ // часть суррогатной пары в частной плоскости как одиночный символ)
+ if (0xD800 &gt; prev || prev &gt; 0xDBFF) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ // Теперь мы можем пропустить младшую часть суррогатной пары,
+ // которую мы уже обработали
+ return false;
+}
+</pre>
+<p>В среде, поддерживающей JavaScript 1.7+ (например, в Firefox), который позволяет деструктуризующее присваивание, можно использовать более лаконичную и более гибкую альтернативу в том смысле, что она автоматически увеличивает счётчик (если символ гарантированно является суррогатной парой).</p>
+<pre class="brush: js">var str = 'A\uD87E\uDC04Z'; // Также можно использовать не-БМП символы напрямую
+for (var i = 0, chr; i &lt; str.length; i++) {
+ [chr, i] = getWholeCharAndI(str, i);
+ // Поместите эту строку в самое начало каждого цикла, передавая в функцию строку
+ // и текущую итерацию; возвращаемый массив будет содержать отдельный символ и
+ // новое значение счётчика цикла 'i' (изменится только при встрече суррогатной пары)
+
+ console.log(chr);
+}
+
+function getWholeCharAndI(str, i) {
+ var code = str.charCodeAt(i);
+
+ if (isNaN(code)) {
+ return ''; // Позиция не найдена
+ }
+ if (code &lt; 0xD800 || code &gt; 0xDFFF) {
+ return [str.charAt(i), i]; // Обычный символ, оставляем переменную 'i' неизменной
+ }
+
+ // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F,
+ // чтобы трактовать старшую часть суррогатной пары в частной плоскости как
+ // одиночный символ)
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ if (str.length &lt;= (i + 1)) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ var next = str.charCodeAt(i + 1);
+ if (0xDC00 &gt; next || next &gt; 0xDFFF) {
+ throw 'Старшая часть суррогатной пары без следующей младшей';
+ }
+ return [str.charAt(i) + str.charAt(i + 1), i + 1];
+ }
+ // Младшая часть суррогатной пары (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF)
+ if (i === 0) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ var prev = str.charCodeAt(i - 1);
+
+ // (последнее число можно изменить на 0xDB7F, чтобы трактовать старшую
+ // часть суррогатной пары в частной плоскости как одиночный символ)
+ if (0xD800 &gt; prev || prev &gt; 0xDBFF) {
+ throw 'Младшая часть суррогатной пары без предшествующей старшей';
+ }
+ // Возвращаем следующий символ (и увеличиваем счётчик)
+ return [str.charAt(i + 1), i + 1];
+}
+</pre>
+
+<h3 id="Example:_Fixing_charAt_to_support_non-Basic-Multilingual-Plane_(BMP)_characters" name="Example:_Fixing_charAt_to_support_non-Basic-Multilingual-Plane_(BMP)_characters">Пример: добавление к методу <code>charAt()</code> поддержки символов не в Базовой многоязыковой плоскости (БМП)</h3>
+<p>В то время как пример выше может быть более полезен тем, кто хочет поддерживать символы не в плоскости БМП (поскольку он не требует от вызывающей стороны знания о том, где может встретиться символ из не-БМП), в случае, если кто-то желает <em>выбирать</em> символы по индексу и трактовать суррогатную пару внутри строки как один символ, он может использовать следующий код:</p>
+<pre class="brush: js">function fixedCharAt(str, idx) {
+ var ret = '';
+ str += '';
+ var end = str.length;
+
+ var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ while ((surrogatePairs.exec(str)) != null) {
+ var li = surrogatePairs.lastIndex;
+ if (li - 2 &lt; idx) {
+ idx++;
+ } else {
+ break;
+ }
+ }
+
+ if (idx &gt;= end || idx &lt; 0) {
+ return '';
+ }
+
+ ret += str.charAt(idx);
+
+ if (/[\uD800-\uDBFF]/.test(ret) &amp;&amp; /[\uDC00-\uDFFF]/.test(str.charAt(idx + 1))) {
+ // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары
+ ret += str.charAt(idx + 1);
+ }
+ return ret;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.4', 'String.prototype.charAt')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.charat', 'String.prototype.charAt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("String.prototype.charCodeAt()")}}</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}}</li>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/charcodeat/index.html b/files/ru/web/javascript/reference/global_objects/string/charcodeat/index.html
new file mode 100644
index 0000000000..d5c58899cf
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/charcodeat/index.html
@@ -0,0 +1,205 @@
+---
+title: String.prototype.charCodeAt()
+slug: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
+tags:
+ - JavaScript
+ - Method
+ - Reference
+ - String
+ - Unicode
+translation_of: Web/JavaScript/Reference/Global_Objects/String/charCodeAt
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>charCodeAt()</code></strong> возвращает числовое значение Юникода для символа по указанному индексу (за исключением кодовых точек Юникода, больших 0x10000).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.charCodeAt(<var>index</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>index</code></dt>
+ <dd>Целое число больше, либо равное 0 и меньше длины строки; если параметр не является числом, он устанавливается в 0.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Кодовые точки Юникода простираются в диапазоне от 0 до 1114111 (0x10FFFF). Первые 128 кодовых точек Юникода напрямую отображаются в кодировку ASCII. Информацию по Юникоду смотрите в <a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Unicode">Руководстве по JavaScript</a>.</p>
+
+<p>Обратите внимание, что метод <code>charCodeAt()</code> всегда возвращает значение, меньшее 65536. Так происходит потому, что большие кодовые точки представляются парой (меньших значений) «суррогатных» псевдо-символов, которые используются для составления настоящего символа. Поэтому для того, чтобы получить полный символ для значений символов от 65536 и выше, необходимо получить не только значение <code>charCodeAt(i)</code>, но также значение <code>charCodeAt(i + 1)</code> (как если бы строка состояла из двух букв). Смотрите второй и третий примеры ниже.</p>
+
+<p>Метод <code>charCodeAt()</code> возвращает {{jsxref("Global_Objects/NaN", "NaN")}}, если указанный индекс меньше нуля или больше длины строки.</p>
+
+<p>Обратная совместимость: в более старых версиях (например, в JavaScript 1.2) метод <code>charCodeAt()</code> возвращал число из кодировки ISO-Latin-1 по указанному индексу. Диапазон символов в кодировке ISO-Latin-1 простирается от 0 до 255. Первые 127 чисел напрямую отображаются в кодировку ASCII.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_charCodeAt" name="Example:_Using_charCodeAt">Пример: использование метода <code>charCodeAt()</code></h3>
+
+<p>В следующем примере возвращается число 65, значение Unicode для латинского символа «A».</p>
+
+<pre class="brush: js">'ABC'.charCodeAt(0); // вернёт 65
+</pre>
+
+<h3 id="Example:_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown" name="Example:_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_unknown">Пример: исправление метода <code>charCodeAt()</code> для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке неизвестно</h3>
+
+<p>Эта версия может использоваться в циклах for, даже когда неизвестно, были ли до указанной позиции символы из не-БМП.</p>
+
+<pre class="brush: js">function fixedCharCodeAt(str, idx) {
+ // например, fixedCharCodeAt('\uD800\uDC00', 0); // 65536
+ // например, fixedCharCodeAt('\uD800\uDC00', 1); // false
+ idx = idx || 0;
+ var code = str.charCodeAt(idx);
+ var hi, low;
+
+ // Старшая часть суррогатной пары (последнее число можно изменить на 0xDB7F,
+ // чтобы трактовать старшую часть суррогатной пары в частной плоскости как
+ // одиночный символ)
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ hi = code;
+ low = str.charCodeAt(idx + 1);
+ if (isNaN(low)) {
+ throw 'Старшая часть суррогатной пары без следующей младшей в fixedCharCodeAt()';
+ }
+ return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
+ }
+ if (0xDC00 &lt;= code &amp;&amp; code &lt;= 0xDFFF) { // Младшая часть суррогатной пары
+ // Мы возвращаем false, чтобы цикл пропустил эту итерацию,
+  // поскольку суррогатная пара
+ // уже обработана в предыдущей итерации
+ return false;
+ // hi = str.charCodeAt(idx - 1);
+ // low = code;
+ // return ((hi - 0xD800) * 0x400) +
+ // (low - 0xDC00) + 0x10000;
+ }
+ return code;
+}
+</pre>
+
+<h3 id="Example:_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_known" name="Example:_Fixing_charCodeAt_to_handle_non-Basic-Multilingual-Plane_characters_if_their_presence_earlier_in_the_string_is_known">Пример: исправление метода <code>charCodeAt()</code> для обработки символов не в Базовой многоязыковой плоскости, если их предыдущее присутствие в строке известно</h3>
+
+<pre class="brush: js">function knownCharCodeAt(str, idx) {
+ str += '';
+ var code,
+ end = str.length;
+
+ var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+ while ((surrogatePairs.exec(str)) != null) {
+ var li = surrogatePairs.lastIndex;
+ if (li - 2 &lt; idx) {
+ idx++;
+ }
+ else {
+ break;
+ }
+ }
+
+ if (idx &gt;= end || idx &lt; 0) {
+ return NaN;
+ }
+
+ code = str.charCodeAt(idx);
+
+ var hi, low;
+ if (0xD800 &lt;= code &amp;&amp; code &lt;= 0xDBFF) {
+ hi = code;
+ low = str.charCodeAt(idx + 1);
+ // Перешагиваем через один, поскольку один «символ» является частью суррогатной пары
+ return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
+ }
+ return code;
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.5', 'String.prototype.charCodeAt')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.charcodeat', 'String.prototype.charCodeAt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.fromCharCode()")}}</li>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/codepointat/index.html b/files/ru/web/javascript/reference/global_objects/string/codepointat/index.html
new file mode 100644
index 0000000000..db2b8a4e19
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/codepointat/index.html
@@ -0,0 +1,174 @@
+---
+title: String.prototype.codePointAt()
+slug: Web/JavaScript/Reference/Global_Objects/String/codePointAt
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/codePointAt
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>codePointAt()</code></strong> возвращает неотрицательное целое число, являющееся закодированным в UTF-16 значением кодовой точки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.codePointAt(<var>pos</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>pos</code></dt>
+ <dd>Позиция элемента в строке, чья кодовоя точка возвращается функцией.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если на указанной позиции нет элементов, будет возвращено значение {{jsxref("Global_Objects/undefined", "undefined")}}. Если суррогатная пара UTF-16 не начинается в позиции <code>pos</code>, будет возвращено кодовое значение в позиции <code>pos</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_codePointAt" name="Example:_Using_codePointAt">Пример: использование метода <code>codePointAt()</code></h3>
+
+<pre class="brush: js">'ABC'.codePointAt(1); // 66
+'\uD800\uDC00'.codePointAt(0); // 65536
+
+'XYZ'.codePointAt(42); // undefined
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Следующий полифилл расширяет прототип строки определённой в ECMAScript 6 функцией <code>codePointAt()</code>, если браузер не имеет её родной поддержки.</p>
+
+<pre class="brush: js">/*! http://mths.be/codepointat v0.1.0 от @mathias */
+if (!String.prototype.codePointAt) {
+ (function() {
+ 'use strict'; // необходимо для поддержки методов `apply`/`call` с `undefined`/`null`
+ var codePointAt = function(position) {
+ if (this == null) {
+ throw TypeError();
+ }
+ var string = String(this);
+ var size = string.length;
+ // `ToInteger`
+ var index = position ? Number(position) : 0;
+ if (index != index) { // лучше, чем `isNaN`
+ index = 0;
+ }
+ // Проверяем выход индекса за границы строки
+ if (index &lt; 0 || index &gt;= size) {
+ return undefined;
+ }
+ // Получаем первое кодовое значение
+ var first = string.charCodeAt(index);
+ var second;
+ if ( // проверяем, не начинает ли оно суррогатную пару
+ first &gt;= 0xD800 &amp;&amp; first &lt;= 0xDBFF &amp;&amp; // старшая часть суррогатной пары
+ size &gt; index + 1 // следующее кодовое значение
+ ) {
+ second = string.charCodeAt(index + 1);
+ if (second &gt;= 0xDC00 &amp;&amp; second &lt;= 0xDFFF) { // младшая часть суррогатной пары
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
+ }
+ }
+ return first;
+ };
+ if (Object.defineProperty) {
+ Object.defineProperty(String.prototype, 'codePointAt', {
+ 'value': codePointAt,
+ 'configurable': true,
+ 'writable': true
+ });
+ } else {
+ String.prototype.codePointAt = codePointAt;
+ }
+ }());
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.codepointat', 'String.prototype.codePointAt')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("41")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>11 на Windows 10 Preview</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("29")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+ <li>{{jsxref("String.fromCharCode()")}}</li>
+ <li>{{jsxref("String.prototype.charCodeAt()")}}</li>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/concat/index.html b/files/ru/web/javascript/reference/global_objects/string/concat/index.html
new file mode 100644
index 0000000000..b8df563087
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/concat/index.html
@@ -0,0 +1,121 @@
+---
+title: String.prototype.concat()
+slug: Web/JavaScript/Reference/Global_Objects/String/concat
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/concat
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>concat()</code></strong> объединяет текст из двух или более строк и возвращает новую строку.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.concat(<var>string2</var>, <var>string3</var>[, ..., <var>stringN</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>string2...string<em>N</em></code></dt>
+ <dd>Строки, объединяемые в эту строку.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>concat()</code> объединяет текст из двух или более строк и возвращает новую строку. Изменения в тексте в одной строке не затрагивают остальные строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_concat" name="Example:_Using_concat">Пример: использование метода <code>concat()</code></h3>
+<p>В следующем примере несколько строк объединяются в одну.</p>
+<pre class="brush: js">var hello = 'Привет, ';
+console.log(hello.concat('Кевин', ', удачного дня.'));
+
+/* Привет, Кевин, удачного дня. */
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+<p>Настоятельно рекомендуется вместо метода <code>concat()</code> использовать {{jsxref("Operators/Assignment_Operators", "операторы присваивания", "", 1)}} (<code>+</code>, <code>+=</code>). Смотрите это <a href="http://jsperf.com/concat-vs-plus-vs-join">сравнение производительности</a>.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.6', 'String.prototype.concat')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.concat', 'String.prototype.concat')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Array.prototype.concat()")}}</li>
+ <li>{{jsxref("Operators/Assignment_Operators", "Операторы присваивания", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/endswith/index.html b/files/ru/web/javascript/reference/global_objects/string/endswith/index.html
new file mode 100644
index 0000000000..f2f6aa5c2c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/endswith/index.html
@@ -0,0 +1,145 @@
+---
+title: String.prototype.endsWith()
+slug: Web/JavaScript/Reference/Global_Objects/String/endsWith
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/endsWith
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>endsWith()</code></strong> позволяет определить, заканчивается ли строка символами указанными в скобках, возвращая, соотвественно, <code>true</code> или <code>false</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>str</var>.endsWith(<var>searchString</var>[, <var>length</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchString</code></dt>
+ <dd>Символы, искомые в конце строки.</dd>
+ <dt><code><var>length</var></code></dt>
+ <dd>Необязательный параметр. Позволяет искать внутри строки, обрезая её по диапазону; по умолчанию равен длине строки.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><strong><code>true</code></strong> если данные символы находятся в конце строки; в противном случае, <strong><code>false</code></strong>.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод позволяет определять, заканчивается ли строка искомыми символами. Метод чувствителен к регистру.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_endsWith" name="Example:_Using_endsWith">Пример: использование метода <code>endsWith()</code></h3>
+
+<pre class="brush: js notranslate">var str = 'Быть или не быть, вот в чём вопрос.';
+
+console.log(str.endsWith('вопрос.')); // true
+console.log(str.endsWith('быть')); // false
+console.log(str.endsWith('быть', 16)); // true
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был добавлен к спецификации ECMAScript 6 и может быть доступен ещё не во всех реализациях JavaScript. Однако, вы можете легко эмулировать этот метод при помощи следующего кода:</p>
+
+<pre class="brush: js notranslate">if (!String.prototype.endsWith) {
+ Object.defineProperty(String.prototype, 'endsWith', {
+ value: function(searchString, position) {
+ var subjectString = this.toString();
+ if (position === undefined || position &gt; subjectString.length) {
+ position = subjectString.length;
+ }
+ position -= searchString.length;
+ var lastIndex = subjectString.indexOf(searchString, position);
+ return lastIndex !== -1 &amp;&amp; lastIndex === position;
+ }
+ });
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.endswith', 'String.prototype.endsWith')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("41")}}</td>
+ <td>{{CompatGeckoDesktop("17")}}</td>
+ <td>12</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatSafari("9")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("36")}}</td>
+ <td>{{CompatGeckoMobile("17")}}</td>
+ <td>12</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.startsWith()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("String.prototype.contains()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/fixed/index.html b/files/ru/web/javascript/reference/global_objects/string/fixed/index.html
new file mode 100644
index 0000000000..8f3feae555
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/fixed/index.html
@@ -0,0 +1,108 @@
+---
+title: String.prototype.fixed()
+slug: Web/JavaScript/Reference/Global_Objects/String/fixed
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/fixed
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>fixed()</code></strong> создаёт HTML-элемент {{HTMLElement("tt")}}, заставляющий строку отображаться моноширинным шрифтом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.fixed()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>fixed()</code> заключает строку в тег <code>&lt;tt&gt;</code>: <code>"&lt;tt&gt;str&lt;/tt&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_fixed" name="Example:_Using_fixed">Пример: использование метода <code>fixed()</code></h3>
+<p>В следующем примере для изменения форматирования строки используется метод <code>fixed()</code>:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+document.write(worldString.fixed());
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">&lt;tt&gt;Привет, мир&lt;/tt&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.fixed', 'String.prototype.fixed')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.bold()")}}</li>
+ <li>{{jsxref("String.prototype.italics()")}}</li>
+ <li>{{jsxref("String.prototype.strike()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/fontcolor/index.html b/files/ru/web/javascript/reference/global_objects/string/fontcolor/index.html
new file mode 100644
index 0000000000..549d0e2b54
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/fontcolor/index.html
@@ -0,0 +1,119 @@
+---
+title: String.prototype.fontcolor()
+slug: Web/JavaScript/Reference/Global_Objects/String/fontcolor
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/fontcolor
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>fontcolor()</code></strong> создаёт HTML-элемент {{HTMLElement("font")}}, заставляющий строку отображаться шрифтом указанного цвета.</p>
+<div class="note">
+ <p><strong>Примечание по использованию:</strong> элемент &lt;font&gt; был удалён из <a href="/ru/docs/Web/Guide/HTML/HTML5">HTML5</a> и больше не должен использоваться. Вместо него веб-разработчикам следует использовать свойства <a href="/ru/docs/Web/CSS">CSS</a>.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.fontcolor(<var>color</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>color</code></dt>
+ <dd>Строка, выражающая цвет в виде шестнадцатеричного триплета RGB, либо в виде названия цвета. Названия цветов перечислены в <a href="/ru/docs/Web/CSS/color_value">справочнике по значению цвета в CSS</a>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Ксли вы выразили цвет в виде шестнадцатеричного триплета RGB, вы должны использовать формат <code>rrggbb</code>. Например, шестнадцатеричные значения RGB для оранжево-розового цвета такие: красный=FA, зелёный=80 и синий=72, так что RGB-триплет для оранжево-розового цвета будет следующим <code>"FA8072"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_fontcolor" name="Example:_Using_fontcolor">Пример: использование метода <code>fontcolor()</code></h3>
+<p>В следующем примере метод <code>fontcolor()</code> используется для изменения цвета строки путём генерирования строки с HTML-тегом <code>&lt;font&gt;</code>.</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+console.log(worldString.fontcolor('red') + ' на этой строке красный');
+// '&lt;font color="red"&gt;Привет, мир&lt;/font&gt; на этой строке красный'
+
+console.log(worldString.fontcolor('FF00') + ' на этой строке красный в шестнадцатеричной форме');
+// '&lt;font color="FF00"&gt;Привет, мир&lt;/font&gt; на этой строке красный в шестнадцатеричной форме'
+</pre>
+<p>При помощи объекта {{domxref("HTMLElement.style", "element.style")}} вы можете получить значение атрибута <code>style</code> элемента и управлять им более обобщённым способом, например:</p>
+<pre class="brush: js">document.getElementById('yourElemId').style.color = 'red';
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.fontcolor', 'String.prototype.fontcolor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.fontsize()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/fontsize/index.html b/files/ru/web/javascript/reference/global_objects/string/fontsize/index.html
new file mode 100644
index 0000000000..3ed48133c3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/fontsize/index.html
@@ -0,0 +1,118 @@
+---
+title: String.prototype.fontsize()
+slug: Web/JavaScript/Reference/Global_Objects/String/fontsize
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/fontsize
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>fontsize()</code></strong> создаёт HTML-элемент {{HTMLElement("font")}}, заставляющий строку отображаться шрифтом указанного размера.</p>
+<div class="note">
+ <p><strong>Примечание по использованию:</strong> элемент &lt;font&gt; был удалён из <a href="/ru/docs/Web/Guide/HTML/HTML5">HTML5</a> и больше не должен использоваться. Вместо него веб-разработчикам следует использовать свойства <a href="/ru/docs/Web/CSS">CSS</a>.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.fontsize(<var>size</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>size</code></dt>
+ <dd>Целое число от 1 до 7, либо строка с целым числом со знаком по модулю от 1 до 7.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>При задании размера в виде целого числа, вы устанавливаете размер шрифта строки <code>str</code> в один из 7 предопределённых размеров. При задании размера в виде строки, например, "-2", вы задаёте размер шрифта строки <code>str</code> относительно размера, установленного тегом {{HTMLElement("basefont")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_fontsize" name="Example:_Using_fontsize">Пример: использование метода <code>fontsize()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения размера строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+console.log(worldString.small()); // &lt;small&gt;Привет, мир&lt;/small&gt;
+console.log(worldString.big()); // &lt;big&gt;Привет, мир&lt;/big&gt;
+console.log(worldString.fontsize(7)); // &lt;fontsize=7&gt;Привет, мир&lt;/fontsize&gt;
+</pre>
+<p>При помощи объекта {{domxref("HTMLElement.style", "element.style")}} вы можете получить значение атрибута <code>style</code> элемента и управлять им более обобщённым способом, например:</p>
+<pre class="brush: js">document.getElementById('yourElemId').style.fontSize = '0.7em';
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.fontsize', 'String.prototype.fontsize')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.big()")}}</li>
+ <li>{{jsxref("String.prototype.small()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/fromcharcode/index.html b/files/ru/web/javascript/reference/global_objects/string/fromcharcode/index.html
new file mode 100644
index 0000000000..04e5c26ada
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/fromcharcode/index.html
@@ -0,0 +1,138 @@
+---
+title: String.fromCharCode()
+slug: Web/JavaScript/Reference/Global_Objects/String/fromCharCode
+tags:
+ - JavaScript
+ - Method
+ - Reference
+ - String
+ - Unicode
+translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCharCode
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Статический метод <strong><code>String.fromCharCode()</code></strong> возвращает строку, созданную из указанной последовательности значений единиц кода UTF-16.</p>
+
+<p>. </p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>String.fromCharCode(<var>num1</var>[, ...[, <var>numN</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>num1, ..., num<em>N</em></code></dt>
+ <dd>Последовательность чисел, являющихся значениями единиц кода UTF-16. <span style="font-size: 1rem; letter-spacing: -0.00278rem;">Диапазон составляет от 0 до 65535 (0xFFFF). Числа больше 0xFFFF усекаются. Проверка достоверности не производится.</span></dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод возвращает примитивную строку, а не объект {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<p>Поскольку метод <code>fromCharCode()</code> является статическим методом объекта {{jsxref("Global_Objects/String", "String")}}, вы всегда должны использовать его как <code>String.fromCharCode()</code>, а не как метод созданного вами экземпляра {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_fromCharCode" name="Example:_Using_fromCharCode">Пример: использование метода <code>fromCharCode()</code></h3>
+
+<p>Следующий пример вернёт строку "ABC".</p>
+
+<pre class="brush: js">String.fromCharCode(65, 66, 67); // "ABC"
+</pre>
+
+<p dir="ltr" id="tw-target-text"><a href="https://asecuritysite.com/coding/asc2">Полная таблица UTF-16</a></p>
+
+<h2 id="Getting_it_to_work_with_higher_values" name="Getting_it_to_work_with_higher_values">Как заставить его работать с большими значениями</h2>
+
+<p>Хотя большинство распространённых значений Юникода может быть представлено одним 16-битным числом (как ожидалось на ранней стадии стандартизации JavaScript) и метод <code>fromCharCode()</code> может использоваться для возврата одного символа для самых распространённых значений (точнее, значений UCS-2, которые являются подмножеством самых распространённых символов UTF-16), для работы со ВСЕМИ допустимыми значениями Юникода (занимающими до 21 бита) одного метода <code>fromCharCode()</code> недостаточно. Поскольку большие кодовые точки используют (самое меньшее) два «суррогатных» числа для представления одного символа, для возврата таких пар можно использовать метод {{jsxref("String.fromCodePoint()")}} (являющийся частью черновика ES6) и, таким образом, адекватно представлять эти символы.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.3.2', 'StringfromCharCode')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.fromcharcodes', 'String.fromCharCode')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.fromCodePoint()")}}</li>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.charCodeAt()")}}</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/fromcodepoint/index.html b/files/ru/web/javascript/reference/global_objects/string/fromcodepoint/index.html
new file mode 100644
index 0000000000..6f4cde3a52
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/fromcodepoint/index.html
@@ -0,0 +1,213 @@
+---
+title: String.fromCodePoint()
+slug: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/fromCodePoint
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Статический метод <strong><code>String.fromCodePoint()</code></strong> возвращает строку, созданную из указанной последовательности кодовых точек.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>String.fromCodePoint(<var>num1</var>[, ...[, <var>numN</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>num1, ..., num<em>N</em></code></dt>
+ <dd>Последовательность кодовых точек.</dd>
+</dl>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Исключение {{jsxref("Global_Objects/RangeError", "RangeError")}} выбрасывается в случае, если методу предоставлена неверная кодовая точка Юникода (например, "RangeError: NaN is not a valid code point").</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Поскольку метод <code>fromCodePoint()</code> является статическим методом объекта {{jsxref("Global_Objects/String", "String")}}, вы всегда должны использовать его как <code>String.fromCodePoint()</code>, а не как метод созданного вами экземпляра {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_fromCharCode" name="Example:_Using_fromCharCode">Пример: использование метода <code>fromCodePoint()</code></h3>
+
+<pre class="brush: js">String.fromCodePoint(42); // "*"
+String.fromCodePoint(65, 90); // "AZ"
+String.fromCodePoint(0x404); // "\u0404"
+String.fromCodePoint(0x2F804); // "\uD87E\uDC04"
+String.fromCodePoint(194564); // "\uD87E\uDC04"
+String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07"
+
+String.fromCodePoint('_'); // RangeError
+String.fromCodePoint(Infinity); // RangeError
+String.fromCodePoint(-1); // RangeError
+String.fromCodePoint(3.14); // RangeError
+String.fromCodePoint(3e-2); // RangeError
+String.fromCodePoint(NaN); // RangeError
+</pre>
+
+<pre class="brush: js">// Метод String.fromCharCode() не может вернуть символ по такой большой кодовой точке
+// Следующий же метод может вернуть 4-байтный символ так же, как и обычный
+// 2-байтный (то есть, он может вернуть один символ, который на самом деле
+// имеет длину 2, а не 1!)
+console.log(String.fromCodePoint(0x2F804)); // или 194564 в десятичной записи
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Метод <code>String.fromCodePoint()</code> был добавлен к стандарту ECMAScript в 6-й версии и может поддерживаться ещё не во всех браузерах или окружениях. Используйте код ниже в качестве полифилла:</p>
+
+<pre class="brush: js">/*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
+if (!String.fromCodePoint) {
+ (function() {
+ var defineProperty = (function() {
+ // IE 8 поддерживает метод `Object.defineProperty` только на элементах DOM
+ try {
+ var object = {};
+ var $defineProperty = Object.defineProperty;
+ var result = $defineProperty(object, object, object) &amp;&amp; $defineProperty;
+ } catch(error) {}
+ return result;
+ }());
+ var stringFromCharCode = String.fromCharCode;
+ var floor = Math.floor;
+ var fromCodePoint = function() {
+ var MAX_SIZE = 0x4000;
+ var codeUnits = [];
+ var highSurrogate;
+ var lowSurrogate;
+ var index = -1;
+ var length = arguments.length;
+ if (!length) {
+ return '';
+ }
+ var result = '';
+ while (++index &lt; length) {
+ var codePoint = Number(arguments[index]);
+ if (
+ !isFinite(codePoint) || // `NaN`, `+Infinity` или `-Infinity`
+ codePoint &lt; 0 || // неверная кодовая точка Юникода
+ codePoint &gt; 0x10FFFF || // неверная кодовая точка Юникода
+ floor(codePoint) != codePoint // не целое число
+ ) {
+ throw RangeError('Invalid code point: ' + codePoint);
+ }
+ if (codePoint &lt;= 0xFFFF) { // кодовая точка Базовой многоязыковой плоскости (БМП)
+ codeUnits.push(codePoint);
+ } else { // Астральная кодовая точка; делим её на суррогатную пару
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ codePoint -= 0x10000;
+ highSurrogate = (codePoint &gt;&gt; 10) + 0xD800;
+ lowSurrogate = (codePoint % 0x400) + 0xDC00;
+ codeUnits.push(highSurrogate, lowSurrogate);
+ }
+ if (index + 1 == length || codeUnits.length &gt; MAX_SIZE) {
+ result += stringFromCharCode.apply(null, codeUnits);
+ codeUnits.length = 0;
+ }
+ }
+ return result;
+ };
+ if (defineProperty) {
+ defineProperty(String, 'fromCodePoint', {
+ 'value': fromCodePoint,
+ 'configurable': true,
+ 'writable': true
+ });
+ } else {
+ String.fromCodePoint = fromCodePoint;
+ }
+ }());
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.fromcodepoint', 'String.fromCodePoint')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("41")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("29")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.fromCharCode()")}}</li>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.codePointAt()")}}</li>
+ <li>{{jsxref("String.prototype.charCodeAt()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/includes/index.html b/files/ru/web/javascript/reference/global_objects/string/includes/index.html
new file mode 100644
index 0000000000..a766377bb8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/includes/index.html
@@ -0,0 +1,127 @@
+---
+title: String.prototype.includes()
+slug: Web/JavaScript/Reference/Global_Objects/String/includes
+tags:
+ - JavaScript
+ - Prototype
+ - Reference
+ - String
+ - метод
+translation_of: Web/JavaScript/Reference/Global_Objects/String/includes
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>includes()</code></strong> проверяет, содержит ли строка заданную подстроку, и возвращает, соответственно <code>true</code> или <code>false</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.includes(<var>searchString</var>[, <var>position</var>])</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>searchString</code></dt>
+ <dd>Строка для поиска в данной строке.</dd>
+ <dt><code>position</code> {{optional_inline}}</dt>
+ <dd>Позиция в строке, с которой начинать поиск строки  <code>searchString</code>, по умолчанию 0.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p><strong><code>true</code></strong>, если искомая строка была найдена в данной строке; иначе <strong><code>false</code></strong>.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот метод позволяет вам определять, содержит ли строка другую строку.</p>
+
+<h3 id="Чувствительность_к_регистру_символов">Чувствительность к регистру символов</h3>
+
+<p>Метод <code>includes()</code> является регистрозависимым. Например, следующее выражение вернёт <code>false</code>:</p>
+
+<pre class="brush: js">'Синий кит'.includes('синий'); // вернёт false
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_includes()">Использование <code>includes()</code></h3>
+
+<pre class="brush: js">var str = 'Быть или не быть вот в чём вопрос.';
+
+console.log(str.includes('Быть')); // true
+console.log(str.includes('вопрос')); // true
+console.log(str.includes('несуществующий')); // false
+console.log(str.includes('Быть', 1)); // false
+console.log(str.includes('БЫТЬ')); // false
+</pre>
+
+<h2 id="Полифилл">Полифилл</h2>
+
+<p>Этот метод был добавлен в спецификации ECMAScript 2015 и может быть недоступен в некоторых реализациях JavaScript. Однако, можно легко эмулировать этот метод:</p>
+
+<pre class="brush: js">if (!String.prototype.includes) {
+  String.prototype.includes = function(search, start) {
+    'use strict';
+    if (typeof start !== 'number') {
+      start = 0;
+    }
+
+    if (start + search.length &gt; this.length) {
+      return false;
+    } else {
+      return this.indexOf(search, start) !== -1;
+    }
+  };
+}
+
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.includes', 'String.prototype.includes')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.includes', 'String.prototype.includes')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{Compat("javascript.builtins.String.includes")}}</p>
+
+<h2 id="String.prototype.contains">String.prototype.contains</h2>
+
+<p> </p>
+
+<p>В Firefox с версии 18 по версию 39, этот метод назывался «contains». Он был переименован в «includes» в замечании {{bug(1102219)}} по следующей причине:</p>
+
+<p>Как было <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=789036">сообщено</a>, некоторые сайты, использующие MooTools 1.2, ломаются в Firefox 17. Эта версия MooTools проверяет существование метода <code>String.prototype.contains()</code> и, если он не существует, добавляет свой собственный. С введением этого метода в Firefox 17, поведение этой проверки изменилось таким образом, что реализация <code>String.prototype.contains()</code>, основанная на MooTools, сломалась. В результате это изменение было <a href="https://hg.mozilla.org/releases/mozilla-aurora/rev/086db97198a8">отключено</a> в Firefox 17. Метод <code>String.prototype.contains()</code> доступен в следующей версии Firefox — Firefox 18.</p>
+
+<p>MooTools 1.3 принудительно использует свою собственную версию метода <code>String.prototype.contains()</code>, так что использующие его веб-сайты не должны ломаться. Тем не менее, следует отметить, что <a href="http://mootools.net/core/docs/1.3.2/Types/String#String-method:-contains">сигнатура метода в MooTools 1.3</a> отличается от сигнатуры метода в ECMAScript 2015 (во втором аргументе). <a href="https://github.com/mootools/mootools-core/blob/master/Docs/Types/String.md#note">В MooTools 1.5+ сигнатура изменена для соответствия стандарту ES2015.</a></p>
+
+<p> </p>
+
+<p>В Firefox 48, метод <code>String.prototype.contains()</code> был удалён. Следует использовать только <code>String.prototype.includes()</code>.</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.includes()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("TypedArray.prototype.includes()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("String.prototype.startsWith()")}}</li>
+ <li>{{jsxref("String.prototype.endsWith()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/index.html b/files/ru/web/javascript/reference/global_objects/string/index.html
new file mode 100644
index 0000000000..887272aab2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/index.html
@@ -0,0 +1,301 @@
+---
+title: String
+slug: Web/JavaScript/Reference/Global_Objects/String
+tags:
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<p>Объект <strong><code>String</code></strong> используется, чтобы представить и конструировать последовательность символов.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<p>Строковые литералы могут быть следующих форм:</p>
+
+<pre class="syntaxbox notranslate"><code>'строка текста'
+"строка текста"
+"中文 español English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ்"
+</code></pre>
+
+<p>Кроме регулярных печатных символов можно использовать специальные символы, которые можно закодировать, используя нотацию escape-последовательностей:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Код</th>
+ <th scope="col">Вывод</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>\0</code></td>
+ <td>нулевой символ (символ NUL)</td>
+ </tr>
+ <tr>
+ <td><code>\'</code></td>
+ <td>одинарная кавычка</td>
+ </tr>
+ <tr>
+ <td><code>\"</code></td>
+ <td>двойная кавычка</td>
+ </tr>
+ <tr>
+ <td><code>\\</code></td>
+ <td>обратный слэш</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td>новая строка</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td>возврат каретки</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td>вертикальная табуляция</td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td>табуляция</td>
+ </tr>
+ <tr>
+ <td><code>\b</code></td>
+ <td>забой</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td>подача страницы</td>
+ </tr>
+ <tr>
+ <td><code>\uXXXX</code></td>
+ <td>кодовая точка Юникода</td>
+ </tr>
+ <tr>
+ <td><code>\xXX</code></td>
+ <td>символ из кодировки Latin-1</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Либо можно использовать глобальный объект <code>String</code> напрямую:</p>
+
+<pre class="syntaxbox notranslate"><code>String(thing)
+new String(thing)
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>thing</code></dt>
+ <dd>Всё, что может быть преобразовано в строку.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Строки полезны для хранения данных, которые можно представить в текстовой форме. Некоторые из наиболее частых операций со строками — это проверка их {{jsxref("String.length", "длины", "", 1)}}, построение строки с помощью <a href="/ru/docs/Web/JavaScript/Reference/Operators/String_Operators">операций строковой конкатенации + и +=</a>, проверка на существование или местоположение подстрок с помощью метода {{jsxref("String.prototype.indexOf()", "indexOf()")}}, либо извлечение подстрок с помощью метода {{jsxref("String.prototype.substring()", "substring()")}}.</p>
+
+<h3 id="Character_access" name="Character_access">Доступ к символам</h3>
+
+<p>Существует два способа добраться до конкретного символа в строке. В первом способе используется метод {{jsxref("String.prototype.charAt()", "charAt()")}}:</p>
+
+<pre class="brush: js notranslate">return 'кот'.charAt(1); // вернёт "о"
+</pre>
+
+<p>Другим способом (введённым в ECMAScript 5) является рассмотрение строки как массивоподобного объекта, в котором символы имеют соответствующие числовые индексы:</p>
+
+<pre class="brush: js notranslate">return 'кот'[1]; // вернёт "о"
+</pre>
+
+<p>При доступе к символам посредством нотации с квадратными скобками, попытка удалить символ, или присвоить значение числовому свойству закончится неудачей, поскольку эти свойства являются незаписываемыми и ненастраиваемыми. Смотрите документацию по методу {{jsxref("Object.defineProperty()")}} для дополнительной информации.</p>
+
+<h3 id="Comparing_strings" name="Comparing_strings">Сравнение строк</h3>
+
+<p>Разработчики на C имеют для сравнения строк функцию <code>strcmp()</code>. В JavaScript вы просто используете <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B_%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F">операторы меньше и больше</a>:</p>
+
+<pre class="brush: js notranslate">var a = 'a';
+var b = 'b';
+if (a &lt; b) { // true
+ print(a + ' меньше чем ' + b);
+} else if (a &gt; b) {
+ print(a + ' больше чем ' + b);
+} else {
+ print(a + ' и ' + b + ' равны.');
+}
+</pre>
+
+<p>Подобный результат также может быть достигнут путём использования метода {{jsxref("String.prototype.localeCompare()", "localeCompare()")}}, имеющегося у всех экземпляров <code>String</code>.</p>
+
+<h3 id="Distinction_between_string_primitives_and_String_objects" name="Distinction_between_string_primitives_and_String_objects">Разница между строковыми примитивами и объектами <code>String</code></h3>
+
+<p>Обратите внимание, что JavaScript различает объекты <code>String</code> и значения строкового примитива (то же самое верно и для объектов {{jsxref("Global_Objects/Boolean", "Boolean")}} и {{jsxref("Global_Objects/Number", "Number")}}).</p>
+
+<p>Строковые литералы (обозначаемые двойными или одинарными кавычками) и строки, возвращённые вызовом <code>String</code> в неконструкторном контексте (то есть, без использования ключевого слова {{jsxref("Operators/new", "new")}}) являются строковыми примитивами. JavaScript автоматически преобразует примитивы в объекты <code>String</code>, так что на строковых примитивах возможно использовать методы объекта <code>String</code>. В контекстах, когда на примитивной строке вызывается метод или происходит поиск свойства, JavaScript автоматически оборачивает строковый примитив объектом и вызывает на нём метод или ищет в нём свойство.</p>
+
+<pre class="brush: js notranslate">var s_prim = 'foo';
+var s_obj = new String(s_prim);
+
+console.log(typeof s_prim); // выведет 'string'
+console.log(typeof s_obj); // выведет 'object'
+</pre>
+
+<p>Строковые примитивы и объекты <code>String</code> также дают разные результаты при использовании глобальной функции {{jsxref("Global_Objects/eval", "eval()")}}. Примитивы, передаваемые в <code>eval()</code>, трактуются как исходный код; объекты же <code>String</code> трактуются так же, как и все остальные объекты, а именно: возвращается сам объект. Например:</p>
+
+<pre class="brush: js notranslate">var s1 = '2 + 2'; // создаёт строковый примитив
+var s2 = new String('2 + 2'); // создаёт объект String
+console.log(eval(s1)); // выведет число 4
+console.log(eval(s2)); // выведет строку '2 + 2'
+</pre>
+
+<p>По этим причинам код может сломаться, если он получает объекты <code>String</code>, а ожидает строковые примитивы, хотя в общем случае вам не нужно беспокоиться о различиях между ними.</p>
+
+<p>Объект <code>String</code> также всегда может быть преобразован в его примитивный аналог при помощи метода {{jsxref("String.prototype.valueOf()", "valueOf()")}}.</p>
+
+<pre class="brush: js notranslate">console.log(eval(s2.valueOf())); // выведет число 4
+</pre>
+
+<div class="note"><strong>Примечание:</strong> для того, чтобы узнать больше о другом возможном подходе к строкам в JavaScript, прочитайте статью о <a href="/ru/Add-ons/Code_snippets/StringView"><code>StringView</code> — C-подобном представлении строк на основе типизирванных массивов</a>.</div>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("String.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства к объекту <code>String</code>.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "Properties", "prototype")}}</div>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("String.fromCharCode()")}}</dt>
+ <dd>Возвращает строку, созданную из указанной последовательности значений Юникода.</dd>
+ <dt>{{jsxref("String.fromCodePoint()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает строку, созданную из указанной последовательности кодовых точек Юникода.</dd>
+ <dt>{{jsxref("String.raw()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает строку, созданную из сырой шаблонной строки.</dd>
+</dl>
+
+<div>{{jsOverrides("Function", "Methods", "fromCharCode", "fromCodePoint", "raw")}}</div>
+
+<h2 id="String_generic_methods" name="String_generic_methods">Общие методы объекта <code>String</code></h2>
+
+<p>Методы экземпляров <code>String</code> также доступны в Firefox как часть JavaScript 1.6 (который не является частью стандарта ECMAScript) на объекте <code>String</code>, что позволяет применять эти методы к любому объекту:</p>
+
+<pre class="brush: js notranslate">var num = 15;
+console.log(String.replace(num, /5/, '2'));
+</pre>
+
+<p>{{jsxref("Global_Objects/Array", "Общие методы", "#Array_generic_methods", 1)}} также доступны для объекта {{jsxref("Global_Objects/Array", "Array")}}.</p>
+
+<p>Следующая прослойка позволяет использовать их во всех браузерах:</p>
+
+<pre class="brush: js notranslate">/*globals define*/
+// Предполагаем, что все требуемые методы экземпляров String уже присутствуют
+// (для них так же можно использовать полифиллы, если их нет)
+(function() {
+ 'use strict';
+
+ var i,
+ // Мы могли построить массив методов следующим образом, однако метод
+ // getOwnPropertyNames() нельзя реализовать на JavaScript:
+ // Object.getOwnPropertyNames(String).filter(function(methodName) {
+ // return typeof String[methodName] === 'function';
+ // });
+ methods = [
+ 'quote', 'substring', 'toLowerCase', 'toUpperCase', 'charAt',
+ 'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith',
+ 'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase',
+ 'toLocaleUpperCase', 'localeCompare', 'match', 'search',
+ 'replace', 'split', 'substr', 'concat', 'slice'
+ ],
+ methodCount = methods.length,
+ assignStringGeneric = function(methodName) {
+ var method = String.prototype[methodName];
+ String[methodName] = function(arg1) {
+ return method.apply(arg1, Array.prototype.slice.call(arguments, 1));
+ };
+ };
+
+ for (i = 0; i &lt; methodCount; i++) {
+ assignStringGeneric(methods[i]);
+ }
+}());
+</pre>
+
+<h2 id="String_instances" name="String_instances">Экземпляры объекта <code>String</code></h2>
+
+<h3 id="Properties_of_String_instance" name="Properties_of_String_instance">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_String_instance" name="Methods_of_String_instance">Методы</h3>
+
+<h4 id="Methods_unrelated_to_HTML" name="Methods_unrelated_to_HTML">Методы, не относящиеся к HTML</h4>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'Methods_unrelated_to_HTML')}}</div>
+
+<h4 id="HTML_wrapper_methods" name="HTML_wrapper_methods">Методы-обёртки HTML</h4>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'HTML_wrapper_methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_String_conversion" name="Example:_String_conversion">Пример: преобразование в строку</h3>
+
+<p>Объект <code>String</code> можно использовать как «безопасную» альтернативу методу {{jsxref("String.prototype.toString()", "toString()")}}, так как хотя он обычно и вызывает соответствующий метод <code>toString()</code>, он также работает и для значений {{jsxref("Global_Objects/null", "null")}} и {{jsxref("Global_Objects/undefined", "undefined")}}. Например:</p>
+
+<pre class="brush: js notranslate">var outputStrings = [];
+for (var i = 0, n = inputValues.length; i &lt; n; ++i) {
+ outputStrings.push(String(inputValues[i]));
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5', 'String')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string-objects', 'String')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.String",2)}}</p>
+
+<div></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{domxref("DOMString")}}</li>
+ <li><a href="/ru/Add-ons/Code_snippets/StringView"><code>StringView</code> — C-подобное представление строк на основе типизированных массивов</a></li>
+ <li><a href="/ru/docs/Web/API/DOMString/Binary">Двоичные строки</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/indexof/index.html b/files/ru/web/javascript/reference/global_objects/string/indexof/index.html
new file mode 100644
index 0000000000..2b91bdc97a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/indexof/index.html
@@ -0,0 +1,194 @@
+---
+title: String.prototype.indexOf()
+slug: Web/JavaScript/Reference/Global_Objects/String/indexOf
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/indexOf
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>indexOf()</code></strong> возвращает индекс первого вхождения указанного значения в строковый объект {{jsxref("Global_Objects/String", "String")}}, на котором он был вызван, начиная с индекса <code>fromIndex</code>. Возвращает -1, если значение не найдено.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.indexOf(<var>searchValue</var>, [<var>fromIndex</var>]</code>)</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchValue</code></dt>
+ <dd>Строка, представляющая искомое значение.</dd>
+ <dt><code>fromIndex</code></dt>
+ <dd>Необязательный параметр. Местоположение внутри строки, откуда начинать поиск. Может быть любым целым числом. Значение по умолчанию установлено в 0. Если <code>fromIndex &lt; 0</code>, поиск ведётся по всей строке (так же, как если бы был передан 0). Если <code>fromIndex &gt;= str.length</code>, метод вернёт -1, но только в том случае, если <code>searchValue</code> не равен пустой строке, в этом случае он вернёт <code>str.length</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Символы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке <code>stringName</code> равен <code>stringName.length - 1</code>.</p>
+
+<pre class="brush: js">'Синий кит'.indexOf('Синий'); // вернёт 0
+'Синий кит'.indexOf('Голубой'); // вернёт -1
+'Синий кит'.indexOf('кит', 0); // вернёт 6
+'Синий кит'.indexOf('кит', 5); // вернёт 6
+'Синий кит'.indexOf('', 8); // вернёт 8
+'Синий кит'.indexOf('', 9); // вернёт 9
+'Синий кит'.indexOf('', 10); // вернёт 9
+</pre>
+
+<h3 id="Case-sensitivity" name="Case-sensitivity">Регистрозависимость</h3>
+
+<p>Метод <code>indexOf()</code> является регистрозависимым. Например, следующее выражение вернёт -1:</p>
+
+<pre class="brush: js">'Синий кит'.indexOf('синий'); // вернёт -1
+</pre>
+
+<h3 id="Checking_occurrences" name="Checking_occurrences">Проверка на вхождение</h3>
+
+<p>Обратите внимание, что значение 0 не вычисляется в <code>true</code>, а значение -1 не вычисляется в <code>false</code>. Поэтому, для проверки того, что конкретная строка содержится в другой строке, правильно делать так:</p>
+
+<pre class="brush: js">'Синий кит'.indexOf('Синий') !== -1; // true
+'Синий кит'.indexOf('Голубой') !== -1; // false
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_indexOf_and_lastIndexOf" name="Example:_Using_indexOf_and_lastIndexOf">Пример: использование методов <code>indexOf()</code> и <code>lastIndexOf()</code></h3>
+
+<p>В следующем примере используются методы <code>indexOf()</code> и {{jsxref("String.prototype.lastIndexOf()", "lastIndexOf()")}} для нахождения значений в строке <code>"Дивный новый мир"</code>.</p>
+
+<pre class="brush: js">var anyString = 'Дивный новый мир';
+
+console.log('Индекс первого вхождения «й» с начала строки равен ' + anyString.indexOf('й'));
+// Отобразит 5
+console.log('Индекс первого вхождения «й» с конца строки равен ' + anyString.lastIndexOf('й'));
+// Отобразит 11
+
+console.log('Индекс вхождения «новый» с начала строки равен ' + anyString.indexOf('новый'));
+// Отобразит 7
+console.log('Индекс вхождения «новый» с конца строки равен ' + anyString.lastIndexOf('новый'));
+// Отобразит 7
+</pre>
+
+<h3 id="Example:_indexOf_and_case-sensitivity" name="Example:_indexOf_and_case-sensitivity">Пример: метод <code>indexOf()</code> и регистрозависимость</h3>
+
+<p>В следующем примере определяются две строковых переменных. Переменные содержат одинаковые строки, за исключение того, что слова во второй строке начинаются с заглавных букв. Первый вызов метода {{domxref("console.log()")}} отобразит 18. Но поскольку метод <code>indexOf()</code> является регистрозависимым, строка <code>"чеддер"</code> в переменной <code>myCapString</code> не будет найдена, так что второй вызов метода <code>console.log()</code> отобразит -1.</p>
+
+<pre class="brush: js">var myString = 'бри, пеппер джек, чеддер';
+var myCapString = 'Бри, Пеппер Джек, Чеддер';
+
+console.log('Вызов myString.indexOf("чеддер") вернул ' + myString.indexOf('чеддер'));
+// Отобразит 18
+console.log('Вызов myCapString.indexOf("чеддер") вернул ' + myCapString.indexOf('чеддер'));
+// Отобразит -1
+</pre>
+
+<h3 id="Example:_Using_indexOf_to_count_occurrences_of_a_letter_in_a_string" name="Example:_Using_indexOf_to_count_occurrences_of_a_letter_in_a_string">Пример: использование метода <code>indexOf()</code> для подсчёта вхождений буквы в строку</h3>
+
+<p>Следующий пример устанавливает значение переменной <code>count</code> в количество вхождений буквы <code>в</code> в строку <code>str</code>:</p>
+
+<pre class="brush: js">var str = 'Быть или не быть, вот в чём вопрос.';
+var count = 0;
+var pos = str.indexOf('в');
+
+while (pos !== -1) {
+ count++;
+ pos = str.indexOf('в', pos + 1);
+}
+
+console.log(count); // отобразит 3
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.7', 'String.prototype.indexOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.indexof', 'String.prototype.indexOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("Array.prototype.indexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/italics/index.html b/files/ru/web/javascript/reference/global_objects/string/italics/index.html
new file mode 100644
index 0000000000..3876249dcb
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/italics/index.html
@@ -0,0 +1,114 @@
+---
+title: String.prototype.italics()
+slug: Web/JavaScript/Reference/Global_Objects/String/italics
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/italics
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>italics()</code></strong> создаёт HTML-элемент {{HTMLElement("i")}}, заставляющий строку отображаться курсивом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.italics()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>italics()</code> заключает строку в тег <code>&lt;i&gt;</code>: <code>"&lt;i&gt;str&lt;/i&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_italics" name="Example:_Using_italics">Пример: использование метода <code>italics()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения форматирования строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+document.write(worldString.blink());
+document.write(worldString.bold());
+document.write(worldString.italics());
+document.write(worldString.strike());
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">&lt;blink&gt;Привет, мир&lt;/blink&gt;
+&lt;b&gt;Привет, мир&lt;/b&gt;
+&lt;i&gt;Привет, мир&lt;/i&gt;
+&lt;strike&gt;Привет, мир&lt;/strike&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.italics', 'String.prototype.italics')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.blink()")}}</li>
+ <li>{{jsxref("String.prototype.bold()")}}</li>
+ <li>{{jsxref("String.prototype.strike()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/lastindexof/index.html b/files/ru/web/javascript/reference/global_objects/string/lastindexof/index.html
new file mode 100644
index 0000000000..853670b0e1
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/lastindexof/index.html
@@ -0,0 +1,155 @@
+---
+title: String.prototype.lastIndexOf()
+slug: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/lastIndexOf
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>lastIndexOf()</code></strong> возвращает индекс последнего вхождения указанного значения в строковый объект {{jsxref("Global_Objects/String", "String")}}, на котором он был вызван, или -1, если ничего не было найдено. Поиск по строке ведётся от конца к началу, начиная с индекса <code>fromIndex</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.lastIndexOf(<var>searchValue</var>[, <var>fromIndex</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchValue</code></dt>
+ <dd>Строка, представляющая искомое значение.</dd>
+ <dt><code>fromIndex</code></dt>
+ <dd>Необязательный параметр. Местоположение внутри строки, откуда начинать поиск, нумерация индексов идёт слева направо. Может быть любым целым числом. Значение по умолчанию установлено в <code>str.length</code>. Если оно отрицательно, трактуется как 0. Если <code>fromIndex &gt; str.length</code>, параметр <code>fromIndex</code> будет трактоваться как <code>str.length</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Символы в строке идут слева направо. Индекс первого символа равен 0, а последнего символа в строке <code>stringName</code> равен <code>stringName.length - 1</code>.</p>
+
+<pre class="brush: js">'канал'.lastIndexOf('а'); // вернёт 3
+'канал'.lastIndexOf('а', 2); // вернёт 1
+'канал'.lastIndexOf('а', 0); // вернёт -1
+'канал'.lastIndexOf('ч'); // вернёт -1
+</pre>
+
+<h3 id="Case-sensitivity" name="Case-sensitivity">Регистрозависимость</h3>
+
+<p>Метод <code>lastIndexOf()</code> является регистрозависимым. Например, следующее выражение вернёт -1:</p>
+
+<pre class="brush: js">'Cиний кит, касатка'.lastIndexOf('синий'); // вернёт -1
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_indexOf_and_lastIndexOf" name="Example:_Using_indexOf_and_lastIndexOf">Пример: использование методов <code>indexOf()</code> и <code>lastIndexOf()</code></h3>
+
+<p>В следующем примере используются методы {{jsxref("String.prototype.indexOf()", "indexOf()")}} и <code>lastIndexOf()</code> для нахождения значений в строке <code>"Дивный новый мир"</code>.</p>
+
+<pre class="brush: js">var anyString = 'Дивный новый мир';
+
+console.log('Индекс первого вхождения «й» с начала строки равен ' + anyString.indexOf('й'));
+// Отобразит 5
+console.log('Индекс первого вхождения «й» с конца строки равен ' + anyString.lastIndexOf('й'));
+// Отобразит 11
+
+console.log('Индекс вхождения «новый» с начала строки равен ' + anyString.indexOf('новый'));
+// Отобразит 7
+console.log('Индекс вхождения «новый» с конца строки равен ' + anyString.lastIndexOf('новый'));
+// Отобразит 7
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.8', 'String.prototype.lastIndexOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.lastindexof', 'String.prototype.lastIndexOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("Array.prototype.indexOf()")}}</li>
+ <li>{{jsxref("Array.prototype.lastIndexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/length/index.html b/files/ru/web/javascript/reference/global_objects/string/length/index.html
new file mode 100644
index 0000000000..f794c6ccdf
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/length/index.html
@@ -0,0 +1,116 @@
+---
+title: String.length
+slug: Web/JavaScript/Reference/Global_Objects/String/length
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/length
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <strong><code>length</code></strong> представляет длину строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.length</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Это свойство возвращает количество кодовых значений в строке. В {{interwiki("wikipedia", "UTF-16")}}, строковом формате, используемом в JavaScript, для представления большинства символов используется одно 16-битное кодовое значение, но для представления не так часто используемых символов требуется два кодовых значения, так что вполне может быть так, что значение, возвращённое свойством <code>length</code> не будет соответствовать действительному количеству символов в строке.</p>
+<p>Для пустых строк свойство <code>length</code> возвращает 0.</p>
+<p>Статическое свойство <code>String.length</code> возвращает значение 1.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Basic_usage" name="Example:_Basic_usage">Пример: базовое использование</h3>
+<pre class="brush: js">var x = 'Mozilla';
+var empty = '';
+
+console.log('Слово «Mozilla» занимает ' + x.length + ' кодовых значений');
+/* "Слово «Mozilla» занимает 7 кодовых значений" */
+
+console.log('Пустая строка имеет длину, равную ' + empty.length);
+/* "Пустая строка имеет длину, равную 0" */
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.5.1', 'String.prototype.length')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-string-instances-length', 'String.prototype.length')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li><a class="external" href="http://developer.teradata.com/blog/jasonstrimpel/2011/11/javascript-string-length-and-internationalizing-web-applications">Свойство <code>String.length</code> в JavaScript и интернационализация веб-приложений</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/link/index.html b/files/ru/web/javascript/reference/global_objects/string/link/index.html
new file mode 100644
index 0000000000..00cec2d905
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/link/index.html
@@ -0,0 +1,131 @@
+---
+title: String.prototype.link()
+slug: Web/JavaScript/Reference/Global_Objects/String/link
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/link
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>link()</code></strong> создаёт HTML-элемент {{HTMLElement("a")}}, заставляющий строку отображаться в виде ссылки на другой URL.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.link(<var>url</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>url</code></dt>
+ <dd>Любая строка, определяющая атрибут <code>href</code> тега <code>&lt;a&gt;</code>; она должна содержать допустимый URL (относительный или абсолютный), символы амперсанда <code>&amp;</code> должны быть закодированы в ней как <code>&amp;amp;</code>, а символы кавычки <code>"</code> — как <code>&amp;quot;</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>link()</code> используется для создания кусочка HTML со ссылкой в гипертексте. Возвращённая строка затем может быть добавлена в документ при помощи метода {{domxref("document.write()")}} или свойства {{domxref("element.innerHTML")}}</p>
+
+<p>Ссылки, созданные методом <code>link()</code>, становятся элементами в массиве {{domxref("document.links")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_link" name="Example:_Using_link">Пример: использование метода <code>link()</code></h3>
+
+<p>В следующем примере слово «MDN» отображается в виде гипертекстовой ссылки, ведущей на сайт Сети разработчиков Mozilla.</p>
+
+<pre class="brush: js">var hotText = 'MDN';
+var URL = 'https://developer.mozilla.org/';
+
+document.write('Нажмите для возврата на ' + hotText.link(URL));
+</pre>
+
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+
+<pre class="brush: html">Нажмите для возврата на &lt;a href="https://developer.mozilla.org/"&gt;MDN&lt;/a&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.link', 'String.prototype.link')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<p>Начиная с версии {{gecko("17")}}, символ <code>"</code> (кавычка) в строках, передаваемых в качестве параметра <code>url</code>, заменяется его HTML-мнемоникой <code>&amp;quot;</code>.</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.anchor()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/localecompare/index.html b/files/ru/web/javascript/reference/global_objects/string/localecompare/index.html
new file mode 100644
index 0000000000..606cf86549
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/localecompare/index.html
@@ -0,0 +1,196 @@
+---
+title: String.prototype.localeCompare()
+slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>localeCompare()</code></strong> возвращает число, указывающее, должна ли данная строка находиться до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк.</p>
+
+<p>Новые аргументы <code>locales</code> и <code>options</code> позволяют приложениям определять язык, чей порядок сортировки оно хочет использовать и настраивать поведение этой функции. В старых реализациях, игнорирующих аргументы <code>locales</code> и <code>options</code>, используемая локаль и порядок сортировки целиком зависят от реализации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.localeCompare(<var>compareString</var>[, <var>locales</var>[, <var>options</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<p>Проверьте раздел <a href="#Browser_compatibility">Совместимость с браузерами</a>, чтобы увидеть, какие браузеры поддерживают аргументы <code>locales</code> и <code>options</code>, и <a href="#Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></a> для определения этой возможности.</p>
+
+<dl>
+ <dt><code>compareString</code></dt>
+ <dd>Строка, с которой сравнивается данная.</dd>
+</dl>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/Collator', 'Parameters')}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Возвращает число, указывающее, должна данная строка находится до, после или в том же самом месте, что и строка, переданная через параметр, при сортировке этих строк. Если данная строка предшествует строке <code>compareString</code>, возвращает отрицательное число, если она следует за строкой <code>compareString</code>, возвращает положительное значение и возвращает 0, если строки находятся на одном уровне.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_localeCompare" name="Example:_Using_localeCompare">Пример: использование метода <code>localeCompare()</code></h3>
+
+<p>Следующий пример демонстрирует различные потенциальные результаты для строки, находящейся до, после или на том же самом уровне, что и другая строка:</p>
+
+<pre class="brush: js">console.log(new Intl.Collator().compare('a', 'c')); // -2, -1 или другое отрицательное значение
+console.log(new Intl.Collator().compare('c', 'a')); // 2, 1 или другое положительное значение
+console.log(new Intl.Collator().compare('a', 'a')); // 0
+</pre>
+
+<p>Обратите внимание, что результат, показанный в коде выше, может сильно различаться в зависимости от браузера и его версии. Происходит это потому, что возвращаемые значения зависят от реализации. То есть, спецификация требует только того, чтобы значение было отрицательным, если строка данная следует до переданной, и положительным — если после.</p>
+
+<h3 id="Example:_Checking_for_support_for_locales_and_options_arguments" name="Example:_Checking_for_support_for_locales_and_options_arguments">Пример: проверка поддержки аргументов <code>locales</code> и <code>options</code></h3>
+
+<p>Аргументы <code>locales</code> и <code>options</code> поддерживаются ещё не всеми браузерами. Для проверки того, поддерживает ли их уже реализация, можно затребовать несуществующую метку языка и проверить, будет ли выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}:</p>
+
+<pre class="brush: js">function localeCompareSupportsLocales() {
+ try {
+ 'a'.localeCompare​('b', 'i');
+ } catch (e) {
+ return e​.name === 'RangeError';
+ }
+ return false;
+}
+</pre>
+
+<h3 id="Example:_Using_locales" name="Example:_Using_locales">Пример: использование аргумента <code>locales</code></h3>
+
+<p>Результаты, предоставляемые методом <code>localeCompare()</code>, сильно различаются в зависимости от языка. Для получения порядка сортировки языка, используемого в пользовательском интерфейсе вашего приложения, убедитесь, что вы указали этот язык (и, возможно, несколько запасных языков) через аргумент <code>locales</code>:</p>
+
+<pre class="brush: js">console.log('ä'.localeCompare('z', 'de')); // отрицательное значение: в немецком буква ä идёт рядом с буквой a
+console.log('ä'.localeCompare('z', 'sv')); // положительное значение: в шведском буква ä следует после буквы z
+</pre>
+
+<h3 id="Example:_Using_options" name="Example:_Using_options">Пример: использование аргумента <code>options</code></h3>
+
+<p>Результат, предоставляемый методом <code>localeCompare()</code>, может быть настроен с помощью аргумента <code>options</code>:</p>
+
+<pre class="brush: js">// В немецком буква a является базовой для буквы ä
+console.log('ä'.localeCompare('a', 'de', { sensitivity: 'base' })); // 0
+
+// В шведском буквы ä и a являются двумя разными базовыми буквами
+console.log('ä'.localeCompare('a', 'sv', { sensitivity: 'base' })); // положительное значение
+</pre>
+
+<h2 id="Performance" name="Performance">Производительность</h2>
+
+<p>При сравнении большого количества строк, например, при сортировке больших массивов, лучшим вариантом будет создание объекта {{jsxref("Global_Objects/Collator", "Intl.Collator")}} и использование функции, предоставляемой его свойством {{jsxref("Collator.prototype.compare", "compare")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.9', 'String.prototype.localeCompare')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES Int 1.0', '#sec-13.1.1', 'String.prototype.localeCompare')}}</td>
+ <td>{{Spec2('ES Int 1.0')}}</td>
+ <td>Определение параметров <code>locale</code> и <code>option</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatChrome("24")}}</td>
+ <td>{{CompatGeckoDesktop("29")}}</td>
+ <td>{{CompatIE("11")}}</td>
+ <td>{{CompatOpera("15")}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Аргументы <code>locales</code> и <code>options</code></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("26")}}</td>
+ <td>{{CompatNo}}<br>
+ {{bug("864843")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..ebcc53c574
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/match/index.html
@@ -0,0 +1,177 @@
+---
+title: String.prototype.match()
+slug: Web/JavaScript/Reference/Global_Objects/String/match
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Regular Expressions
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/match
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>match()</code></strong> возвращает получившиеся совпадения при сопоставлении <em>строки</em> с <em>регулярным выражением</em>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.match(<var>regexp</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>regexp</code></dt>
+ <dd>Объект регулярного выражения. Если будет передан объект <code>obj</code>, не являющийся регулярным выражением, он будет неявно преобразован в объект {{jsxref("Global_Objects/RegExp", "RegExp")}} через вызов конструктора <code>new RegExp(obj)</code>.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<dl>
+ <dt><code>array</code></dt>
+ <dd>Объект {{jsxref("Global_Objects/Array", "Array")}}, содержащий результаты сопоставления, или {{jsxref("Global_Objects/null", "null")}}, если ничего не было сопоставлено.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если регулярное выражение не содержит флаг <code>g</code>, возвращаемый результат будет тем же самым, что и при вызове метода {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}. Возвращаемый объект {{jsxref("Global_Objects/Array", "массива", "", 1)}} имеет дополнительное свойство <code>input</code>, которое содержит оригинальную строку. Кроме того, он имеет свойство <code>index</code>, которое представляет индекс (нумерация с нуля) сопоставления в строке.</p>
+
+<p>Если регулярное выражение содержит флаг <code>g</code>, метод вернёт {{jsxref("Global_Objects/Array", "массив", "", 1)}}, содержащий все сопоставления. Если сопоставлений не было, метод вернёт значение {{jsxref("Global_Objects/null", "null")}}.</p>
+
+<h3 id="See_also_RegExp_methods" name="See_also:_RegExp_methods">Смотрите также: методы объекта <code>RegExp</code></h3>
+
+<ul>
+ <li>Если вам надо просто узнать, подпадает ли строка под регулярное выражение, используйте метод {{jsxref("String.prototype.search()", "search()")}}.</li>
+ <li>Если вам нужно найти только первое сопоставление, вы можете использовать метод {{jsxref("RegExp.prototype.exec()", "RegExp.exec()")}}.</li>
+</ul>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_match" name="Example:_Using_match">Пример: использование метода <code>match()</code></h3>
+
+<p>В следующем примере метод <code>match()</code> используется для поиска слова <code>'Глава'</code>, за которым следуют 1 или более цифр, за которыми следуют 0 или более раз группы из точки и цифры. Регулярное выражение включает флаг <code>i</code>, так что регистр букв игнорируется.</p>
+
+<pre class="brush: js">var str = 'Глава 3.4.5.1 содержит дополнительную информацию';
+var re = /(глава \d+(\.\d)*)/i;
+var found = str.match(re);
+
+console.log(found);
+
+// выведет [ 'Глава 3.4.5.1',
+// 'Глава 3.4.5.1',
+//  '.1',
+//  index: 0,
+//  input: 'Глава 3.4.5.1 содержит дополнительную информацию' ]
+
+// 'Глава 3.4.5.1' - это первое сопоставление и первое значение,
+// сопоставленное с группой `(Глава \d+(\.\d)*)`.
+// '.1' - это последнее значение, сопоставленное с группой `(\.\d)`.
+// Свойство 'index' содержит значение (0) индекса совпадения
+// относительно начала сопоставления
+// Свойство 'input' содержит значение введенной строки.</pre>
+
+<h3 id="Example_Using_global_and_ignore_case_flags_with_match" name="Example:_Using_global_and_ignore_case_flags_with_match">Пример: использование флагов глобальности и игнорирования регистра с методом <code>match()</code></h3>
+
+<p>Следующий пример демонстрирует использование флагов глобального поиска и игнорирования регистра символов вместе с методом <code>match()</code>. Возвращаются все буквы от А до Д и от а до д, каждая в своём элементе массива.</p>
+
+<pre class="brush: js">var str = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя';
+var regexp = /[А-Д]/gi;
+var matches_array = str.match(regexp);
+
+console.log(matches_array);
+// ['А', 'Б', 'В', 'Г', 'Д', 'а', 'б', 'в', 'г', 'д']
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.10', 'String.prototype.match')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.match', 'String.prototype.match')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Firefox-specific_notes" name="Firefox-specific_notes">Примечания по Firefox</h3>
+
+<ul>
+ <li>Начиная с Gecko 27 {{geckoRelease(27)}}, этот метод был поправлен для соотвествия спецификации ECMAScript. При вызове метода <code>match()</code> с глобальным регулярным выражением, свойство {{jsxref("RegExp.lastIndex")}} (если оно определено) будет сбрасываться в <code>0</code> ({{bug(501739)}}).</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..6c8defbc17
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/matchall/index.html
@@ -0,0 +1,120 @@
+---
+title: String.prototype.matchAll()
+slug: Web/JavaScript/Reference/Global_Objects/String/matchAll
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Regular Expressions
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/matchAll
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>matchAll()</code></strong> возвращает итератор по всем результатам при сопоставлении <em>строки с регулярным выражением</em>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/string-matchall.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>str</var>.matchAll(<var>regexp</var>)</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>regexp</code></dt>
+ <dd>Объект регулярного выражения. Если передано значение, не являющееся объектом регулярного выражения, оно неявно преобразуется в {{jsxref("RegExp")}} используя <code>new RegExp(obj)</code>.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращается <a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators">iterator</a> (не перезапускаемый).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Regexp.exec_и_matchAll">Regexp.exec() и matchAll()</h3>
+
+<p>До добавления метода <code>matchAll</code> в JavaScript, можно было использовать метод <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec">regexp.exec</a> (и регулярные выражения с флагом <code>/g</code> ) в цикле для получения доступа к совпадениям:</p>
+
+<pre class="brush: js notranslate">const regexp = RegExp('foo*','g');
+const str = 'table football, foosball';
+
+while ((matches = regexp.exec(str)) !== null) {
+  console.log(`Found ${matches[0]}. Next starts at ${regexp.lastIndex}.`);
+  // expected output: "Found foo. Next starts at 9."
+  // expected output: "Found foo. Next starts at 19."
+}
+</pre>
+
+<p>С появлением <code>matchAll</code>, нет необходимости использовать цикл <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/while">while</a></code> и метод <code>exec</code> с флагом <code>/g</code>.<br>
+ Используя вместо этого метод <code>matchAll</code>, вы получаете итератор, который вы можете использовать более удобно с конструкциями <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code>, <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax">array spread</a>, или {{jsxref("Array.from()")}} :</p>
+
+<pre class="brush: js notranslate">const regexp = RegExp('foo*','g');
+const str = 'table football, foosball';
+let matches = str.matchAll(regexp);
+
+for (const match of matches) {
+  console.log(match);
+}
+// Array [ "foo" ]
+// Array [ "foo" ]
+
+// итерация больше недоступна после вызова for of
+// Для создания нового итератора вызовите matchAll повторно
+matches = str.matchAll(regexp);
+
+Array.from(matches, m =&gt; m[0]);
+// Array [ "foo", "foo" ]
+</pre>
+
+<h3 id="Улучшенный_доступ_к_группам_захвата">Улучшенный доступ к группам захвата</h3>
+
+<p>Еще одна веская причина использовать <code>matchAll</code> это улучшенный доступ к группам захвата. Группы захвата игнорируются при использовании <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match">match()</a></code> с глобальным флагом <code>/g</code>:</p>
+
+<pre class="brush: js notranslate">var regexp = /t(e)(st(\d?))/g;
+var str = 'test1test2';
+
+str.match(regexp);
+// Array ['test1', 'test2']</pre>
+
+<p>С <code>matchAll</code> у вас появляется к ним доступ:</p>
+
+<pre class="brush: js notranslate">let array = [...str.matchAll(regexp)];
+
+array[0];
+// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]
+array[1];
+// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.github.io/proposal-string-matchall/#sec-string-prototype-matchall">String.prototype.matchAll</a></td>
+ <td>Stage 3</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<p class="hidden">The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.matchAll")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("RegExp")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/normalize/index.html b/files/ru/web/javascript/reference/global_objects/string/normalize/index.html
new file mode 100644
index 0000000000..098bc2de09
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/normalize/index.html
@@ -0,0 +1,174 @@
+---
+title: String.prototype.normalize()
+slug: Web/JavaScript/Reference/Global_Objects/String/normalize
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Unicode
+translation_of: Web/JavaScript/Reference/Global_Objects/String/normalize
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>normalize()</code></strong> возвращает форму нормализации Юникода данной строки (если значение не является строкой, сначала оно будет в неё преобразовано).</p>
+
+<p>Одна из особенностей Юникода - возможность считать два разных символа эквивалентными при выполнении сортировки и иных операций, которые основаны на сравнении.</p>
+
+<p>Виды эквивалентности:<br>
+ - первый - каноническая эквивалентность, когда две последовательности code point являются полностью взаимозаменяемыми.</p>
+
+<p>- второй - совместимость - две совместимые последовательности code point выглядят по-разному, но в некоторых случаях они могут быть взаимозаменяемыми.</p>
+
+<p>'æ' взаимозаменяемый 'ae', но они не являются строго эквивалентными, если не провести некоторую нормализацию</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.normalize(<var>[form</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>form</code></dt>
+ <dd>Одно из значений <code>"NFC"</code>, <code>"NFD"</code>, <code>"NFKC"</code> или <code>"NFKD"</code>, определяющих форму нормализации Юникода. Если параметр опущен или равен {{jsxref("Global_Objects/undefined", "undefined")}}, будет использоваться значение <code>"NFC"</code>.
+ <ul>
+ <li><code>NFC</code> —  форма нормализации канонической композицией (Normalization Form Canonical Composition, 'NFC'), по умолчанию;</li>
+ <li><code>NFD</code> — форма нормализации канонической декомпозицией (Normalization Form Canonical Decomposition, 'NFD');</li>
+ <li><code>NFKC</code> — форма нормализации совместимой композицией (Normalization Form Compatibility Composition, 'NFKC');</li>
+ <li><code>NFKD</code> — форма нормализации совместимой декомпозицией (Normalization Form Compatibility Decomposition, 'NFKD').</li>
+ </ul>
+ </dd>
+</dl>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/RangeError", "RangeError")}}</dt>
+ <dd>Если параметр <code>form</code> не является одним из вышеперечисленных значений, будет выброшено исключение {{jsxref("Global_Objects/RangeError", "RangeError")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>normalize()</code> возвращает указанную форму нормализации Юникода строки. Он не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_normalize" name="Example:_Using_normalize">Пример: использование метода <code>normalize()</code></h3>
+
+<pre class="brush: js">let valueStr = ['h', 'ĥ', 'æ', 'ae', 'g', 'ġ'],
+    normArr = valueStr.map(function (text) {
+ return text.normalize(); // (по умолчанию 'NFC') normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, æ, ġ, ĥ]</span></span></span></span>
+        //return text.normalize('NFD'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, ġ, h, ĥ, æ]</span></span></span></span>
+        //return text.normalize('NFKC'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, æ, ġ, ĥ]</span></span></span></span>
+        //return text.normalize('NFKD'); // normArr (после сортировки) -&gt; [<span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, ġ, h, ĥ, æ]</span></span></span></span>
+    });
+
+//После приведение строк в нормальную форму, мы можем провести сортировку, массива:
+normArr.sort(function (f,s) {
+    if (f &lt; s) {
+        return -1;
+    } else if (f === s) {
+        return 0;
+    } else {
+        return 1;
+    }
+});
+
+//Приведение к нормальной форме можно выполнить во время сортировки. Нормализацию при этом можно выполнять с помощью разных форм нормализации
+let valueStrNorm = ['h', 's', 'ĥ', 'æ', 'ș', 'ae', 'g', 'ġ'];
+valueStrNorm.sort(function (first, second) {
+    let fN = first.normalize(),
+        sN = second.normalize('NFKC');
+
+    if (fN &lt; sN) {
+        return -1;
+    } else if (fN === sN) {
+        return 0;
+    } else {
+        return 1;
+    }
+});
+
+valueStrNorm.join(', ');//-&gt; <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body"><span class="objectBox objectBox-string">ae, g, h, s, æ, ġ, ĥ, ș</span></span></span></span>
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.normalize', 'String.prototype.normalize')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome("34")}}</td>
+ <td>{{CompatGeckoDesktop("31")}}</td>
+ <td>{{CompatIE("11")}} на Windows 10 Preview</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome("34")}}</td>
+ <td>{{CompatNo}}<br>
+ {{bug("864843")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="http://www.unicode.org/reports/tr15/">Приложение №15 к стандарту Юникода: формы нормализации Юникода</a></li>
+ <li><a href="http://en.wikipedia.org/wiki/Unicode_equivalence">Эквивалентность в Юникоде</a></li>
+</ul>
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
new file mode 100644
index 0000000000..31da2edad0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/padend/index.html
@@ -0,0 +1,94 @@
+---
+title: String.prototype.padEnd()
+slug: Web/JavaScript/Reference/Global_Objects/String/padEnd
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/padEnd
+---
+<div>{{JSRef}}{{SeeCompatTable}}</div>
+
+<p>Метод <strong><code>padEnd()</code></strong> дополняет текущую строку с помощью заданной строки (в конечном счете повторяя), так чтобы результирующая строка достигла заданной длины. Дополнение применяется в конце (справа) текущей строки.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>str</var>.padEnd(<var>targetLength</var> [, <var>padString</var>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>targetLength</code></dt>
+ <dd>Длина результирующей строки, после того как текущая строка была дополнена. Если этот параметр меньше длины текущей строки, то будет возвращена текущая строка , как она есть.</dd>
+ <dt><code>padString</code> {{optional_inline}}</dt>
+ <dd>Строка для дополнения текущей строки с. Если эта строка слишком длинная, она будет урезана и будет применяться ее левая большая часть. " " (U+0020) - значение по умолчанию для этого параметра.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Строка указанной длинны дополненная с помощью дополнительной строки в конце текуще строки.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">'abc'.padEnd(10); // "abc       "
+'abc'.padEnd(10, "foo"); // "abcfoofoof"
+'abc'.padEnd(6,"123456"); // "abc123"
+</pre>
+
+<h2 id="Характеристики">Характеристики</h2>
+
+<p>Этот метод еще не достиг стандарта ECMAScript. Сейчас он в состоянии <a href="https://github.com/tc39/proposal-string-pad-start-end">proposal for ECMAScript</a>.</p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatUnknown}} </td>
+ <td>{{CompatGeckoDesktop(48)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile(48)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/string/padstart/index.html b/files/ru/web/javascript/reference/global_objects/string/padstart/index.html
new file mode 100644
index 0000000000..074516217d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/padstart/index.html
@@ -0,0 +1,92 @@
+---
+title: String.prototype.padStart()
+slug: Web/JavaScript/Reference/Global_Objects/String/padStart
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/padStart
+---
+<div>{{JSRef}}{{SeeCompatTable}}</div>
+
+<p>Метод <strong><code>padStart()</code></strong> заполняет текущую строку другой строкой (несколько раз, если нужно) так, что итоговая строка достигает заданной длины. Заполнение осуществляется в начале (слева) текущей строки.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>str</var>.padStart(<var>targetLength</var> [, <var>padString</var>])</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>targetLength</code></dt>
+ <dd>Длина итоговой строки после дополнения текущей строки. Если значение меньше, чем длина текущей строки, текущая строка будет возвращена без изменений.</dd>
+ <dt><code>padString</code> {{optional_inline}}</dt>
+ <dd>Строка для заполнения текущей строки. Если эта строка слишком длинная для заданной длины, она будет обрезана. Значение по умолчанию - " " (U+0020).</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("String")}} заданной длины с заполнением строкой, выполненное в начале.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">'abc'.padStart(10); // "       abc"
+'abc'.padStart(10, "foo"); // "foofoofabc"
+'abc'.padStart(6,"123465"); // "123abc"
+'abc'.padStart(8, "0"); // "00000abc"
+'abc'.padStart(1); // "abc"</pre>
+
+<h2 id="Полифил">Полифил</h2>
+
+<p>Запуск данного кода перед любым другим кодом будет создавать <code>String.prototype.padStart()</code>, если он нативно не поддерживается.</p>
+
+<pre class="brush: js">// https://github.com/uxitten/polyfill/blob/master/string.polyfill.js
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
+if (!String.prototype.padStart) {
+    String.prototype.padStart = function padStart(targetLength,padString) {
+        targetLength = targetLength&gt;&gt;0; //floor if number or convert non-number to 0;
+        padString = String(padString || ' ');
+        if (this.length &gt; targetLength) {
+            return String(this);
+        }
+        else {
+            targetLength = targetLength-this.length;
+            if (targetLength &gt; padString.length) {
+                padString += padString.repeat(targetLength/padString.length); //append to original to ensure we are longer than needed
+            }
+            return padString.slice(0,targetLength) + String(this);
+        }
+    };
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.padstart', 'String.prototype.padStart')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ECMAScript 2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.padStart")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.padEnd()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/prototype/index.html b/files/ru/web/javascript/reference/global_objects/string/prototype/index.html
new file mode 100644
index 0000000000..cecc7325a5
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/prototype/index.html
@@ -0,0 +1,229 @@
+---
+title: String.prototype
+slug: Web/JavaScript/Reference/Global_Objects/String/prototype
+tags:
+ - JavaScript
+ - Property
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Свойство <strong><code>String.prototype</code></strong> представляет прототип объекта {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Все объекты {{jsxref("Global_Objects/String", "String")}} наследуются от <code>String.prototype</code>. Изменения в прототипе объекта {{jsxref("Global_Objects/String", "String")}} распространяются на все его экземпляры.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>String.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип этого объекта.</dd>
+ <dt>{{jsxref("String.prototype.length")}}</dt>
+ <dd>Отражает длину строки.</dd>
+ <dt><code><em>N</em></code></dt>
+ <dd>Используется для доступа к символу в позиции <em>N</em>, где <em>N</em> — это целое число между 0 и длиной строки {{jsxref("String.length", "length")}} минус один. Эти свойства доступны только для чтения.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<h3 id="Methods_unrelated_to_HTML" name="Methods_unrelated_to_HTML">Методы, не относящиеся к HTML</h3>
+
+<dl>
+ <dt>{{jsxref("String.prototype.charAt()")}}</dt>
+ <dd>Возвращает символ по указанному индексу.</dd>
+ <dt>{{jsxref("String.prototype.charCodeAt()")}}</dt>
+ <dd>Возвращает число, представляющее значение символа в Юникоде по указанному индексу.</dd>
+ <dt>{{jsxref("String.prototype.codePointAt()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает неотрицательное целое число, представляющее закодированную в UTF-16 кодовую точку значения по указанной позиции.</dd>
+ <dt>{{jsxref("String.prototype.concat()")}}</dt>
+ <dd>Объединяет текст двух строк и возвращает новую строку.</dd>
+ <dt>{{jsxref("String.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, находится ли строка внутри другой строки.</dd>
+ <dt>{{jsxref("String.prototype.endsWith()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, заканчивается ли строка символами другой строки.</dd>
+ <dt>{{jsxref("String.prototype.indexOf()")}}</dt>
+ <dd>Возвращает индекс первого вхождения указанного значения в объекте {{jsxref("Global_Objects/String", "String")}}, на котором был вызван этот метод, или -1, если вхождений нет.</dd>
+ <dt>{{jsxref("String.prototype.lastIndexOf()")}}</dt>
+ <dd>Возвращает индекс последнего вхождения указанного значения в объекте {{jsxref("Global_Objects/String", "String")}}, на котором был вызван этот метод, или -1, если вхождений нет.</dd>
+ <dt>{{jsxref("String.prototype.localeCompare()")}}</dt>
+ <dd>Возвращает число, указывающее, находится ли образцовая строка до, после или на том же самом месте, что и указанная строка в порядке сортировки.</dd>
+ <dt>{{jsxref("String.prototype.match()")}}</dt>
+ <dd>Используется для сопоставления строке регулярного выражения.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("String.prototype.matchAll()")}}</dt>
+ <dd>Возвращает итератор по всем результатам при сопоставлении строки с регулярным выражением.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("String.prototype.normalize()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает форму нормализации Юникода для строкового значения.</dd>
+ <dt><s class="obsoleteElement">{{jsxref("String.prototype.quote()")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Оборачивает строку в двойные кавычки ("<code>"</code>").</s></dd>
+ <dt>{{jsxref("String.prototype.repeat()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает строку. состоящую из элементов объекта, повторённых указанное количество раз.</dd>
+ <dt>{{jsxref("String.prototype.replace()")}}</dt>
+ <dd>Используется для сопоставления строке регулярного выражения и для замены совпавшей подстроки на новую подстроку.</dd>
+ <dt>{{jsxref("String.prototype.search()")}}</dt>
+ <dd>Выполняет поиск совпадения регулярного выражения со строкой.</dd>
+ <dt>{{jsxref("String.prototype.slice()")}}</dt>
+ <dd>Извлекает часть строки и возвращает новую строку.</dd>
+ <dt>{{jsxref("String.prototype.split()")}}</dt>
+ <dd>Разбивает объект {{jsxref("Global_Objects/String", "String")}} на массив строк, разделёных указанной строкой на подстроки.</dd>
+ <dt>{{jsxref("String.prototype.startsWith()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, начинается ли строка символами другой строки.</dd>
+ <dt>{{jsxref("String.prototype.substr()")}}</dt>
+ <dd>Возвращает указанное количество символов в строке, начинающихся с указанной позиции.</dd>
+ <dt>{{jsxref("String.prototype.substring()")}}</dt>
+ <dd>Возвращает символы в строке между двумя индексами.</dd>
+ <dt>{{jsxref("String.prototype.toLocaleLowerCase()")}}</dt>
+ <dd>Приводит символы в строке к нижнему регистру согласно текущей локали. Для большинства языков, метод делает то же самое, что и метод {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}.</dd>
+ <dt>{{jsxref("String.prototype.toLocaleUpperCase()")}}</dt>
+ <dd>Приводит символы в строке к верхнему регистру согласно текущей локали. Для большинства языков, метод делает то же самое, что и метод {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}.</dd>
+ <dt>{{jsxref("String.prototype.toLowerCase()")}}</dt>
+ <dd>Возвращает строковое значение с символами в нижнем регистре.</dd>
+ <dt>{{jsxref("String.prototype.toSource()")}} {{non-standard_inline}}</dt>
+ <dd>Возвращает литерал объекта, представляющий указанный объект; вы можете использовать это значениедля создания нового объекта. Переопределяет метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("String.prototype.toString()")}}</dt>
+ <dd>Возвращает строковое представление указаного объекта. Переопределяет метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("String.prototype.toUpperCase()")}}</dt>
+ <dd>Возвращает строковое значение с символами в верхнем регистре.</dd>
+ <dt>{{jsxref("String.prototype.trim()")}}</dt>
+ <dd>Обрезает пробельные символы в начале и в конце строки. Часть стандарта ECMAScript 5.</dd>
+ <dt>{{jsxref("String.prototype.trimLeft()")}} {{non-standard_inline}}</dt>
+ <dd>Обрезает пробельные символы с левой стороны строки.</dd>
+ <dt>{{jsxref("String.prototype.trimRight()")}} {{non-standard_inline}}</dt>
+ <dd>Обрезает пробельные символы с правой стороны строки.</dd>
+ <dt>{{jsxref("String.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение указанного объекта. Переопределяет метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
+ <dt>{{jsxref("String.prototype.@@iterator()", "String.prototype[@@iterator]()")}} {{experimental_inline}}</dt>
+ <dd>Возвращает новый объект итератора <code>Iterator</code>, который итерируется по кодовым точкам строки и возвращает каждую кодовую точку в виде строкового значения.</dd>
+</dl>
+
+<h3 id="HTML_wrapper_methods" name="HTML_wrapper_methods">Методы-обёртки HTML</h3>
+
+<p>Эти методы имеют ограниченное применение, поскольку они представляют только ограниченное подмножество доступных тегов и атрибутов HTML.</p>
+
+<dl>
+ <dt>{{jsxref("String.prototype.anchor()")}} {{deprecated_inline}}</dt>
+ <dd><code><a href="/ru/docs/Web/HTML/Element/a#attr-name">&lt;a name="<em>имя</em>"&gt;</a></code> (цель гипертекста)</dd>
+ <dt>{{jsxref("String.prototype.big()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("big")}}</dd>
+ <dt>{{jsxref("String.prototype.blink()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("blink")}}</dd>
+ <dt>{{jsxref("String.prototype.bold()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("b")}}</dd>
+ <dt>{{jsxref("String.prototype.fixed()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("tt")}}</dd>
+ <dt>{{jsxref("String.prototype.fontcolor()")}} {{deprecated_inline}}</dt>
+ <dd><a href="/ru/docs/Web/HTML/Element/font#attr-color"><code>&lt;font color="<em>цвет</em>"&gt;</code></a></dd>
+ <dt>{{jsxref("String.prototype.fontsize()")}} {{deprecated_inline}}</dt>
+ <dd><a href="/ru/docs/Web/HTML/Element/font#attr-size"><code>&lt;font size="<em>размер</em>"&gt;</code></a></dd>
+ <dt>{{jsxref("String.prototype.italics()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("i")}}</dd>
+ <dt>{{jsxref("String.prototype.link()")}} {{deprecated_inline}}</dt>
+ <dd><a href="/ru/docs/Web/HTML/Element/a#attr-href"><code>&lt;a href="<em>url</em>"&gt;</code></a> (ссылка на URL)</dd>
+ <dt>{{jsxref("String.prototype.small()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("small")}}</dd>
+ <dt>{{jsxref("String.prototype.strike()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("strike")}}</dd>
+ <dt>{{jsxref("String.prototype.sub()")}} {{deprecated_inline}}}</dt>
+ <dd>{{HTMLElement("sub")}}</dd>
+ <dt>{{jsxref("String.prototype.sup()")}} {{deprecated_inline}}</dt>
+ <dd>{{HTMLElement("sup")}}</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.3.1', 'String.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype', 'String.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/String", "String")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/quote/index.html b/files/ru/web/javascript/reference/global_objects/string/quote/index.html
new file mode 100644
index 0000000000..367f9f6eb7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/quote/index.html
@@ -0,0 +1,124 @@
+---
+title: String.prototype.quote()
+slug: Web/JavaScript/Reference/Global_Objects/String/quote
+tags:
+ - JavaScript
+ - Method
+ - Obsolete
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Archive/Web/JavaScript/String.quote
+---
+<div>{{obsolete_header("37")}}</div>
+
+<div>{{JSRef("Global_Objects", "String")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Нестандартный метод <strong><code>quote()</code></strong> возвращает копию строки, заменяя различные специальные символы в строке их управляющими последовательностями и заключая результат в двойные кавычки (<code>"</code>).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.quote()</code></pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>В таблице ниже метод <code>quote()</code> заменяет любые специальные символы и заключает строку в двойные кавычки. Также обратите внимание на третью колонку, в которой функция {{jsxref("Global_Objects/eval", "eval()")}} снова вычисляет управляющие последовательности.</p>
+
+<table class="fullwidth-table">
+ <thead>
+ <tr>
+ <th class="header" scope="col"><code>str</code></th>
+ <th class="header" scope="col"><code>str.quote()</code></th>
+ <th class="header" scope="col"><code>eval(str.quote())</code></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>Hello world!</code></td>
+ <td><code>"Hello world!"</code></td>
+ <td><code>Hello world!</code></td>
+ </tr>
+ <tr>
+ <td><code style="white-space: pre;">Hello<br>
+ world!</code></td>
+ <td><code>"Hello\n\tworld!"</code></td>
+ <td><code style="white-space: pre;">Hello<br>
+ world!</code></td>
+ </tr>
+ <tr>
+ <td><code>" \ — '</code></td>
+ <td><code>"\" \\ \u2014 '"</code></td>
+ <td><code>" \ — '</code></td>
+ </tr>
+ <tr>
+ <td><code>Привет, мир!</code></td>
+ <td><code>"\u041F\u0440\u0438\u0432\u0435\u0442, \u043C\u0438\u0440!"</code></td>
+ <td><code>Привет, мир!</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("JSON.stringify()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/raw/index.html b/files/ru/web/javascript/reference/global_objects/string/raw/index.html
new file mode 100644
index 0000000000..b6d9477108
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/raw/index.html
@@ -0,0 +1,153 @@
+---
+title: String.raw()
+slug: Web/JavaScript/Reference/Global_Objects/String/raw
+tags:
+ - ECMAScript6
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/raw
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Статический метод <strong><code>String.raw()</code></strong> является теговой функцией для <a href="/ru/docs/Web/JavaScript/Reference/template_strings">шаблонных строк</a>; подобно префиксу <code>r</code> в Python или префиксу <code>@</code> в C# для строковых литералов, эта функция используется для получения необработанной строки из шаблона.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>
+String.raw(<var>callSite</var>, <var>...substitutions</var>)
+
+String.raw`templateString`
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>callSite</code></dt>
+ <dd>Правильно сформированный объект вызова, например <code>{ raw: 'string' }</code>.</dd>
+ <dt><code>...substitutions</code></dt>
+ <dd>Значения подстановок.</dd>
+ <dt><code>templateString</code></dt>
+ <dd><a href="/ru/docs/Web/JavaScript/Reference/template_strings">Шаблонная строка</a>, возможно с подстановками (<code>${...}</code>).</dd>
+</dl>
+
+<h3 id="Throws" name="Throws">Выбрасываемые исключения</h3>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/TypeError", "TypeError")}}</dt>
+ <dd>Если первый аргумент не является правильно сформированным объектом вызова, выбрасывается исключение {{jsxref("Global_Objects/TypeError", "TypeError")}}.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>В большинстве случаев метод <code>String.raw()</code> используется вместе с шаблонными строками. Первый синтаксис, показанный выше, используется редко, поскольку движок JavaScript будет вызывать метод с соответствующими аргументами, подобно другим <a href="/ru/docs/Web/JavaScript/Reference/template_strings#Tagged_template_strings">теговым функциям</a>.</p>
+
+<p>Метод <code>String.raw()</code> является единственной встроенной теговой функцией шаблонных строк, выступающей стандартной функцией по объединению их фрагментов. Вы и сами могли бы реализовать подобную функциональность на JavaScript.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_String.raw" name="Example:_String.raw">Пример: использование метода <code>String.raw()</code></h3>
+
+<pre class="brush: js">String.raw`Привет\n${2+3}!`;
+// 'Привет\n5!', символ после 'Привет' не является символом новой строки,
+// '\' и 'n' - это два символа.
+
+String.raw`Привет\u000A!`;
+// 'Привет\u000A!', а здесь мы получим символы
+// \, u, 0, 0, 0, A, всего 6 символов.
+// Экранирующие символы не имеют особого значения и
+// обратные слеши будут присутствовать в выходной строке.
+// Вы можете убедиться в этом, проверив свойство .length строки.
+
+let name = 'Боб';
+String.raw`Привет\n${name}!`;
+// 'Привет\nБоб!', сработала подстановка.
+
+// Обычно вам не нужно вызывать метод String.raw() как функцию,
+// но никто не запрещает вам делать это:
+String.raw({ raw: 'тест' }, 0, 1, 2);
+// 'т0е1с2т'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.raw', 'String.raw')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/template_strings">Шаблонные строки</a></li>
+ <li>{{jsxref("Global_Objects/String", "String")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar">Лексическая грамматика</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/repeat/index.html b/files/ru/web/javascript/reference/global_objects/string/repeat/index.html
new file mode 100644
index 0000000000..10a6507b6e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/repeat/index.html
@@ -0,0 +1,124 @@
+---
+title: String.prototype.repeat()
+slug: Web/JavaScript/Reference/Global_Objects/String/repeat
+tags:
+ - ECMAScript 2015
+ - Experimental
+ - Expérimental(2)
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/repeat
+---
+<div>{{JSRef}}</div>
+
+<div>Метод <strong><code>repeat()</code></strong> конструирует и возвращает новую строку, содержащую указанное количество соединённых вместе копий строки, на которой он был вызван.</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.repeat(<var>count</var>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>count</code></dt>
+ <dd>Целое число от 0 до +∞: [0, +∞), определяющее число повторений строки во вновь создаваемой и возвращаемой строке.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новая строка, содержащая указанное количество копий строки, для которой был вызван метод.</p>
+
+<h3 id="Throws" name="Throws">Исключения</h3>
+
+<ul>
+ <li>{{jsxref("Errors/Negative_repetition_count", "RangeError")}}: число повторений не должно быть отрицательным.</li>
+ <li>{{jsxref("Errors/Resulting_string_too_large", "RangeError")}}: число повторений должно быть меньше бесконечности и не должно превышать максимально допустимую длину строки.</li>
+</ul>
+
+<dl>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<pre class="brush: js">'абв'.repeat(-1); // RangeError
+'абв'.repeat(0); // ''
+'абв'.repeat(1); // 'абв'
+'абв'.repeat(2); // 'абвабв'
+'абв'.repeat(3.5); // 'абвабвабв' (количество будет преобразовано в целое число)
+'абв'.repeat(1/0); // RangeError
+
+({ toString: () =&gt; 'абв', repeat: String.prototype.repeat }).repeat(2);
+// 'абвабв' (метод repeat() является обобщённым методом)
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был добавлен к спецификации ECMAScript 2015 и может быть доступен ещё не во всех реализациях JavaScript. Однако, вы можете легко эмулировать этот метод при помощи следующего кода:</p>
+
+<pre class="brush: js">if (!String.prototype.repeat) {
+ String.prototype.repeat = function(count) {
+ 'use strict';
+ if (this == null) {
+ throw new TypeError('can\'t convert ' + this + ' to object');
+ }
+ var str = '' + this;
+ count = +count;
+ if (count != count) {
+ count = 0;
+ }
+ if (count &lt; 0) {
+ throw new RangeError('repeat count must be non-negative');
+ }
+ if (count == Infinity) {
+ throw new RangeError('repeat count must be less than infinity');
+ }
+ count = Math.floor(count);
+ if (str.length == 0 || count == 0) {
+ return '';
+ }
+ // Обеспечение того, что count является 31-битным целым числом, позволяет нам значительно
+ // соптимизировать главную часть функции. Впрочем, большинство современных (на август
+ // 2014 года) браузеров не обрабатывают строки, длиннее 1 &lt;&lt; 28 символов, так что:
+ if (str.length * count &gt;= 1 &lt;&lt; 28) {
+ throw new RangeError('repeat count must not overflow maximum string size');
+ }
+ var rpt = '';
+ for (var i = 0; i &lt; count; i++) {
+ rpt += str;
+ }
+ return rpt;
+ }
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.repeat', 'String.prototype.repeat')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.repeat")}}</p>
diff --git a/files/ru/web/javascript/reference/global_objects/string/replace/index.html b/files/ru/web/javascript/reference/global_objects/string/replace/index.html
new file mode 100644
index 0000000000..debc32cf40
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/replace/index.html
@@ -0,0 +1,289 @@
+---
+title: String.prototype.replace()
+slug: Web/JavaScript/Reference/Global_Objects/String/replace
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/String/replace
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>replace()</code></strong> возвращает новую строку с некоторыми или всеми сопоставлениями с шаблоном, заменёнными на заменитель. Шаблон может быть строкой или {{jsxref("Global_Objects/RegExp", "регулярным выражением", "", 1)}}, а заменитель может быть строкой или функцией, вызываемой при каждом сопоставлении.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.replace(<var>regexp</var>|<var>substr</var>, <var>newSubStr</var>|<var>function</var>[, <var>flags</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>regexp</code></dt>
+ <dd>Объект регулярного выражения {{jsxref("Global_Objects/RegExp", "RegExp")}}. Сопоставление заменяется возвращаемым значением второго параметра.</dd>
+ <dt><code>substr</code></dt>
+ <dd>{{jsxref("Global_Objects/String", "Строка", "", 1)}}, заменяемая на <code>newSubStr</code>. Обратите внимание, будет заменено только первое вхождение искомой строки.</dd>
+ <dt><code>newSubStr</code></dt>
+ <dd>{{jsxref("Global_Objects/String", "Строка", "", 1)}}, заменяющая подстроку из первого параметра. Поддерживает несколько специальных шаблонов замены; смотрите ниже раздел <a href="#Specifying_a_string_as_a_parameter">Передача строки в качестве второго параметра</a>.</dd>
+ <dt><code>function</code></dt>
+ <dd>Функция, вызываемая для создания новой подстроки (помещаемой вместо подстроки из первого параметра). Аргументы, передаваемые функции, описаны ниже в разделе <a href="#Specifying_a_function_as_a_parameter">Передача функции в качестве второго параметра</a>.</dd>
+ <dt><code>flags</code> {{non-standard_inline}}</dt>
+ <dd>
+ <p><strong>Обратите внимание: аргумент <code>flags</code> не работает в ядре v8 (движок JavaScript в Chrome и NodeJs).</strong> Строка, задающая комбинацию <a href="/ru/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_Searching_With_Flags">флагов регулярного выражения</a>. Параметр <code>flags</code> в методе <code>String.prototype.replace()</code> является нестандартным расширением. Вместо использования этого параметра используйте объект {{jsxref("Global_Objects/RegExp", "RegExp")}} с соответствующими флагами. Значение этого параметра, если он используется, должно быть строкой, состоящей из одного или более следующих символов, следующим образом влияющих на обработку регулярного выражения:</p>
+
+ <dl>
+ <dt><code>g</code></dt>
+ <dd>глобальное сопоставление</dd>
+ <dt><code>i</code></dt>
+ <dd>игнорировать регистр</dd>
+ <dt><code>m</code></dt>
+ <dd>сопоставление по нескольким строкам</dd>
+ <dt><code>y</code> {{experimental_inline}}</dt>
+ <dd>«липкий» поиск, сопоставление начинается с текущей позиции в строке</dd>
+ </dl>
+ </dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Новая строка с некоторыми или всеми сопоставлениями шаблона, заменёнными на заменитель.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод не изменяет объект {{jsxref("Global_Objects/String", "String")}}, на котором он вызывается. Он просто возвращает новую строку.</p>
+
+<p>Для выполнения глобального поиска и замены либо включите флаг <code>g</code> в регулярное выражение, либо, если первый параметр является строкой, включите флаг <code>g</code> в параметр <code>flags</code>.</p>
+
+<h3 id="Specifying_a_string_as_a_parameter" name="Specifying_a_string_as_a_parameter">Передача строки в качестве второго параметра</h3>
+
+<p>строка замены может включать следующие специальные шаблоны замены:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header">Шаблон</td>
+ <td class="header">Замена</td>
+ </tr>
+ <tr>
+ <td><code>$$</code></td>
+ <td>Вставляет символ доллара «$».</td>
+ </tr>
+ <tr>
+ <td><code>$&amp;</code></td>
+ <td>Вставляет сопоставившуюся подстроку.</td>
+ </tr>
+ <tr>
+ <td><code>$`</code></td>
+ <td>Вставляет часть строки, предшествующую сопоставившейся подстроке.</td>
+ </tr>
+ <tr>
+ <td><code>$'</code></td>
+ <td>Вставляет часть строки, следующую за сопоставившейся подстрокой.</td>
+ </tr>
+ <tr>
+ <td><code>$<em>n</em></code> или <code>$<em>nn</em></code></td>
+ <td>Символы <code><em>n</em></code> или <code><em>nn</em></code> являются десятичными цифрами, вставляет <em>n</em>-ную сопоставившуются подгруппу из объекта {{jsxref("Global_Objects/RegExp", "RegExp")}} в первом параметре.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Specifying_a_function_as_a_parameter" name="Specifying_a_function_as_a_parameter">Передача функции в качестве второго параметра</h3>
+
+<p>В качестве второго параметра вы можете передать функцию. В этом случае функция будет выполнена после произошедшего сопоставления. Результат вызова функции (её возвращаемое значение) будет использоваться в качестве строки замены (обратите внимание: описанные выше специальные шаблоны замены в этом случае <em>не</em> применяются). Обратите внимание, что функция будет вызвана несколько раз для каждого полного сопоставления, если регулярное выражение в первом параметре является глобальным.</p>
+
+<p>Функция принимает следующие аргументы:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header">Возможное имя</td>
+ <td class="header">Получаемое значение</td>
+ </tr>
+ <tr>
+ <td><code>match</code></td>
+ <td>Сопоставившаяся подстрока (cоответствует шаблону замены <code>$&amp;</code>, описанному выше).</td>
+ </tr>
+ <tr>
+ <td><code>p1, p2, ...</code></td>
+ <td><em>n</em>-ная сопоставившаяся подгруппа из объекта {{jsxref("Global_Objects/RegExp", "RegExp")}} в первом параметре метода <code>replace()</code> (cоответствует шаблонам замены <code>$1</code>, <code>$2</code> и так далее, описанным выше). Например, если в качестве шаблона передано регулярное выражение <code>/(\a+)(\b+)/</code>, параметр <code>p1</code> будет значение сопоставления с подгруппой <code>\a+</code>, а параметр <code>p2</code> — с подгруппой <code>\b+</code>.</td>
+ </tr>
+ <tr>
+ <td><code>offset</code></td>
+ <td>Смещение сопоставившейся подстроки внутри всей рассматриваемой строки (например, если вся строка равна <code>'abcd'</code>, а сопоставившаяся подстрока равна <code>'bc'</code>, то этот аргумент будет равен 1).</td>
+ </tr>
+ <tr>
+ <td><code>string</code></td>
+ <td>Вся рассматриваемая строка.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Точное число аргументов будет зависеть от того, был ли первым аргументом объект {{jsxref("Global_Objects/RegExp", "RegExp")}} и, если был, сколько подгрупп в нём определено.</p>
+
+<p>Следующий пример установит переменную <code>newString</code> в значение <code>'abc - 12345 - #$*%'</code>:</p>
+
+<pre class="brush: js">function replacer(match, p1, p2, p3, offset, string) {
+ // p1 - не цифры, p2 - цифры, p3 - не буквы и не цифры
+ return [p1, p2, p3].join(' - ');
+}
+var newString = 'abc12345#$*%'.replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_global_and_ignore_with_replace" name="Example:_Using_global_and_ignore_with_replace">Пример: использование флагов <code>global</code> и <code>ignore</code> с методом <code>replace()</code></h3>
+
+<p>В следующем примере регулярное выражение включает флаги для глобального поиска и игнорирования регистра, которые позволяют методу <code>replace()</code> заменить все вхождения слова «яблоки» в строке на слово «апельсины».</p>
+
+<pre class="brush: js">var re = /яблоки/gi;
+var str = 'Яблоки круглые и яблоки сочные.';
+var newstr = str.replace(re, 'апельсины');
+console.log(newstr); // апельсины круглые и апельсины сочные.
+</pre>
+
+<h3 id="Example_Defining_the_regular_expression_in_replace" name="Example:_Defining_the_regular_expression_in_replace">Пример: передача регулярного выражения в метод <code>replace()</code></h3>
+
+<p>В следующем примере в метод <code>replace()</code> передаётся регулярное выражение вместе с флагом игнорирования регистра.</p>
+
+<pre class="brush: js">// Ночь перед Рождеством, Xmas - сокращение для Christmas
+var str = 'Twas the night before Xmas...';
+var newstr = str.replace(/xmas/i, 'Christmas');
+console.log(newstr); // Twas the night before Christmas...
+</pre>
+
+<p>Пример выведет строку 'Twas the night before Christmas...'</p>
+
+<h3 id="Example_Switching_words_in_a_string" name="Example:_Switching_words_in_a_string">Пример: смена местами слов в строке</h3>
+
+<p>Следующий скрипт меняет местами слова в строке. В качестве текста замены он использует шаблоны замены <code>$1</code> и <code>$2</code>.</p>
+
+<pre class="brush: js">var re = /([А-ЯЁа-яё]+)\s([А-ЯЁа-яё]+)/;
+var str = 'Джон Смит';
+var newstr = str.replace(re, '$2, $1');
+console.log(newstr); // Смит, Джон
+</pre>
+
+<p>Пример выведет строку 'Смит, Джон'.</p>
+
+<h3 id="Example_Using_an_inline_function_that_modifies_the_matched_characters" name="Example:_Using_an_inline_function_that_modifies_the_matched_characters">Пример: использование функции для изменения сопоставившихся символов</h3>
+
+<p>В этом примере все входящие в строку (латинские) буквы в верхнем регистре преобразуются в нижний регистр, а перед самой буквой вставляется дефис. Здесь важно то, что прежде чем элемент вставится в качестве замены, над ним нужно провести дополнительные преобразования.</p>
+
+<p>Функция замены своим параметром принимает сопоставившийся кусок и перед возвратом использует его для преобразования регистра и соединения с дефисом.</p>
+
+<pre class="brush: js">function styleHyphenFormat(propertyName) {
+ function upperToHyphenLower(match) {
+ return '-' + match.toLowerCase();
+ }
+ return propertyName.replace(/[A-Z]/g, upperToHyphenLower);
+}
+</pre>
+
+<p>Вызов <code>styleHyphenFormat('borderTop')</code> вернёт строку 'border-top'.</p>
+
+<p>Поскольку мы хотим провести дополнительные преобразования <em>результата</em> сопоставления до того, как будет использована окончательная подстановка, мы должны использовать функцию. Это заставляет нас принудительно вычислить сопоставление перед использование метода {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}. Если бы мы попытались использовать сопоставление без функции, метод {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}} не сработал бы.</p>
+
+<pre class="brush: js">var newString = propertyName.replace(/[A-Z]/g, '-' + '$&amp;'.toLowerCase()); // не работает
+</pre>
+
+<p>Происходит это потому, что сначала часть <code>'$&amp;'.toLowerCase()</code> вычисляется в строковый литерал (результат по-прежнему равен <code>'$&amp;'</code>), а только потом его символы используются в качестве шаблона.</p>
+
+<h3 id="Example_Replacing_a_Fahrenheit_degree_with_its_Celsius_equivalent" name="Example:_Replacing_a_Fahrenheit_degree_with_its_Celsius_equivalent">Пример: замена градусов по Фаренгейту на эквивалент в градусах по Цельсию</h3>
+
+<p>В следующем примере градусы по Фаренгейту заменяются на эквивалентные градусы по Цельсию. Градусы по Фаренгейту должны быть числом, оканчивающимся на букву F. Функция возвращает количество градусов по Цельсию, оканчивающиеся на букву C. Например, если входное число равняется 212F, функция вернёт 100C. Если число равняется 0F, функция вернёт -17.77777777777778C.</p>
+
+<p>Регулярное выражение <code>test</code> сопоставляется с любым числом, оканчивающимся на букву F. Количество градусов по Фаренгейту передаётся в функцию через её второй параметр, <code>p1</code>. Функция переводит градусы по Фаренгейту, переданные в виде строки в функцию code&gt;f2c(), в градусы по Цельсию. Затем функция <code>f2c()</code> возвращает количество градусов по Цельсию. Эта функция работает примерно так же, как и флаг <code>s///e</code> в Perl.</p>
+
+<pre class="brush: js">function f2c(x) {
+ function convert(str, p1, offset, s) {
+ return ((p1 - 32) * 5/9) + 'C';
+ }
+ var s = String(x);
+ var test = /(\d+(?:\.\d*)?)F\b/g;
+ return s.replace(test, convert);
+}
+</pre>
+
+<h3 id="Example_Use_an_inline_function_with_a_regular_expression_to_avoid_for_loops" name="Example: Use an inline function with a regular expression to avoid for loops">Пример: использование функции вместе с регулярным выражением для избавления от цикла <code>for</code></h3>
+
+<p>Следующий пример принимает строку шаблона и преобразует её в массив объектов.</p>
+
+<p><strong>Входные данные:</strong></p>
+
+<p>Строка, состоящая из символов <code>x</code>, <code>-</code> и <code>_</code></p>
+
+<pre>x-x_
+x---x---x---x---
+x-xxx-xx-x-
+x_x_x___x___x___
+</pre>
+
+<p><strong>Выходные данные:</strong></p>
+
+<p>Массив объектов. Символ <code>'x'</code> означает состояние <code>'on'</code>, символ <code>'-'</code> (дефис) означает состояние <code>'off'</code>, а символ <code>'_'</code> (нижнее подчёркивание) означает продолжительность состояния <code>'on'</code>.</p>
+
+<pre class="brush: json">[
+ { on: true, length: 1 },
+ { on: false, length: 1 },
+ { on: true, length: 2 }
+ ...
+]
+</pre>
+
+<p><strong>Код:</strong></p>
+
+<pre class="brush: js">var str = 'x-x_';
+var retArr = [];
+str.replace(/(x_*)|(-)/g, function(match, p1, p2) {
+ if (p1) { retArr.push({ on: true, length: p1.length }); }
+ if (p2) { retArr.push({ on: false, length: 1 }); }
+});
+
+console.log(retArr);
+</pre>
+
+<p>Этот код сгенерирует массив из трёх объектов в описанном формате без использования цикла <code>for</code>.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.11', 'String.prototype.replace')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.replace', 'String.prototype.replace')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.String.replace")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.match()")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..f938fefb64
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/replaceall/index.html
@@ -0,0 +1,167 @@
+---
+title: String.prototype.replaceAll()
+slug: Web/JavaScript/Reference/Global_Objects/String/replaceAll
+translation_of: Web/JavaScript/Reference/Global_Objects/String/replaceAll
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary">Метод <strong><code>replaceAll()</code></strong> возвращает новую строку со всеми совпадениями <code>pattern</code> , который меняется на <code>replacement</code>. </span><code>pattern</code> может быть строкой или регулярным выражением, и <code>replacement</code> может быть строкой или функция возвращающая каждое совпадение.</p>
+
+<p>Исходная строка остается без изменений.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/string-replaceall.html")}}</div>
+
+<p class="hidden">Исходник этого интерактивного примера находится в GitHub репозитории. Если бы вы хотели внести свой вклад в создание интерактивных примеров для проекта, пожалуйста клонируйте ссылку <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отпрвате нам pull request.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox notranslate">const newStr = <var>str</var>.replaceAll(<var>regexp</var>|<var>substr</var>, <var>newSubstr</var>|<var>function</var>)
+</pre>
+
+<div class="blockIndicator note">
+<p>Когда вы используете `<var>regexp</var>` вы должны установить флаг глобального поиска ("g"), иначе вернется ошибка <code>TypeError</code>: "replaceAll must be called with a global RegExp".</p>
+</div>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code><var>regexp</var></code> (pattern)</dt>
+ <dd>Регулярное выражение или буква с глобальным флагом поиска ("g"). Совпадения меняются на <code><var>newSubstr</var></code> или значени возвращенное указанной функцией <code><var>function</var></code>. A RegExp без глобального флага поиска ("g") вернет ошибку <code>TypeError</code>: "replaceAll must be called with a global RegExp".</dd>
+ <dt><code><var>substr</var></code></dt>
+ <dd>Подстрока, которая заменится <code><var>newSubstr</var></code>. Обрабатывается как буквенная строка, не интерпретируется как регулярное выражение.</dd>
+ <dt><code><var>newSubstr</var></code> (replacement)</dt>
+ <dd>Новая строка, которая заменяет найденные подстроки указанные в <code><var>regexp</var></code> или <code><var>substr</var></code> парамерах. Поддерживается ряд специальных шаблонов замены; смотрите "<a href="#Specifying_a_string_as_a_parameter">Specifying a string as a parameter</a>" блок ниже.</dd>
+ <dt><code><var>function</var></code> (replacement)</dt>
+ <dd>Функция вызванная при создании новой строки которая используется для замены совпадений указанных в <code><var>regexp</var></code> or <code><var>substr</var></code>. Аргументы применяемы в этой функции описываются в "<a href="#Specifying_a_function_as_a_parameter">Specifying a function as a parameter</a>" блок ниже.</dd>
+</dl>
+
+<h3 id="Return_value">Return value</h3>
+
+<p>Новая строка, в которой все совпадения замены на уазанную подстроку или специальный шаблон.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот метод не изменяет исходную строку. Он просто возвращает новую.</p>
+
+<h3 id="Указание_строки_в_качестве_параметра">Указание строки в качестве параметра</h3>
+
+<p>Замененная строка может включатся в следующие специальные шаблоны:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th class="header" scope="col">Pattern</th>
+ <th class="header" scope="col">Inserts</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>$$</code></td>
+ <td>Вставляет <code>"$"</code>.</td>
+ </tr>
+ <tr>
+ <td><code>$&amp;</code></td>
+ <td>Вставлет совпадения.</td>
+ </tr>
+ <tr>
+ <td><code>$`</code></td>
+ <td>Вставляет часть строки которая находится перед совпадениями (строка соответствующая шаблону).</td>
+ </tr>
+ <tr>
+ <td><code>$'</code></td>
+ <td>Вставляет часть строки которая следует после совпадения (строка соответствующая шаблону).</td>
+ </tr>
+ <tr>
+ <td><code>$<var>n</var></code></td>
+ <td>Где <code><var>n</var></code> положительное цело число меньше чем 100, вставляет  <code><var>n</var></code>th строки указанные в скобках, частичные совпадения, при условии, что первый аргумент был {{jsxref("RegExp")}} object. Обратите внимание, что это 1-индексированный.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Указание_функции_в_качестве_параметра">Указание функции в качестве параметра</h3>
+
+<p>Вы можете передать функцию вторым параметром. Вэтом случае, функция вызывается полсе нахождения совпадений. Результат функции может быть использованна как замещающая строка. (<strong>Внимание:</strong> Выше упомянутые специальные шаблоны замены в данном случае неприменимы.)</p>
+
+<p>Функция может быть вызвана многократно для каждого замененного совпадения, если регудярное выражение указано с глобальным влагом("g").</p>
+
+<p>Функция имеет следующие аргументы:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th class="header" scope="col">Possible name</th>
+ <th class="header" scope="col">Supplied value</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>match</code></td>
+ <td>Найденная построка. (Соответствуетt <code>$&amp;</code> указанному выше)</td>
+ </tr>
+ <tr>
+ <td><code>p1, p2, ...</code></td>
+ <td><var>n</var>th количество строк найденых групповыми скобками указанные первым параметром в регулярном выражении. (Соответствует  <code>$1</code>, <code>$2</code>, см. выше) Для примера, если <code>/(\a+)(\b+)/</code>, то <code>p1</code> это <code>\a+</code>, а <code>p2</code> это<code>\b+</code>.</td>
+ </tr>
+ <tr>
+ <td><code>offset</code></td>
+ <td>Смещение совпадающей подстроки в пределах всей исследуемой строки. (Например, если вся строка была 'abcd', а соответствующая подстрока была 'bc', то этот аргумент будет равен 1.)</td>
+ </tr>
+ <tr>
+ <td><code>string</code></td>
+ <td>Исследуется вся цепочка.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>(Точное количество аргументов зависит от того, является ли первый аргумент регулярным выражением — и, если да, то аргументов будет столько сколько указанно в скобках.)</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Using_replaceAll">Using replaceAll</h3>
+
+<pre class="brush: js notranslate">'aabbcc'.replaceAll('b', '.');
+// 'aa..cc'</pre>
+
+<h3 id="Non-global_regex_throws">Non-global regex throws</h3>
+
+<p>Поиск с регулярными выражениями должен быть с ("g"). Это не работает:</p>
+
+<pre class="brush: js; example-bad notranslate">'aabbcc'.replaceAll(/b/, '.');
+TypeError: replaceAll must be called with a global RegExp
+</pre>
+
+<p>Это работает:</p>
+
+<pre class="brush: js; example-good notranslate">'aabbcc'.replaceAll(/b/g, '.');
+"aa..cc"
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.replaceall', 'String.prototype.replaceAll')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.replaceAll")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.replace", "String.prototype.replace()")}}</li>
+ <li>{{jsxref("String.prototype.match", "String.prototype.match()")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec", "RegExp.prototype.exec()")}}</li>
+ <li>{{jsxref("RegExp.prototype.test", "RegExp.prototype.test()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/search/index.html b/files/ru/web/javascript/reference/global_objects/string/search/index.html
new file mode 100644
index 0000000000..7900ac98a0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/search/index.html
@@ -0,0 +1,149 @@
+---
+title: String.prototype.search()
+slug: Web/JavaScript/Reference/Global_Objects/String/search
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/String/search
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>search()</code></strong> выполняет поиск сопоставления между регулярным выражением и этим объектом {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>str</var>.search([<var>regexp</var>])</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>regexp</code></dt>
+ <dd>Необязательный параметр. Объект регулярного выражения. Если будет передан не объект регулярного выражения, он будет неявно преобразован в объект {{jsxref("Global_Objects/RegExp", "RegExp")}} через вызов конструктора <code>new RegExp(regexp)</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>При успехе метод <code>search()</code> возвращает индекс первого сопоставления с регулярным выражением внутри строки. В противном случае метод вернёт -1.</p>
+
+<p>Если вы хотите узнать, находится ли шаблон в строке, используйте метод <code>search()</code> (он работает почти так же, как и метод {{jsxref("RegExp.prototype.test()", "test()")}} регулярного выражения, но вместо наличия подстроки возвращает её индекс); для получения дополнительной информации (за счёт более медленного выполнения) используйте метод {{jsxref("String.prototype.match()", "match()")}} (работает так же, как метод {{jsxref("RegExp.prototype.exec()", "exec()")}} регулярного выражения).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_search" name="Example:_Using_search">Пример: использование метода <code>search()</code></h3>
+
+<p>В следующем примере в журнал попадает сообщение, зависящее от успешности или неуспешности прохождения проверки.</p>
+
+<pre class="brush: js">function testInput(re, str) {
+ var midstring;
+ if (str.search(re) != -1) {
+ midstring = ' содержит ';
+ } else {
+ midstring = ' не содержит ';
+ }
+ console.log(str + midstring + re);
+}
+
+var testString = 'hey JuDe';
+var re = /[A-Z]/g;
+
+testInput(re, testString); // выведет: hey Jude содержит /[A-Z]/g
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.12', 'String.prototype.search')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.search', 'String.prototype.search')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Gecko-specific_notes" name="Gecko-specific_notes">Примечания по Gecko</h3>
+
+<ul>
+ <li>До версии {{Gecko("8.0")}}, метод <code>search()</code> был реализован неправильно; при вызове без параметров или с параметром {{jsxref("Global_Objects/undefined", "undefined")}}, он сопоставлялся строке 'undefined', вместо пустой строки. Это было исправлено; теперь и вызов <code>'a'.search()</code>, и вызов <code>'a'.search(undefined)</code> корректно возвращают 0.</li>
+</ul>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.match()")}}</li>
+ <li>{{jsxref("RegExp.prototype.exec()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..5b6f3895c4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/slice/index.html
@@ -0,0 +1,173 @@
+---
+title: String.prototype.slice()
+slug: Web/JavaScript/Reference/Global_Objects/String/slice
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/slice
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>slice()</code></strong> извлекает часть строки и возвращает новую строку без изменения оригинальной строки.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/string-slice.html", "taller")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>str</var>.slice(<var>beginIndex</var>[, <var>endIndex</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><em><code>beginIndex</code></em></dt>
+ <dd>Индекс, с которого начинать извлечение (нумерация начинается с нуля). Если аргумент отрицателен, то трактуется как <code><em>str</em>.length + <em>beginIndex</em></code> (например, если <em><code>beginIndex</code></em> равен <code>-3</code>, то он трактуется как <code><em>str</em>.length - 3</code>). Если <em><code>beginIndex</code></em>  не является числом при проверке {{jsxref('Number', 'Number(<var>beginIndex</var>)')}}, он трактуется как <code>0</code>.</dd>
+ <dd>Если <code><em>beginIndex</em></code> больше или равен <code><em>str</em>.length</code>, возвращается пустая строка.</dd>
+ <dt><em><code>endIndex</code></em></dt>
+ <dd>Индекс, <em>перед</em> которым заканчивать извлечение (нумерация начинается с нуля). Символ по этому индексу не будет включён.</dd>
+ <dd>Если <em><code>endIndex</code> </em>опущен или является <code>undefined</code> или больше чем <code><em>str</em>.length</code>, <code>slice()</code> извлечёт всё до конца строки. Если аргумент отрицателен, то трактуется как <code><em>str</em>.length + <em>endIndex</em></code><em> </em>(например, если <em><code>endIndex</code></em> равен <code>-3</code>, то он трактуется как <code><em>str</em>.length - 3</code>). Если аргумент не <code>undefined</code> и не является числом при проверке {{jsxref('Number', 'Number(<var>endIndex</var>)')}}, возвращается пустая строка.</dd>
+ <dd>Если <em><code>endIndex</code></em> указан и меньше <em><code>startIndex</code></em>, то возвращается пустая строка (например, <code>slice(-1, -3)</code> или <code>slice(3, 1)</code> вернут <code>""</code>).</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новая строка, содержащая извлеченную часть строки.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>slice()</code> извлекает текст из одной строки и возвращает новую строку. Изменения текста в одной строке не влияют на другую строку.</p>
+
+<p>Метод <code>slice()</code> извлекает все символы до индекса <em><code>endIndex</code></em>, не включая сам этот индекс. Вызов <code><em>str</em>.slice(1, 4)</code> извлечёт символы со второго по четвёртый (символы под индексами <code>1</code>, <code>2</code> и <code>3</code>).</p>
+
+<p>К примеру, вызов <code>str.slice(2, -1)</code> извлечёт символы с третьего по второй с конца строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_slice_to_create_a_new_string" name="Example:_Using_slice_to_create_a_new_string">Пример: использование метода <code>slice()</code> для создания новой строки</h3>
+
+<p>В следующем примере метод <code>slice()</code> используется для создания новой строки.</p>
+
+<pre class="brush: js notranslate">let str1 = 'Приближается утро.';
+let str2 = str1.slice(1, 8);
+let str3 = str1.slice(4, -2);
+let str4 = str1.slice(12);
+let str5 = str1.slice(30);
+
+console.log(str2); // ВЫВОД: риближа
+console.log(str3); // ВЫВОД: лижается утр
+console.log(str4); // ВЫВОД:  утро.
+console.log(str5); // ВЫВОД: ""
+</pre>
+
+<h3 id="Example_Using_slice_with_negative_indexes" name="Example:_Using_slice_with_negative_indexes">Пример: использование метода <code>slice()</code> с отрицательными индексами</h3>
+
+<p>В следующем примере метод <code>slice()</code> используется вместе с отрицательными индексами.</p>
+
+<pre class="brush: js notranslate">let str = 'Приближается утро.';
+str.slice(-3); // вернёт 'ро.'
+str.slice(-3, -1); // вернёт 'ро'
+str.slice(0, -1); // вернёт 'Приближается утро'
+</pre>
+
+<p>В этом примере начальным индексом считается <code>11</code>-й символ с конца строки, а конечным - <code>16</code>-й с начала.</p>
+
+<pre class="brush: js notranslate">str.slice(-11, 16); // вернет 'ается утр'</pre>
+
+<p>Здесь начальным индексом считается <code>6</code>-й символ от начала строки, а конечным - <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">7</span></font>-й с конца.</p>
+
+<pre class="brush: js notranslate">str.slice(6, -7); // вернет 'жаетс'</pre>
+
+<p>В этом примере оба индекса считаются с конца строки: <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">5</span></font>-й для начального индекса, <code>1</code>-й для конечного.</p>
+
+<pre class="brush: js notranslate">str.slice(-5, -1); // вернет 'утро'</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.13', 'String.prototype.slice')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.slice', 'String.prototype.slice')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.substr()")}}</li>
+ <li>{{jsxref("String.prototype.substring()")}}</li>
+ <li>{{jsxref("Array.prototype.slice()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/small/index.html b/files/ru/web/javascript/reference/global_objects/string/small/index.html
new file mode 100644
index 0000000000..00fd79119f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/small/index.html
@@ -0,0 +1,109 @@
+---
+title: String.prototype.small()
+slug: Web/JavaScript/Reference/Global_Objects/String/small
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/small
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>small()</code></strong> создаёт HTML-элемент {{HTMLElement("small")}}, заставляющий строку отображаться маленьким шрифтом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.small()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>small()</code> заключает строку в тег <code>&lt;small&gt;</code>: <code>"&lt;small&gt;str&lt;/small&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_small" name="Example:_Using_small">Пример: использование метода <code>small()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения размера строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+console.log(worldString.small()); // &lt;small&gt;Привет, мир&lt;/small&gt;
+console.log(worldString.big()); // &lt;big&gt;Привет, мир&lt;/big&gt;
+console.log(worldString.fontsize(7)); // &lt;fontsize=7&gt;Привет, мир&lt;/fontsize&gt;
+</pre>
+<p>При помощи объекта {{domxref("HTMLElement.style", "element.style")}} вы можете получить значение атрибута <code>style</code> элемента и управлять им более обобщённым способом, например:</p>
+<pre class="brush: js">document.getElementById('yourElemId').style.fontSize = '0.7em';
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.small', 'String.prototype.small')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.fontsize()")}}</li>
+ <li>{{jsxref("String.prototype.big()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/split/index.html b/files/ru/web/javascript/reference/global_objects/string/split/index.html
new file mode 100644
index 0000000000..90f94de449
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/split/index.html
@@ -0,0 +1,229 @@
+---
+title: String.prototype.split()
+slug: Web/JavaScript/Reference/Global_Objects/String/split
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+ - регулярные выражения
+translation_of: Web/JavaScript/Reference/Global_Objects/String/split
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>split()</code></strong> разбивает объект {{jsxref("Global_Objects/String", "String")}} на массив строк путём разделения строки указанной подстрокой.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>str</var>.split([<var>separator</var>[, <var>limit</var>]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>separator</code></dt>
+ <dd>Необязательный параметр. Указывает символы, используемые в качестве разделителя внутри строки. Параметр <code>separator</code> может быть как строкой, так и {{jsxref("Global_Objects/RegExp", "регулярным выражением", "", 1)}}. Если параметр опущен, возвращённый массив будет содержать один элемент со всей строкой. Если параметр равен пустой строке, строка <code>str</code> будет преобразована в массив символов.</dd>
+ <dt><code>limit</code></dt>
+ <dd>Необязательный параметр. Целое число, определяющее ограничение на количество найденных подстрок. Метод <code>split()</code> всё равно разделяет строку на каждом сопоставлении с разделителем <code>separator</code>, но обрезает возвращаемый массив так, чтобы он содержал не более <code>limit</code> элементов.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>split()</code> возвращает новый массив.</p>
+
+<p>Если разделитель <code>separator</code> найден, он удаляется из строки, а подстроки возвращаются в массиве. Если разделитель опущен, массив будет содержать только один элемент, состоящий из всей строки. Если разделитель является пустой строкой, строка <code>str</code> будет преобразована в массив символов.</p>
+
+<p>Если разделитель является регулярным выражением, содержащим подгруппы, то каждый раз при сопоставлении с разделителем, результаты (включая те, что не определены) захвата подгруппы будут помещаться внутрь выходного массива. Однако, не все браузеры поддерживают эту возможность.</p>
+
+<p>{{Note("Если строка является пустой строкой, метод <code>split()</code> вернёт массив, состоящий из одной пустой строки, а не пустой массив.")}}</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_split" name="Example:_Using_split">Пример: использование метода <code>split()</code></h3>
+
+<p>В следующем примере определяется функция, которая разбивает строку на массив строк, используя указанный разделитель. После разбиения строки, функция отображает сообщения, показывающие оригинальную строку (до разбиения), используемый разделитель, количество элементов в массиве и сами эти элементы.</p>
+
+<pre class="brush: js notranslate">function splitString(stringToSplit, separator) {
+ var arrayOfStrings = stringToSplit.split(separator);
+
+ console.log('Оригинальная строка: "' + stringToSplit + '"');
+ console.log('Разделитель: "' + separator + '"');
+ console.log('Массив содержит ' + arrayOfStrings.length + ' элементов: ' + arrayOfStrings.join(' / '));
+}
+
+// Строчка из «Бури» Шекспира. Перевод Миxаила Донского.
+var tempestString = 'И как хорош тот новый мир, где есть такие люди!';
+var monthString = 'Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек';
+
+var space = ' ';
+var comma = ',';
+
+splitString(tempestString, space);
+splitString(tempestString);
+splitString(monthString, comma);
+</pre>
+
+<p>Пример сгенерирует следующий вывод:</p>
+
+<pre class="notranslate">Оригинальная строка: "И как хорош тот новый мир, где есть такие люди!"
+Разделитель: " "
+Массив содержит 10 элементов: И / как / хорош / тот / новый / мир, / где / есть / такие / люди!
+
+Оригинальная строка: "И как хорош тот новый мир, где есть такие люди!"
+Разделитель: "undefined"
+Массив содержит 1 элементов: И как хорош тот новый мир, где есть такие люди!
+
+Оригинальная строка: "Янв,Фев,Мар,Апр,Май,Июн,Июл,Авг,Сен,Окт,Ноя,Дек"
+Разделитель: ","
+Массив содержит 12 элементов: Янв / Фев / Мар / Апр / Май / Июн / Июл / Авг / Сен / Окт / Ноя / Дек
+</pre>
+
+<h3 id="Example_Removing_spaces_from_a_string" name="Example:_Removing_spaces_from_a_string">Пример: удаление пробелов из строки</h3>
+
+<p>В следующем примере метод <code>split()</code> ищет 0 или более пробелов, за которыми следует точка с запятой, за которой снова следуют 0 или более пробелов, и, если этот шаблон найден, удаляет пробелы из строки. Переменная <code>nameList</code> является массивом, возвращённым в результате работы метода <code>split()</code>.</p>
+
+<pre class="brush: js notranslate">var names = 'Гарри Трамп ;Фрэд Барни; Хелен Ригби ; Билл Абель ;Крис Ханд ';
+
+console.log(names);
+
+var re = /\s*;\s*/;
+var nameList = names.split(re);
+
+console.log(nameList);
+</pre>
+
+<p>Пример напечатает две строки; на первой строке напечатана оригинальная строчка, а на второй — получившийся массив.</p>
+
+<pre class="notranslate">Гарри Трамп ;Фред Барни; Хелен Ригби ; Билл Абель ;Крис Ханд
+Гарри Трамп,Фред Барни,Хелен Ригби,Билл Абель,Крис Ханд
+</pre>
+
+<h3 id="Example_Returning_a_limited_number_of_splits" name="Example:_Returning_a_limited_number_of_splits">Пример: возврат ограниченного числа подстрок</h3>
+
+<p>В следующем примере метод <code>split()</code> ищет 0 или более пробелов в строке и возвращает первые три найденных подстроки.</p>
+
+<pre class="brush: js notranslate">var myString = 'Привет, мир. Как дела?';
+var splits = myString.split(' ', 3);
+
+console.log(splits);
+</pre>
+
+<p>Вывод скрипта будет следующим:</p>
+
+<pre class="brush: js notranslate">Привет,,мир.,Как
+</pre>
+
+<h3 id="Example_Capturing_parentheses" name="Example:_Capturing_parentheses">Пример: захват подгрупп</h3>
+
+<p>Если параметр <code>separator</code> содержит подгруппы, сопоставившиеся результаты также будут присутствовать в возвращённом массиве.</p>
+
+<pre class="brush: js notranslate">var myString = 'Привет 1 мир. Предложение номер 2.';
+var splits = myString.split(/(\d)/);
+
+console.log(splits);
+</pre>
+
+<p>Вывод скрипта будет следующим:</p>
+
+<pre class="brush: js notranslate">Привет ,1, мир. Предложение номер ,2,.
+</pre>
+
+<h3 id="Example_Reversing_a_String_using_split" name="Example:_Reversing_a_String_using_split">Пример: обращение строки при помощи метода <code>split()</code></h3>
+
+<pre class="brush: js notranslate">var str = 'фывапролд';
+var strReverse = str.split('').reverse().join(''); // 'длорпавыф'
+// split() возвращает массив, к которому применяются методы reverse() и join()
+</pre>
+
+<p><strong>Бонус:</strong> используя оператор {{jsxref("Operators/Comparison_Operators", "===", "#Identity_.2F_strict_equality_(.3D.3D.3D)")}}, можно проверить, являлась ли строка палиндромом.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.14', 'String.prototype.split')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.split', 'String.prototype.split')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.charAt()")}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+ <li>{{jsxref("Array.prototype.join()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/startswith/index.html b/files/ru/web/javascript/reference/global_objects/string/startswith/index.html
new file mode 100644
index 0000000000..d9228e2925
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/startswith/index.html
@@ -0,0 +1,81 @@
+---
+title: String.prototype.startsWith()
+slug: Web/JavaScript/Reference/Global_Objects/String/startsWith
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>startsWith()</code></strong> помогает определить, начинается ли строка с символов указаных в скобках, возвращая, соответственно, <code>true</code> или <code>false</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>str</var>.startsWith(<var>searchString</var>[, <var>position</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>searchString</code></dt>
+ <dd>Символы, искомые в начале данной строки.</dd>
+ <dt><code>position</code></dt>
+ <dd>Необязательный параметр. Позиция в строке, с которой начинать поиск  <code>searchString</code>; по умолчанию 0.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Этот метод позволяет определять, начинается ли строка с указанных в скобках символов.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_startsWith" name="Example:_Using_startsWith">Пример: использование метода <code>startsWith()</code></h3>
+
+<pre class="brush: js notranslate">var str = 'Быть или не быть, вот в чём вопрос.';
+
+console.log(str.startsWith('Быть')); // true
+console.log(str.startsWith('не быть')); // false
+console.log(str.startsWith('не быть', 9)); // true
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Этот метод был добавлен к спецификации ECMAScript 6 и может быть доступен ещё не во всех реализациях JavaScript. Однако, вы можете легко эмулировать этот метод при помощи следующего кода:</p>
+
+<pre class="brush: js notranslate">if (!String.prototype.startsWith) {
+ Object.defineProperty(String.prototype, 'startsWith', {
+ enumerable: false,
+ configurable: false,
+ writable: false,
+ value: function(searchString, position) {
+ position = position || 0;
+ return this.indexOf(searchString, position) === position;
+ }
+ });
+}
+</pre>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.String.startsWith")}}</p>
+
+<div id="compat-mobile"></div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.endsWith()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("String.prototype.includes()")}} {{experimental_inline}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/strike/index.html b/files/ru/web/javascript/reference/global_objects/string/strike/index.html
new file mode 100644
index 0000000000..5ecaf8cfb4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/strike/index.html
@@ -0,0 +1,114 @@
+---
+title: String.prototype.strike()
+slug: Web/JavaScript/Reference/Global_Objects/String/strike
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/strike
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>strike()</code></strong> создаёт HTML-элемент {{HTMLElement("strike")}}, заставляющий строку отображаться зачёркнутым текстом.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.strike()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>strike()</code> заключает строку в тег <code>&lt;strike&gt;</code>: <code>"&lt;strike&gt;str&lt;/strike&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_strike" name="Example:_Using_strike">Пример: использование метода <code>strike()</code></h3>
+<p>В следующем примере демонстрируется использование нескольких строковых методов для изменения форматирования строки:</p>
+<pre class="brush: js">var worldString = 'Привет, мир';
+
+document.write(worldString.blink());
+document.write(worldString.bold());
+document.write(worldString.italics());
+document.write(worldString.strike());
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">&lt;blink&gt;Привет, мир&lt;/blink&gt;
+&lt;b&gt;Привет, мир&lt;/b&gt;
+&lt;i&gt;Привет, мир&lt;/i&gt;
+&lt;strike&gt;Привет, мир&lt;/strike&gt;
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.strike', 'String.prototype.strike')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.blink()")}}</li>
+ <li>{{jsxref("String.prototype.bold()")}}</li>
+ <li>{{jsxref("String.prototype.italics()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/sub/index.html b/files/ru/web/javascript/reference/global_objects/string/sub/index.html
new file mode 100644
index 0000000000..69b0c4483c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/sub/index.html
@@ -0,0 +1,109 @@
+---
+title: String.prototype.sub()
+slug: Web/JavaScript/Reference/Global_Objects/String/sub
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/sub
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>sub()</code></strong> создаёт HTML-элемент {{HTMLElement("sub")}}, заставляющий строку отображаться подстрочным текстом (нижним индексом).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.sub()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>sub()</code> заключает строку в тег <code>&lt;sub&gt;</code>: <code>"&lt;sub&gt;str&lt;/sub&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_sub_and_sup_methods_to_format_a_string" name="Example:_Using_sub_and_sup_methods_to_format_a_string">Пример: использование методов <code>sub()</code> и <code>sup()</code></h3>
+<p>В следующем примере для форматирования строки используются методы <code>sub()</code> и {{jsxref("String.prototype.sup()", "sup()")}}:</p>
+<pre class="brush: js">var superText = 'надстрочный';
+var subText = 'подстрочный';
+
+document.write('Вот так выглядит ' + superText.sup() + ' текст.');
+document.write('Вот так выглядит ' + subText.sub() + ' текст.');
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">Вот так выглядит &lt;sup&gt;надстрочный&lt;/sup&gt; текст.
+Вот так выглядит &lt;sub&gt;подстрочный&lt;/sub&gt; текст.
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.sub', 'String.prototype.sub')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.sup()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/substr/index.html b/files/ru/web/javascript/reference/global_objects/string/substr/index.html
new file mode 100644
index 0000000000..cfc0191ea7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/substr/index.html
@@ -0,0 +1,116 @@
+---
+title: String.prototype.substr()
+slug: Web/JavaScript/Reference/Global_Objects/String/substr
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/substr
+---
+<div>
+<div>{{JSRef}}</div>
+
+<div></div>
+
+<div class="warning">Внимание: так как <code>String.prototype.substr(…)</code> не полностью упразднена (а лишь "удалена из стандартов по вебу"), она считается <strong>унаследованной функцией</strong>, использование которой лучше избегать там, где это возможно. Она не является частью ядра языка JavaScript и может быть удалена в будущем. Если есть возможность, используйте метод <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/String/substring">substring()</a></code>.</div>
+
+<p>Метод <strong><code>substr()</code></strong> возвращает указанное количество символов из строки, начиная с указанной позиции.</p>
+{{EmbedInteractiveExample("pages/js/string-substr.html")}}
+
+
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.substr(<var>start</var>[, <var>length</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>start</code></dt>
+ <dd>Позиция, с которой начинать извлекать символы. Если передано отрицательное число, она трактуется как <code>strLength - start</code>, где <code>strLength</code> равна длине строки (например, если параметр <code>start</code> равен -3, то он трактуется как <code>strLength - 3</code>.)</dd>
+ <dt><code>length</code></dt>
+ <dd>Необязательный параметр. Количество извлекаемых символов.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Новая строка, содержащая часть исходной, обрезанной по переданным параметрам.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Параметр <code>start</code> является индексом символа. Индекс первого символа равен 0, а последнего символа — на один меньше длины строки. Метод <code>substr()</code> начинает извлекать символы начиная с позиции <code>start</code> и собирая <code>length</code> символов (если он не достигнет раньше конца строки, в этом случае будет возвращено меньшее количество символов).</p>
+
+<p>Если параметр <code>start</code> является положительным и он больше, либо равен длине строки, метод <code>substr()</code> вернёт пустую строку.</p>
+
+<p>Если параметр <code>start</code> является отрицательным, метод <code>substr()</code> использует его как индекс символа, начиная с конца строки. Если параметр <code>start</code> отрицателен и по модулю больше длины строки, метод <code>substr()</code> будет использовать 0 в качестве начального индекса. Обратите внимание: описанная обработка отрицательных значений аргумента <code>start</code> не поддерживается JScript от Microsoft.</p>
+
+<p>Если параметр <code>length</code> равен нулю или отрицателен, метод <code>substr()</code> вернёт пустую строку. Если параметр <code>length</code> опущен, метод <code>substr()</code> извлечёт все символы до конца строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_substr" name="Example:_Using_substr">Использование метода <code>substr()</code></h3>
+
+<pre class="brush: js">var str = 'абвгдеёжзи';
+
+console.log('(1, 2): ' + str.substr(1, 2)); // '(1, 2): бв'
+console.log('(-3, 2): ' + str.substr(-3, 2)); // '(-3, 2): жз'
+console.log('(-3): ' + str.substr(-3)); // '(-3): жзи'
+console.log('(1): ' + str.substr(1)); // '(1): бвгдеёжзи'
+console.log('(-20, 2): ' + str.substr(-20, 2)); // '(-20, 2): аб'
+console.log('(20, 2): ' + str.substr(20, 2)); // '(20, 2): '
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>JScript от Microsoft не поддерживает отрицательные значения для начального индекса. Если вы хотите использовать эту возможность, вы можете использовать следующий код совместимости для обхода этой ошибки:</p>
+
+<pre class="brush: js">// only run when the substr() function is broken
+if ('ab'.substr(-1) != 'b') {
+ /**
+ * Get the substring of a string
+ * @param {integer} start where to start the substring
+ * @param {integer} length how many characters to return
+ * @return {string}
+ */
+ String.prototype.substr = function(substr) {
+ return function(start, length) {
+ // call the original method
+ return substr.call(this,
+ // did we get a negative start, calculate how much it is from the beginning of the string
+ // adjust the start parameter for negative value
+ start &lt; 0 ? this.length + start : start,
+ length)
+ }
+ }(String.prototype.substr);
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.substr', 'String.prototype.substr')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.substr")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.slice()")}}</li>
+ <li>{{jsxref("String.prototype.substring()")}}</li>
+</ul>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/string/substring/index.html b/files/ru/web/javascript/reference/global_objects/string/substring/index.html
new file mode 100644
index 0000000000..9efb4f84a8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/substring/index.html
@@ -0,0 +1,194 @@
+---
+title: String.prototype.substring()
+slug: Web/JavaScript/Reference/Global_Objects/String/substring
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - Référence(2)
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/substring
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>substring()</code></strong> возвращает подстроку строки между двумя индексами, или от одного индекса и до конца строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.substring(<var>indexA</var>[, <var>indexB</var>])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>indexA</code></dt>
+ <dd>Целое число от <code>0</code> до длины строки, определяющее смещение в строке первого символа, который будет включён в результирующую подстроку.</dd>
+ <dt><code>indexB</code></dt>
+ <dd>Необязательный параметр. Целое число от <code>0</code> до длины строки, определяющее смещение в строке первого символа, который <strong>не будет</strong> включён в результирующую подстроку.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>substring()</code> извлекает символы, начиная с индекса <code>indexA</code> до, но не включая, индекс <code>indexB</code>. В частности:</p>
+
+<ul>
+ <li>Если аргумент <code>indexA</code> равен аргументу <code>indexB</code>, метод <code>substring()</code> вернёт пустую строку.</li>
+ <li>Если аргумент <code>indexB</code> опущен, метод <code>substring()</code> извлечёт символы до конца строки.</li>
+ <li>Если любой из аргументов меньше, либо равен нулю или равен {{jsxref("Global_Objects/NaN", "NaN")}}, он будет трактоваться как равный 0.</li>
+ <li>Если любой из аргументов больше, чем <code>stringName.length</code>, он будет трактоваться как равный <code>stringName.length</code>.</li>
+</ul>
+
+<p>Если аргумент <code>indexA</code> будет больше аргумента <code>indexB</code>, то метод <code>substring()</code> сработает так, как если бы аргументы были поменяны местами; например, <code><em>str</em>.substring(1, 0) == <em>str</em>.substring(0, 1)</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_substring" name="Example:_Using_substring">Пример: использование метода <code>substring()</code></h3>
+
+<p>В следующем примере метод <code>substring()</code> используется для отображения символов из строки <code>'Mozilla'</code>:</p>
+
+<pre class="brush: js">var anyString = 'Mozilla';
+
+// Отобразит 'Moz'
+console.log(anyString.substring(0, 3));
+console.log(anyString.substring(3, 0));
+
+// Отобразит 'lla'
+console.log(anyString.substring(4, 7));
+console.log(anyString.substring(7, 4));
+
+// Отобразит 'Mozill'
+console.log(anyString.substring(0, 6));
+
+// Отобразит 'Mozilla'
+console.log(anyString.substring(0, 7));
+console.log(anyString.substring(0, 10));
+</pre>
+
+<h3 id="Example:_Using_substring_with_length_property" name="Example:_Using_substring_with_length_property">Пример: использование метода <code>substring()</code> вместе со свойством <code>length</code></h3>
+
+<p>Следующий пример использует метод <code>substring()</code> и свойство {{jsxref("String.length", "length")}} для извлечения последних символов из строки. Этот метод может оказаться легче для запоминания, особенно если учесть, что вам не нужно знать начальный и конечный индексы, как это было в примере выше.</p>
+
+<pre class="brush: js">// Отобразит 'illa' - последние 4 символа
+var anyString = 'Mozilla';
+var anyString4 = anyString.substring(anyString.length - 4);
+console.log(anyString4);
+
+// Отобразит 'zilla' - последние 5 символов
+var anyString = 'Mozilla';
+var anyString5 = anyString.substring(anyString.length - 5);
+console.log(anyString5);
+</pre>
+
+<h3 id="Example:_Replacing_a_substring_within_a_string" name="Example:_Replacing_a_substring_within_a_string">Пример: замена подстроки в строке</h3>
+
+<p>Следующий пример демонстрирует замену подстроки в строке. Он заменит как отдельные символы, так и целые подстроки. Вызов функции в конце примера изменит строку <code>'Дивный новый мир'</code> на строку <code>'Дивный новый веб'</code>.</p>
+
+<pre class="brush: js">// Заменяет oldS на newS в строке fullS
+function replaceString(oldS, newS, fullS) {
+ for (var i = 0; i &lt; fullS.length; ++i) {
+ if (fullS.substring(i, i + oldS.length) == oldS) {
+ fullS = fullS.substring(0, i) + newS + fullS.substring(i + oldS.length, fullS.length);
+ }
+ }
+ return fullS;
+}
+
+replaceString('мир', 'веб', 'Дивный новый мир');
+</pre>
+
+<p>Обратите внимание, что функция может скатиться в беcконечный цикл, если строка <code>oldS</code> сама является подстрокой для <code>newS</code> — например, если вы попытаетесь заменить слово «мир» на слово «другоймир». Лучше использоваться следующий метод для замены строк:</p>
+
+<pre class="brush: js">function replaceString(oldS, newS, fullS) {
+ return fullS.split(oldS).join(newS);
+}
+</pre>
+
+<p>Код выше следует рассматривать всего лишь как пример работы с подстроками. Если вам нужно заменить подстроки, скорее всего вы захотите использовать метод {{jsxref("String.prototype.replace()")}}.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.15', 'String.prototype.substring')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.substring', 'String.prototype.substring')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.substr()")}}</li>
+ <li>{{jsxref("String.prototype.slice()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/sup/index.html b/files/ru/web/javascript/reference/global_objects/string/sup/index.html
new file mode 100644
index 0000000000..092b08a314
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/sup/index.html
@@ -0,0 +1,109 @@
+---
+title: String.prototype.sup()
+slug: Web/JavaScript/Reference/Global_Objects/String/sup
+tags:
+ - Deprecated
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+ - Методы оборачивания в HTML
+translation_of: Web/JavaScript/Reference/Global_Objects/String/sup
+---
+<div>{{JSRef("Global_Objects", "String")}} {{deprecated_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>sup()</code></strong> создаёт HTML-элемент {{HTMLElement("sup")}}, заставляющий строку отображаться надстрочным текстом (верхним индексом).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.sup()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>sup()</code> заключает строку в тег <code>&lt;sup&gt;</code>: <code>"&lt;sup&gt;str&lt;/sup&gt;"</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_sub_and_sup_methods_to_format_a_string" name="Example:_Using_sub_and_sup_methods_to_format_a_string">Пример: использование методов <code>sub()</code> и <code>sup()</code></h3>
+<p>В следующем примере для форматирования строки используются методы {{jsxref("String.prototype.sub()", "sub()")}} и <code>sup()</code>:</p>
+<pre class="brush: js">var superText = 'надстрочный';
+var subText = 'подстрочный';
+
+document.write('Вот так выглядит ' + superText.sup() + ' текст.');
+document.write('Вот так выглядит ' + subText.sub() + ' текст.');
+</pre>
+<p>Этот пример генерирует такой же вывод, как и следующий HTML:</p>
+<pre class="brush: html">Вот так выглядит &lt;sup&gt;надстрочный&lt;/sup&gt; текст.
+Вот так выглядит &lt;sub&gt;подстрочный&lt;/sub&gt; текст.
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.sup', 'String.prototype.sup')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.<br>
+ Определена в (нормативном) Приложении B по Дополнительным возможностям ECMAScript для веб-браузеров.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.sub()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/tolocalelowercase/index.html b/files/ru/web/javascript/reference/global_objects/string/tolocalelowercase/index.html
new file mode 100644
index 0000000000..16950a2077
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/tolocalelowercase/index.html
@@ -0,0 +1,110 @@
+---
+title: String.prototype.toLocaleLowerCase()
+slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleLowerCase
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toLocaleLowerCase()</code></strong> возвращает значение строки, на которой он был вызван, преобразованное в нижний регистр согласно правилам преобразования регистра локали.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.toLocaleLowerCase()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toLocaleLowerCase()</code> возвращает значение строки, преобразованное в нижний регистр согласно правилам преобразования регистра локали. Метод <code>toLocaleLowerCase()</code> не изменяет значение самой строки. В большинстве случаев он возвращает тот же результат, что и метод {{jsxref("String.prototype.toLowerCase()", "toLowerCase()")}}, но для некоторых локалей, например, турецкой, в которой правила преобразования регистра отличаются от правил по умолчанию, принятых в Юникоде, он может вернуть другой результат.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleLowerCase" name="Example:_Using_toLocaleLowerCase">Пример: использование метода <code>toLocaleLowerCase()</code></h3>
+<pre class="brush: js">console.log('АЛФАВИТ'.toLocaleLowerCase()); // 'алфавит'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.17', 'String.prototype.toLocaleLowerCase')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.tolocalelowercase', 'String.prototype.toLocaleLowerCase')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.toLocaleUpperCase()")}}</li>
+ <li>{{jsxref("String.prototype.toLowerCase()")}}</li>
+ <li>{{jsxref("String.prototype.toUpperCase()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html b/files/ru/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html
new file mode 100644
index 0000000000..290852f30e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/tolocaleuppercase/index.html
@@ -0,0 +1,110 @@
+---
+title: String.prototype.toLocaleUpperCase()
+slug: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase
+tags:
+ - Internationalization
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toLocaleUpperCase
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toLocaleUpperCase()</code></strong> возвращает значение строки, на которой он был вызван, преобразованное в верхний регистр согласно правилам преобразования регистра локали.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.toLocaleUpperCase()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toLocaleUpperCase()</code> возвращает значение строки, преобразованное в верхний регистр согласно правилам преобразования регистра локали. Метод <code>toLocaleUpperCase()</code> не изменяет значение самой строки. В большинстве случаев он возвращает тот же результат, что и метод {{jsxref("String.prototype.toUpperCase()", "toUpperCase()")}}, но для некоторых локалей, например, турецкой, в которой правила преобразования регистра отличаются от правил по умолчанию, принятых в Юникоде, он может вернуть другой результат.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLocaleUpperCase" name="Example:_Using_toLocaleUpperCase">Пример: использование метода <code>toLocaleUpperCase()</code></h3>
+<pre class="brush: js">console.log('алфавит'.toLocaleUpperCase()); // 'АЛФАВИТ'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.19', 'String.prototype.toLocaleUpperCase')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.tolocaleuppercase', 'String.prototype.toLocaleUpperCase')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.toLocaleLowerCase()")}}</li>
+ <li>{{jsxref("String.prototype.toLowerCase()")}}</li>
+ <li>{{jsxref("String.prototype.toUpperCase()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/tolowercase/index.html b/files/ru/web/javascript/reference/global_objects/string/tolowercase/index.html
new file mode 100644
index 0000000000..c79c41ad6e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/tolowercase/index.html
@@ -0,0 +1,109 @@
+---
+title: String.prototype.toLowerCase()
+slug: Web/JavaScript/Reference/Global_Objects/String/toLowerCase
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toLowerCase
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toLowerCase()</code></strong> возвращает значение строки, на которой он был вызван, преобразованное в нижний регистр.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.toLowerCase()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toLowerCase()</code> возвращает значение строки, преобразованное в нижний регистр. Метод <code>toLowerCase()</code> не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toLowerCase" name="Example:_Using_toLowerCase">Пример: использование метода <code>toLowerCase()</code></h3>
+<pre class="brush: js">console.log('АЛФАВИТ'.toLowerCase()); // 'алфавит'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.16', 'String.prototype.toLowerCase')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.tolowercase', 'String.prototype.toLowerCase')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.toLocaleLowerCase()")}}</li>
+ <li>{{jsxref("String.prototype.toLocaleUpperCase()")}}</li>
+ <li>{{jsxref("String.prototype.toUpperCase()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/tosource/index.html b/files/ru/web/javascript/reference/global_objects/string/tosource/index.html
new file mode 100644
index 0000000000..3570fd5b48
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/tosource/index.html
@@ -0,0 +1,91 @@
+---
+title: String.prototype.toSource()
+slug: Web/JavaScript/Reference/Global_Objects/String/toSource
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toSource
+---
+<div>{{JSRef("Global_Objects", "String")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toSource()</code></strong> возвращает строковое представление исходного кода объекта.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>String.toSource()
+<var>str</var>.toSource()
+</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toSource()</code> возвращает следующие значения:</p>
+<ul>
+ <li>Для встроенного объекта {{jsxref("Global_Objects/String", "String")}} метод <code>toSource()</code> возвращает следующую строку, указывающую, что исходный код недоступен:
+<pre class="brush: js">function String() {
+ [native code]
+}
+</pre>
+ </li>
+ <li>Для экземпляров объекта {{jsxref("Global_Objects/String", "String")}} или строковых литералов, метод <code>toSource()</code> возвращает строковое представление исходного кода.</li>
+</ul>
+<p>Этот метод обычно вызывается внутренними механизмаим движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.3.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/tostring/index.html b/files/ru/web/javascript/reference/global_objects/string/tostring/index.html
new file mode 100644
index 0000000000..6987aa12ba
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/tostring/index.html
@@ -0,0 +1,111 @@
+---
+title: String.prototype.toString()
+slug: Web/JavaScript/Reference/Global_Objects/String/toString
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toString
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toString()</code></strong> возвращает строку, представляющую указанный объект.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.toString()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Объект {{jsxref("Global_Objects/String", "String")}} переопределяет метод <code>toString()</code>, унаследованный из объекта {{jsxref("Global_Objects/Object", "Object")}}; он не наследует метод {{jsxref("Object.prototype.toString()")}}. Для объектов {{jsxref("Global_Objects/String", "String")}} метод <code>toString()</code> возвращает строку, представляющую объект и делает тоже самое, что и метод {{jsxref("String.prototype.valueOf()")}}.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toString" name="Example:_Using_toString">Пример: использование метода <code>toString()</code></h3>
+<p>В следующем примере выводится строковое значение объекта {{jsxref("Global_Objects/String", "String")}}:</p>
+<pre class="brush: js">var x = new String('Привет, мир');
+
+console.log(x.toString()); // Отобразит 'Привет, мир'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.2', 'String.prototype.toString')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.tostring', 'String.prototype.toString')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Object.prototype.toSource()")}}</li>
+ <li>{{jsxref("String.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/touppercase/index.html b/files/ru/web/javascript/reference/global_objects/string/touppercase/index.html
new file mode 100644
index 0000000000..96354d60e9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/touppercase/index.html
@@ -0,0 +1,109 @@
+---
+title: String.prototype.toUpperCase()
+slug: Web/JavaScript/Reference/Global_Objects/String/toUpperCase
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/toUpperCase
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>toUpperCase()</code></strong> возвращает значение строки, на которой он был вызван, преобразованное в верхний регистр.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.toUpperCase()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>toUpperCase()</code> возвращает значение строки, преобразованное в верхний регистр. Метод <code>toUpperCase()</code> не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_toUpperCase" name="Example:_Using_toUpperCase">Пример: использование метода <code>toUpperCase()</code></h3>
+<pre class="brush: js">console.log('алфавит'.toUpperCase()); // 'АЛФАВИТ'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.18', 'String.prototype.toUpperCase')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.touppercase', 'String.prototype.toUpperCase')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.toLocaleLowerCase()")}}</li>
+ <li>{{jsxref("String.prototype.toLocaleUpperCase()")}}</li>
+ <li>{{jsxref("String.prototype.toLowerCase()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/trim/index.html b/files/ru/web/javascript/reference/global_objects/string/trim/index.html
new file mode 100644
index 0000000000..e7f2037942
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/trim/index.html
@@ -0,0 +1,135 @@
+---
+title: String.prototype.trim()
+slug: Web/JavaScript/Reference/Global_Objects/String/Trim
+tags:
+ - ECMAScript5
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/Trim
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>trim()</code></strong> удаляет пробельные символы с начала и конца строки. Пробельными символами в этом контексте считаются все собственно пробельные символы (пробел, табуляция, неразрывный пробел и прочие) и все символы конца строки (LF, CR и прочие).</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.trim()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>trim()</code> возвращает строку с вырезанными пробельными символами с её концов. Метод <code>trim()</code> не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_trim" name="Example:_Using_trim">Пример: использование метода <code>trim()</code></h3>
+
+<p>Следующий пример покажет строку <code>'foo'</code>:</p>
+
+<pre class="brush: js">var orig = ' foo ';
+console.log(orig.trim()); // 'foo'
+
+// Другой пример, в котором .trim() убирает пробельные символы только с одной стороны.
+
+var orig = 'foo ';
+console.log(orig.trim()); // 'foo'
+</pre>
+
+<h2 id="Polyfill" name="Polyfill">Полифилл</h2>
+
+<p>Запуск следующего кода до любого другого создаст метод <code>trim()</code>, если он ещё не реализуется браузером.</p>
+
+<pre class="brush: js">if (!String.prototype.trim) {
+ (function() {
+ // Вырезаем BOM и неразрывный пробел
+ String.prototype.trim = function() {
+ return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+ };
+ })();
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.20', 'String.prototype.trim')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.8.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.trim', 'String.prototype.trim')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("5")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.trimLeft()")}} {{non-standard_inline}}</li>
+ <li>{{jsxref("String.prototype.trimRight()")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/trimleft/index.html b/files/ru/web/javascript/reference/global_objects/string/trimleft/index.html
new file mode 100644
index 0000000000..f60326e795
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/trimleft/index.html
@@ -0,0 +1,93 @@
+---
+title: String.prototype.trimLeft()
+slug: Web/JavaScript/Reference/Global_Objects/String/TrimLeft
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/trimStart
+---
+<div>{{JSRef("Global_Objects", "String")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>trimLeft()</code></strong> удаляет пробельные символы с левого конца строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.trimLeft()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>trimLeft()</code> возвращает строку с вырезанными пробельными символами с её левого конца. Метод <code>trimLeft()</code> не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_trimLeft" name="Example:_Using_trimLeft">Пример: использование метода <code>trimLeft()</code></h3>
+<p>Следующий пример покажет строку <code style="white-space: pre;">'foo '</code>:</p>
+<pre class="brush: js; highlight: [5]">var str = ' foo ';
+
+console.log(str.length); // 8
+
+str = str.trimLeft();
+console.log(str.length); // 5
+console.log(str); // 'foo '
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.8.1.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.trim()")}}</li>
+ <li>{{jsxref("String.prototype.trimRight()")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/trimright/index.html b/files/ru/web/javascript/reference/global_objects/string/trimright/index.html
new file mode 100644
index 0000000000..4a7bd8e907
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/trimright/index.html
@@ -0,0 +1,93 @@
+---
+title: String.prototype.trimRight()
+slug: Web/JavaScript/Reference/Global_Objects/String/TrimRight
+tags:
+ - JavaScript
+ - Method
+ - Non-standard
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/trimEnd
+---
+<div>{{JSRef("Global_Objects", "String")}} {{non-standard_header}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Метод <strong><code>trimRight()</code></strong> удаляет пробельные символы с правого конца строки.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code><var>str</var>.trimRight()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Метод <code>trimRight()</code> возвращает строку с вырезанными пробельными символами с её правого конца. Метод <code>trimRight()</code> не изменяет значение самой строки.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_trimRight" name="Example:_Using_trimRight">Пример: использование метода <code>trimRight()</code></h3>
+<p>Следующий пример покажет строку <code style="white-space: pre;">' foo'</code>:</p>
+<pre class="brush: js; highlight: [5]">var str = ' foo ';
+
+console.log(str.length); // 8
+
+str = str.trimRight();
+console.log(str.length); // 5
+console.log(str); // ' foo'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<p>Не является частью какого-либо стандарта. Реализована в JavaScript 1.8.1.</p>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("String.prototype.trim()")}}</li>
+ <li>{{jsxref("String.prototype.trimLeft()")}} {{non-standard_inline}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/string/valueof/index.html b/files/ru/web/javascript/reference/global_objects/string/valueof/index.html
new file mode 100644
index 0000000000..26eba20671
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/string/valueof/index.html
@@ -0,0 +1,120 @@
+---
+title: String.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/String/valueOf
+tags:
+ - JavaScript
+ - Method
+ - Prototype
+ - Reference
+ - String
+translation_of: Web/JavaScript/Reference/Global_Objects/String/valueOf
+---
+<div>{{JSRef("Global_Objects", "String")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Метод <strong><code>valueOf()</code></strong> возвращает примитивное значение объекта {{jsxref("Global_Objects/String", "String")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>str</var>.valueOf()</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Метод <code>valueOf()</code> возвращает примитивное значение объекта {{jsxref("Global_Objects/String", "String")}} в виде строкового типа данных. Это значение эквивалентно значению вызова метода {{jsxref("String.prototype.toString()")}}.</p>
+
+<p>Этот метод обычно вызывается внутренними механизмами движка JavaScript, а не явно в коде.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование метода <code>valueOf()</code></h3>
+
+<pre class="brush: js">var x = new String('Привет, мир');
+console.log(x.valueOf()); // Отобразит 'Привет, мир'
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5.4.3', 'String.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-string.prototype.valueof', 'String.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.toString()")}}</li>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html b/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html
new file mode 100644
index 0000000000..680100f800
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/@@toprimitive/index.html
@@ -0,0 +1,66 @@
+---
+title: 'Symbol.prototype[@@toPrimitive]'
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive
+tags:
+ - ECMAScript 2015
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - Symbol
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/@@toPrimitive
+---
+<div>{{JSRef}}</div>
+
+<div></div>
+
+<p>Метод <code><strong>[@@toPrimitive]()</strong></code>  <span style="font-size: 1rem; letter-spacing: -0.00278rem;">преобразует объект Symbol в примитивное значение.</span></p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Symbol()[Symbol.toPrimitive](hint)
+</var></pre>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Примитивное значение указанного объекта Symbol {{jsxref("Symbol")}}.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>[@@toPrimitive]()</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> возвращает примитивное значение объекта Symbol как тип данных Symbol. Аргумент </span><code style="font-size: 1rem; letter-spacing: -0.00278rem;">hint</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> не используется.</span></p>
+
+<p>JavaScript вызывает метод<code style="font-size: 1rem; letter-spacing: -0.00278rem;">[@@toPrimitive] ()</code><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> для преобразования объекта в примитив. </span><span style="font-size: 1rem; letter-spacing: -0.00278rem;">JavaScript автоматически вызывает метод, когда на месте</span><span style="font-size: 1rem; letter-spacing: -0.00278rem;"> объекта ожидается примитивное значение.</span></p>
+
+<h2 id="Спефикации">Спефикации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.prototype-@@toprimitive', 'Symbol.prototype.@@toPrimitive')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Symbol.@@toPrimitive")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.toPrimitive")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/for/index.html b/files/ru/web/javascript/reference/global_objects/symbol/for/index.html
new file mode 100644
index 0000000000..5b4a6ee85c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/for/index.html
@@ -0,0 +1,140 @@
+---
+title: Symbol.for()
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/for
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>Symbol.for(key)</strong></code> ищет ранее созданный разделяемый символ по заданному ключу и возвращает его, если он найден. В противном случае создается новый разделяемый символ для данного ключа в глобальном реестре символов.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Symbol.for(key)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Строка, обязательный. Идентификатор символа (также используется в качестве описания символа).</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В противоположность вызову <code>Symbol()</code>, функция <code>Symbol.for()</code> создаёт символ, доступный в глобальном списке реестра символов. <code>Symbol.for()</code> не создаёт новый символ при каждом вызове, вместо этого, метод сначала проверяет, существует ли символ с заданным идентификатором в реестре — и возвращает его, если тот присутствует. Если символ с заданным ключом не найден, <code>Symbol.for()</code> создаст новый глобальный символ.</p>
+
+<h3 id="Глобальный_реестр">Глобальный реестр</h3>
+
+<p>Глобальный реестр символов — это список со следующей структурой записей и пустой при инициализации:</p>
+
+<table class="standard-table">
+ <caption>Элемент глобального реестра символов</caption>
+ <tbody>
+ <tr>
+ <th>Поле</th>
+ <th>Значение</th>
+ </tr>
+ <tr>
+ <td>[[key]]</td>
+ <td>Строка, используемая в качестве идентификатора.</td>
+ </tr>
+ <tr>
+ <td>[[symbol]]</td>
+ <td>Символ, хранящийся глобально.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">Symbol.for("foo"); // создаёт новый глобальный символ
+Symbol.for("foo"); // возвращает символ, созданный прежде
+
+// Одинаковый глобальный символ, но не локальный
+Symbol.for("bar") === Symbol.for("bar"); // true
+Symbol("bar") === Symbol("bar"); // false
+
+// Идентификатор также используется в качестве описания
+var sym = Symbol.for("mario");
+sym.toString(); // "Symbol(mario)"
+</pre>
+
+<p>Чтобы предотвратить конфликт имён ваших глобальных символов и глобальных символов из других библиотек, может оказаться неплохой идеей использование префиксов:</p>
+
+<pre class="brush: js">Symbol.for("mdn.foo");
+Symbol.for("mdn.bar");
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.for', 'Symbol.for')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatChrome(40) }}</td>
+ <td>{{ CompatGeckoDesktop("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.prototype.keyFor()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html b/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html
new file mode 100644
index 0000000000..48c2d59173
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/hasinstance/index.html
@@ -0,0 +1,71 @@
+---
+title: Symbol.hasInstance
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance
+tags:
+ - JavaScript
+ - Property
+ - Symbol
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/hasInstance
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>Symbol.hasInstance</code></strong> — известный символ, который используется для определения является ли объект экземпляром конструктора. Этот символ используется для изменения поведения оператора {{jsxref("Operators/instanceof", "instanceof")}}.</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Поведение <code>instanceof</code> может быть изменено, например, следующим образом:</p>
+
+<pre class="brush: js">class MyArray {
+ static [Symbol.hasInstance](instance) {
+ return Array.isArray(instance);
+ }
+}
+console.log([] instanceof MyArray); // true</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.hasinstance', 'Symbol.hasInstance')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Symbol.hasInstance")}}</p>
+
+<p> </p>
+
+<div id="compat-desktop"> </div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Operators/instanceof", "instanceof")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/index.html b/files/ru/web/javascript/reference/global_objects/symbol/index.html
new file mode 100644
index 0000000000..9dbecb81cb
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/index.html
@@ -0,0 +1,227 @@
+---
+title: Symbol
+slug: Web/JavaScript/Reference/Global_Objects/Symbol
+tags:
+ - API
+ - ECMAScript6
+ - JavaScript
+ - Symbol
+ - Символы
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol
+---
+<div>{{JSRef}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p><strong style="line-height: 1.5;">Символ (анг. Symbol)</strong><span style="line-height: 1.5;"> — это уникальный и неизменяемый тип данных, который может быть использован как идентификатор для свойств объектов. </span><em>Символьный объект (анг. symbol object) </em>— это объект-обёртка (англ. wrapper) для <span style="line-height: 1.5;">{{Glossary("Primitive", "примитивного")}} символьного типа.</span></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>Symbol(<em>[описание]</em>)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>описание</code> {{optional_inline}}</dt>
+ <dd>Необязательный, строка. Описание символа, которое может быть использовано во время отладки, но не для доступа к самому символу.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Чтобы создать новый символьный примитив, достаточно написать <code>Symbol()</code>, указав по желанию строку в качестве описания этого символа:</p>
+
+<pre class="brush: js">var sym1 = Symbol();
+var sym2 = Symbol("foo");
+var sym3 = Symbol("foo");
+</pre>
+
+<p>Код выше создает три новых символа. Заметьте, что <code>Symbol("foo")</code> не выполняет приведение (англ. coercion) строки "foo" к символу. Это выражение создает каждый раз новый символ:</p>
+
+<pre class="brush: js">Symbol("foo") === Symbol("foo"); // false</pre>
+
+<p>Код ниже с оператором {{jsxref("Operators/new", "new")}} бросит исключение {{jsxref("TypeError")}}:</p>
+
+<pre class="brush: js">var sym = new Symbol(); // TypeError</pre>
+
+<p>Это удерживает разработчиков от создания явного объекта-обёртки <code>Symbol </code>вместо нового символьного значения. Создание явных объектов-обёрток для примитивных типов доступно (например, <code>new Boolean</code>, <code>new String</code>, <code>new Number</code>).</p>
+
+<p>Если вам действительно необходимо обернуть символ в объект, вы можете использовать функцию <code>Object()</code>:</p>
+
+<pre class="brush: js">var sym = Symbol("foo");
+typeof sym; // "symbol"
+var symObj = Object(sym);
+typeof symObj; // "object"
+</pre>
+
+<h3 id="Разделяемые_символы_в_глобальном_символьном_реестре">Разделяемые символы в глобальном символьном реестре</h3>
+
+<p>Приведенный выше синтаксис, использующий функцию <code>Symbol(),</code> не создаст глобальный символ, который был бы доступен в любом месте вашего кода. Для создания символов, доступных во всех файлах и в окружении (глобальной области), используйте методы {{jsxref("Symbol.for()")}} и {{jsxref("Symbol.keyFor()")}}, чтобы задать или получить символ из глобального символьного реестра.</p>
+
+<h3 id="Поиск_символьных_свойств_у_объектов">Поиск символьных свойств у объектов</h3>
+
+<p>Метод {{jsxref("Object.getOwnPropertySymbols()")}} возвращает массив символов и позволяет получить символьные свойства конкретного объекта. Следует заметить, что при инициализации объекты не получают символьных свойств, так что этот массив будет пуст, пока вы не зададите ему какое-либо символьное свойство.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>Symbol.length</code></dt>
+ <dd>Содержит длину, всегда равную 0 (нулю).</dd>
+ <dt>{{jsxref("Symbol.prototype")}}</dt>
+ <dd>Содержит прототип конструктора <code>Symbol</code>.</dd>
+</dl>
+
+<h3 id="Известные_символы">Известные символы</h3>
+
+<p>В добавок к вашим собственным символам, JavaScript имеет несколько встроенных символов, представляющих внутренние механизмы языка, которые не были доступны разработчикам в версиях ECMAScript 5 и более ранних. Эти символы доступны посредством следующих свойств:</p>
+
+<dl>
+ <dt>
+ <h4 id="Итерационные_символы">Итерационные символы</h4>
+ </dt>
+ <dt>{{jsxref("Symbol.iterator")}}</dt>
+ <dd>Метод, возвращающий итератор по умолчанию для объекта. Используется конструкцией {{jsxref("Statements/for...of","for...of")}}.</dd>
+ <dt>
+ <h4 id="Символы_регулярных_выражений">Символы регулярных выражений</h4>
+ </dt>
+ <dt>{{jsxref("Symbol.match")}}</dt>
+ <dd>Метод для сопоставления объекта со строкой, также используемый для определения возможности объекта выступать в качестве регулярного выражения. Используется функцией {{jsxref("String.prototype.match()")}}.</dd>
+ <dt>{{jsxref("Symbol.replace")}}</dt>
+ <dd>Метод, заменяющий совпавшие подстроки в строке. Используется функцией {{jsxref("String.prototype.replace()")}}.</dd>
+ <dt>{{jsxref("Symbol.search")}}</dt>
+ <dd>Метод, возвращающий индекс вхождения подстроки, соответствующей регулярному выражению. Используется функцией {{jsxref("String.prototype.search()")}}.</dd>
+ <dt>{{jsxref("Symbol.split")}}</dt>
+ <dd>Метод, разбивающий строку на части в местах, соответствующих регулярному выражению. Используется функцией {{jsxref("String.prototype.split()")}}. </dd>
+ <dt>
+ <h4 id="Другие_символы">Другие символы</h4>
+ </dt>
+ <dt>{{jsxref("Symbol.hasInstance")}}</dt>
+ <dd>Метод, определяющий, распознает ли конструктор некоторый объект как свой экземпляр. Используется оператором {{jsxref("Operators/instanceof", "instanceof")}}.</dd>
+ <dt>{{jsxref("Symbol.isConcatSpreadable")}}</dt>
+ <dd>Булево значение, показывающее, должен ли объект быть сведен к плоскому представлению (англ. flatten) в виде массива его элементов функцией {{jsxref("Array.prototype.concat()")}}.</dd>
+ <dt>{{jsxref("Symbol.unscopables")}}</dt>
+ <dd>Массив строковых имен свойств. Позволяет скрыть свойства от инструкции with (прежде всего для обратной совместимости).</dd>
+ <dt>{{jsxref("Symbol.species")}}</dt>
+ <dd>Метод, определяющий конструктор для порождённых объектов.</dd>
+ <dt>{{jsxref("Symbol.toPrimitive")}}</dt>
+ <dd>Метод, преобразующий объект в примитив (примитивное значение).</dd>
+ <dt>{{jsxref("Symbol.toStringTag")}}</dt>
+ <dd>Строковое значение, используемое в качестве описания объекта по умолчанию. Используется функцией {{jsxref("Object.prototype.toString()")}}</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Symbol.for()", "Symbol.for(key)")}}</dt>
+ <dd>Ищет существующие символы по заданному ключу и возвращает его, если он найден. В противном случае создается новый символ для данного ключа в глобальном реестре символов.</dd>
+ <dt>{{jsxref("Symbol.keyFor", "Symbol.keyFor(sym)")}}</dt>
+ <dd>Получает по разделямому символу его ключ из глобального реестра символов.</dd>
+</dl>
+
+<h2 id="Boolean_instances" name="Boolean_instances"><code><span style="font-family: open sans,sans-serif; font-size: 2.14285714285714rem;">Прототип </span>Symbol</code></h2>
+
+<p>Все символы наследуют от {{jsxref("Symbol.prototype")}}.</p>
+
+<h3 id="Свойства">Свойства</h3>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Properties')}}</p>
+
+<h3 id="Методы">Методы</h3>
+
+<p>{{page('en-US/Web/JavaScript/Reference/Global_Objects/Symbol/prototype','Methods')}}</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Creating_Boolean_objects_with_an_initial_value_of_false" name="Creating_Boolean_objects_with_an_initial_value_of_false">Использование оператора <code>typeof</code> с символами</h3>
+
+<p>Оператор {{jsxref("Operators/typeof", "typeof")}} позволяет идентифицировать символ.</p>
+
+<pre class="brush: js">typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+</pre>
+
+<h3 id="Преобразование_типов_с_символами">Преобразование типов с символами</h3>
+
+<p>Следующее необходимо помнить при преобразовании типа символов.</p>
+
+<ul>
+ <li>При попытке конвертировать символ в число, будет брошено исключение {{jsxref("TypeError")}} (напр., <code>+sym</code> или <code>sym | 0</code>).</li>
+ <li>Результатом нестрогого сравнения, <code>Object(sym) == sym</code>, будет <code>true.</code></li>
+ <li><code>Symbol("foo") + "bar" </code>бросает исключение {{jsxref("TypeError")}} (невозможно преобразовать символ в строку). Это удерживает разработчика от, к примеру, случайного создания строкого поля у объекта из символа.</li>
+ <li>Более  <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#String_conversion">"безопасный" вызов <code>String(sym)</code></a> работает с символами как вызов {{jsxref("Symbol.prototype.toString()")}}. Заметьте, что в то же время <code>new String(sym)</code> бросит исключение.</li>
+</ul>
+
+<h3 id="Символы_и_конструкция_for...in">Символы и конструкция <code>for...in</code></h3>
+
+<p>Символы не перечисляются при итерации {{jsxref("Statements/for...in","for...in")}}. В дополнение к этому, {{jsxref("Object.getOwnPropertyNames()")}} не вернет символьные свойства объекта. Тем не менее, их можно получить с помощью {{jsxref("Object.getOwnPropertySymbols()")}}.</p>
+
+<pre class="brush: js">var obj = {};
+
+obj[Symbol("a")] = "a";
+obj[Symbol.for("b")] = "b";
+obj["c"] = "c";
+obj.d = "d";
+
+for (var i in obj) {
+ console.log(i); // выведет "c" и "d"
+}</pre>
+
+<h3 id="Символы_и_JSON.stringify">Символы и <code>JSON.stringify()</code></h3>
+
+<p><span style="font-family: courier new,andale mono,monospace; line-height: 1.5;">JSON.stringify()</span> игнорирует свойства с ключами <code>Symbol</code>:</p>
+
+<pre class="brush: js">JSON.stringify({[Symbol("foo")]: "foo"});
+// '{}'</pre>
+
+<p>Подробности см. {{jsxref("JSON.stringify()")}}.</p>
+
+<h3 id="Объекты-обёртки_для_Symbol_в_качестве_имен_свойств">Объекты-обёртки для Symbol в качестве имен свойств</h3>
+
+<p>Когда объект-обёртка символа используется в качестве имени свойства, этот объект сводится к символу, который он оборачивает:</p>
+
+<pre class="brush: js">var sym = Symbol("foo");
+var obj = {[sym]: 1};
+obj[sym]; // 1
+obj[Object(sym)]; // снова 1
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol-objects', 'Symbol')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol-objects', 'Symbol')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Symbol")}}</p>
+
+<h2 id="See_also" name="See_also">См. также</h2>
+
+<ul>
+ <li><a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Symbol">Словарь: Символьный тип данных</a></li>
+ <li>{{jsxref("Operators/typeof", "typeof")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Data_structures">Типы и структуры данных JavaScript</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/06/es6-in-depth-symbols/">"ES6 In Depth: Symbols" on hacks.mozilla.org</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html b/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html
new file mode 100644
index 0000000000..68ce170adc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/isconcatspreadable/index.html
@@ -0,0 +1,148 @@
+---
+title: Symbol.isConcatSpreadable
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable
+tags:
+ - ECMScript 2015
+ - JavaScript
+ - Property
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/isConcatSpreadable
+---
+<div>{{JSRef}}</div>
+
+<p> <strong><code>Symbol.isConcatSpreadable</code></strong> - это известный символ, который используется для  определения, должен ли объект редуцироваться к сумме своих элементов при использовании метода {{jsxref("Array.prototype.concat()")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code>@@isConcatSpreadable-символ</code> (<code>Symbol.isConcatSpreadable</code>) можно определить как собственное или унаследованное свойство с булевым значением. Оно контролирует поведение массивов и массивоподобных объектов:</p>
+
+<ul>
+ <li>Для массивов поведением по умолчанию будет редуцирование к сумме своих элементов. <code>Symbol.isConcatSpreadable</code> поможет избежать редукции в подобных случаях.</li>
+ <li>Для массивоподобных объектов поведением по умолчанию будет <code>сохранение своей структуры.isConcatSpreadable</code> может вызвать редуцирование в подобных случаях.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Массивы">Массивы</h3>
+
+<p>По умолчанию, {{jsxref("Array.prototype.concat()")}}  возвращает массив, объединяющий  элементы исходных массивов:</p>
+
+<pre class="brush: js">var alpha = ['a', 'b', 'c'],
+ numeric = [1, 2, 3];
+
+var alphaNumeric = alpha.concat(numeric);
+
+console.log(alphaNumeric); // Result: ['a', 'b', 'c', 1, 2, 3]
+</pre>
+
+<p>Если значение <code>Symbol.isConcatSpreadable</code>  =  <code>false</code>, то можно отменить поведение по умолчанию:</p>
+
+<pre class="brush: js">var alpha = ['a', 'b', 'c'],
+ numeric = [1, 2, 3];
+
+numeric[Symbol.isConcatSpreadable] = false;
+var alphaNumeric = alpha.concat(numeric);
+
+console.log(alphaNumeric); // Result: ['a', 'b', 'c', [1, 2, 3] ]
+</pre>
+
+<h3 id="Массивоподобные_объекты">Массивоподобные объекты</h3>
+
+<p>Для массивоподобных объектов поведением по умолчанию будет <code>сохранение своей структуры. </code>Чтобы вызвать его разложение до суммы  элементов  в итоговом массиве, нужно задать значение <code>true для Symbol.isConcatSpreadable</code>:</p>
+
+<pre class="brush: js">var x = [1, 2, 3];
+
+var fakeArray = {
+ [Symbol.isConcatSpreadable]: true,
+ length: 2,
+ 0: 'hello',
+ 1: 'world'
+}
+
+x.concat(fakeArray); // [1, 2, 3, "hello", "world"]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.isconcatspreadable', 'Symbol.isconcatspreadable')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>No change.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(48)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop(48) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile(48) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.concat()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html b/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html
new file mode 100644
index 0000000000..4e7ceb90f0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/iterator/index.html
@@ -0,0 +1,135 @@
+---
+title: Symbol.iterator
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Свойство
+ - Символы
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Symbol.iterator</strong></code> — известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a>.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла <code>for..of</code>), метод <code>@@iterator</code> вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.</p>
+
+<p>Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как {{jsxref("Object")}}) таким свойством не обладают. Метод <code>@@iterator</code> имеют следующие встроенные типы:</p>
+
+<ul>
+ <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li>
+</ul>
+
+<p>Смотрите также<a href="/en-US/docs/Web/JavaScript/Reference/Iteration_protocols"> </a><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">Протоколы перебора</a> для получения дополнительных сведений.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Пользовательские_итерируемые_объекты">Пользовательские итерируемые объекты</h3>
+
+<p>Мы можем создавать собственные итерируемые объекты, подобно следующему коду:</p>
+
+<pre class="brush: js">var myIterable = {}
+myIterable[Symbol.iterator] = function* () {
+ yield 1;
+ yield 2;
+ yield 3;
+};
+[...myIterable] // [1, 2, 3]
+</pre>
+
+<h3 id="Плохо_оформленные_итераторы">Плохо оформленные итераторы</h3>
+
+<p>Если метод <code>@@iterator</code> объекта не возвращает итератор, то это плохо оформленный итерируемый объект, его использование, скорее всего, приведёт к возникновению исключений или неправильному поведению:</p>
+
+<pre class="brush: js">var nonWellFormedIterable = {}
+nonWellFormedIterable[Symbol.iterator] = () =&gt; 1
+[...nonWellFormedIterable] // TypeError: [] is not a function
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.iterator', 'Symbol.iterator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(43)}}</td>
+ <td>{{ CompatGeckoDesktop(36) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatOpera(30)}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile(36) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols">Протоколы перебора</a></li>
+ <li>{{jsxref("Array.@@iterator", "Array.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("TypedArray.@@iterator", "TypedArray.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("String.@@iterator", "String.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</li>
+ <li>{{jsxref("Set.@@iterator", "Set.prototype[@@iterator]()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html b/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html
new file mode 100644
index 0000000000..3e250ce039
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/keyfor/index.html
@@ -0,0 +1,87 @@
+---
+title: Symbol.keyFor()
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor
+tags:
+ - JavaScript
+ - Method
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/keyFor
+---
+<div>{{JSRef}}</div>
+
+<div> Метод <code><strong>Symbol.keyFor(sym)</strong></code> получает ключ для заданного символа из глобального реестра символов.</div>
+
+<div> </div>
+
+<p>{{EmbedInteractiveExample("pages/js/symbol-keyfor.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Синтакс">Синтакс</h2>
+
+<pre class="syntaxbox"><var>Symbol.keyFor(sym)</var>;</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>sym</dt>
+ <dd>Символ, обязательный. Символ, ключ которого требуется найти</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Строка с ключом заданного символа, если он есть в глобальном реестре символов, либо {{jsxref("undefined")}}, если его там нет.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var globalSym = Symbol.for("foo"); // Создаёт новый глобальный символ
+Symbol.keyFor(globalSym); // "foo"
+
+var localSym = Symbol();
+Symbol.keyFor(localSym); // undefined
+
+// Известные символы не является символами,
+// которые находятся в глобальном реестре символов
+Symbol.keyFor(Symbol.iterator) // undefined
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.keyfor', 'Symbol.keyFor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.keyfor', 'Symbol.keyFor')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Symbol.keyFor")}}</p>
+
+<p> </p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.for()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/match/index.html b/files/ru/web/javascript/reference/global_objects/symbol/match/index.html
new file mode 100644
index 0000000000..135fbcc2ab
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/match/index.html
@@ -0,0 +1,113 @@
+---
+title: Symbol.match
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/match
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Свойство
+ - Символы
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/match
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Symbol.match</strong></code> — известный символ, определяющий соответствие строки регулярному выражению. Этот метод вызывается функцией {{jsxref("String.prototype.match()")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Данный метод также используется для того, чтобы определить, обладает ли объект поведением регулярного выражения. Например, методы {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} и {{jsxref("String.prototype.includes()")}} проверяют, является ли первый аргумент регулярным выражением, и бросают {{jsxref("TypeError")}}, если это так. Соответственно, если символ <code>match</code> установлен в <code>false</code> (или имеет {{Glossary("Falsy", "ложное")}} значение) — это говорит о том, что объект не предназначен для использования в качестве регулярного выражения.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Блокировка_проверки_isRegExp">Блокировка проверки i<code>sRegExp</code></h3>
+
+<p>Следующий код выбросит {{jsxref("TypeError")}}:</p>
+
+<pre class="brush: js">"/bar/".startsWith(/bar/); // Бросает TypeError, так как /bar/ является
+                           // регулярным выражением и Symbol.match не изменён.</pre>
+
+<p>Несмотря на это, если вы зададите свойству <code>Symbol.match</code> значение <code>false</code>, проверка <code>isRegExp</code> (которая использует свойство <code>match</code>) покажет, что объект не является регулярным выражением — как следствие, методы <code>startsWith</code> и <code>endsWith</code> не станут бросать <code>TypeError</code>.</p>
+
+<pre class="brush: js">var re = /foo/;
+re[Symbol.match] = false;
+"/foo/".startsWith(re); // true
+"/baz/".endsWith(re); // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.match', 'Symbol.match')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop(40) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile(40) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.replace")}}</li>
+ <li>{{jsxref("Symbol.search")}}</li>
+ <li>{{jsxref("Symbol.split")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html b/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html
new file mode 100644
index 0000000000..9152cc6dd8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/prototype/index.html
@@ -0,0 +1,106 @@
+---
+title: Symbol.prototype
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/prototype
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Свойство
+ - Символы
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <code><strong>Symbol</strong></code><strong><code>.prototype</code></strong> указывает на прототип конструктора {{jsxref("Symbol")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Экземпляры типа {{jsxref("Symbol")}} наследуют {{jsxref("Symbol.prototype")}}. Вы можете использовать прототип конструктора, чтобы добавить свойства и методы ко всем экземплярам типа <code>Symbol</code>.</p>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>Symbol.prototype.constructor</code></dt>
+ <dd>Указывает на функцию, создавшую прототип экземпляра. По умолчанию это функция {{jsxref("Symbol")}}.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("Symbol.prototype.toSource()")}} {{Non-standard_inline}}</dt>
+ <dd>Возвращает строку, содержащую исходный код объекта {{jsxref("Global_Objects/Symbol", "Symbol")}}. Перегружает метод {{jsxref("Object.prototype.toSource()")}}.</dd>
+ <dt>{{jsxref("Symbol.prototype.toString()")}}</dt>
+ <dd>Возвращает строку, содержащую описание символа. Перегружает метод {{jsxref("Object.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("Symbol.prototype.valueOf()")}}</dt>
+ <dd>Возвращает примитивное значение объекта {{jsxref("Symbol")}}. Перегружает метод {{jsxref("Object.prototype.valueOf()")}}.</dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.prototype', 'Symbol.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html b/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html
new file mode 100644
index 0000000000..abfb4b1f08
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/replace/index.html
@@ -0,0 +1,99 @@
+---
+title: Symbol.replace
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/replace
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/replace
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Symbol.replace</strong></code> — известный символ, задающий метод для замены подстрок в строке. Эта функция вызывается методом {{jsxref("String.prototype.replace()")}}.</p>
+
+<p>Смотрите также {{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}} и {{jsxref("String.prototype.replace()")}} для получения дополнительных сведений.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.replace', 'Symbol.replace')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.replace', 'Symbol.replace')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(50)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop(49) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile(49) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.match")}}</li>
+ <li>{{jsxref("Symbol.search")}}</li>
+ <li>{{jsxref("Symbol.split")}}</li>
+ <li>{{jsxref("RegExp.@@replace", "RegExp.prototype[@@replace]()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/search/index.html b/files/ru/web/javascript/reference/global_objects/symbol/search/index.html
new file mode 100644
index 0000000000..2f484e317f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/search/index.html
@@ -0,0 +1,54 @@
+---
+title: Symbol.search
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/search
+tags:
+ - ECMASript 2015
+ - JavaScript
+ - Property
+ - Symbol
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/search
+---
+<div>{{JSRef}}</div>
+
+<p>Широко известный символ <code><strong>Symbol.search</strong></code> указывает метод, который вернёт индекс внутри строки, соответствующей регулярному выражению. Эта функция вызывается методом {{jsxref("String.prototype.search()")}}.</p>
+
+<p>Для получения дополнительной информации см. {{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}} и {{jsxref("String.prototype.search()")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.search', 'Symbol.search')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.search', 'Symbol.search')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице создаётся из структурированных данных. Если Вы хотите дополнить эти данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.Symbol.search")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.match")}}</li>
+ <li>{{jsxref("Symbol.replace")}}</li>
+ <li>{{jsxref("Symbol.split")}}</li>
+ <li>{{jsxref("RegExp.@@search", "RegExp.prototype[@@search]()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/species/index.html b/files/ru/web/javascript/reference/global_objects/symbol/species/index.html
new file mode 100644
index 0000000000..de03682229
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/species/index.html
@@ -0,0 +1,116 @@
+---
+title: Symbol.species
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/species
+tags:
+ - ECMAScript6
+ - Experimental
+ - JavaScript
+ - Свойство
+ - Символы
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/species
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Symbol.species</strong></code><strong> —</strong> известный символ, позволяющий определить конструктор, использующийся для создания порождённых объектов.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Свойство <code><strong>Symbol.species</strong></code>, содержащее аксессор (геттер), позволяет подклассам переопределить конструктор, используемый по умолчанию для создания новых объектов.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Вам может понадобиться возвращать объекты типа {{jsxref("Array")}} в методах вашего производного класса <code>MyArray</code>. Например, при использовании метода вроде {{jsxref("Array.map", "map()")}}, использующего конструктор по умолчанию, вам может потребоваться возвращать объект родительского типа <code>Array</code>, вместо <code>MyArray</code>. Символ <code><strong>species</strong></code> позволит вам это сделать:</p>
+
+<pre class="brush: js">class MyArray extends Array {
+ // Перегружаем species для использования родительского конструктора Array
+ static get [Symbol.species]() { return Array; }
+}
+var a = new MyArray(1,2,3);
+var mapped = a.map(x =&gt; x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array); // true
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.species', 'Symbol.species')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.species', 'Symbol.species')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>51</td>
+ <td>{{ CompatGeckoDesktop(41) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>5</td>
+ <td>{{ CompatGeckoMobile(41) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Map.@@species", "Map[@@species]")}}</li>
+ <li>{{jsxref("Set.@@species", "Set[@@species]")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/split/index.html b/files/ru/web/javascript/reference/global_objects/symbol/split/index.html
new file mode 100644
index 0000000000..e9c98051b4
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/split/index.html
@@ -0,0 +1,53 @@
+---
+title: Symbol.split
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/split
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/split
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Symbol.split</strong></code> общеизвестный символ определяет метод, который делит строки в индексах, соответствующих регулярному выражению. Эта функция вызывается методом {{jsxref("String.prototype.split()")}}.</p>
+
+<p>Для подробной информации, смотрите {{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}} и {{jsxref("String.prototype.split()")}}.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/symbol-split.html")}}</div>
+
+
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.split', 'Symbol.split')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.split', 'Symbol.split')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Symbol.split")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Symbol.match")}}</li>
+ <li>{{jsxref("Symbol.replace")}}</li>
+ <li>{{jsxref("Symbol.search")}}</li>
+ <li>{{jsxref("RegExp.@@split", "RegExp.prototype[@@split]()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html b/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html
new file mode 100644
index 0000000000..fa512ba32f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/toprimitive/index.html
@@ -0,0 +1,92 @@
+---
+title: Symbol.toPrimitive
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive
+tags:
+ - '@@toPrimitive'
+ - JavaScript
+ - toPrimitive
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>Symbol.toPrimitive</code> </strong>является символом (symbol), который описывает свойство объекта как функцию, которая вызывается при преобразовании объекта в соответсвующее примитивное значение.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/symbol-toprimitive.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p> </p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>С помощью свойства <strong><code>Symbol.toPrimitive</code></strong><code> </code>(которое описывается как функция), объект может быть приведен к примитивному типу. Функция вызывается со строковым аргументом <code><strong>hint</strong></code>, который передает желаемый тип примитива. Значением аргумента <code><strong>hint</strong></code> может быть одно из следующих значений <code>"<em>number</em>"</code>, <code>"<em>string</em>"</code>, и <code>"<em>default</em>"</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Описанные ниже примеры показывают как с помощью свойства <strong><code>Symbol.toPrimitive</code></strong> можно привести объект к примитивному типу.</p>
+
+<pre class="brush: js">// Объект без свойства Symbol.toPrimitive
+var obj1 = {};
+console.log(+obj1); // NaN
+console.log(`${obj1}`); // "[object Object]"
+console.log(obj1 + ''); // "[object Object]"
+
+// Объект со свойством Symbol.toPrimitive
+var obj2 = {
+ [Symbol.toPrimitive](hint) {
+ if (hint == 'number') {
+ return 10;
+ }
+ if (hint == 'string') {
+ return 'hello';
+ }
+ return true;
+ }
+};
+console.log(+obj2); // 10 -- желаемый тип (<strong>hint</strong>) - "number"
+console.log(`${obj2}`); // "hello" -- желаемый тип (<strong>hint</strong>) - "string"
+console.log(obj2 + ''); // "true" -- желаемый тип (<strong>hint</strong>) - "default"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.toprimitive', 'Symbol.toPrimitive')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Symbol.toPrimitive")}}</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Date.@@toPrimitive", "Date.prototype[@@toPrimitive]")}}</li>
+ <li>{{jsxref("Symbol.@@toPrimitive", "Symbol.prototype[@@toPrimitive]")}}</li>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html b/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html
new file mode 100644
index 0000000000..89cfa3bda8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/tostringtag/index.html
@@ -0,0 +1,89 @@
+---
+title: Symbol.toStringTag
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag
+---
+<div>{{JSRef}}</div>
+
+<div>Известный символ <strong><code>Symbol.toStringTag</code></strong> - это строковое значение свойства, которое используется при создании строки описания объекта по умолчанию. Доступ к нему осуществляется через {{jsxref("Object.prototype.toString()")}} метод.</div>
+
+<div></div>
+
+<div>{{EmbedInteractiveExample("pages/js/symbol-tostringtag.html")}}</div>
+
+
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Многие Javascript типы имеют теги по умолчанию: </p>
+
+<pre class="brush: js">Object.prototype.toString.call('foo'); // "[object String]"
+Object.prototype.toString.call([1, 2]); // "[object Array]"
+Object.prototype.toString.call(3); // "[object Number]"
+Object.prototype.toString.call(true); // "[object Boolean]"
+Object.prototype.toString.call(undefined); // "[object Undefined]"
+Object.prototype.toString.call(null); // "[object Null]"
+// ... and more
+</pre>
+
+<p>Другие имеют встроенный символ <code>toStringTag</code>:</p>
+
+<pre class="brush: js">Object.prototype.toString.call(new Map()); // "[object Map]"
+Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
+Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
+// ... and more
+</pre>
+
+<p>При создании собственного класса JavaScript по умолчанию использует тег "Object":</p>
+
+<pre class="brush: js">class ValidatorClass {}
+
+Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
+</pre>
+
+<p>С помощью <code>toStringTag</code> можно установить свой собственный тег:</p>
+
+<pre class="brush: js">class ValidatorClass {
+ get [Symbol.toStringTag]() {
+ return 'Validator';
+ }
+}
+
+Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.tostringtag', 'Symbol.toStringTag')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Symbol.toStringTag")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.toString()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html b/files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html
new file mode 100644
index 0000000000..1cb2a967b3
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/unscopables/index.html
@@ -0,0 +1,89 @@
+---
+title: Symbol.unscopables
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Property
+ - Symbol
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables
+---
+<div>{{JSRef}}</div>
+
+<p>Широко известный символ <strong><code>Symbol.unscopables</code></strong> используется для указания значения объекта, чьи собственные и наследуемые имена свойств исключаются из привязок связанного объекта оператора <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code>.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p><code><font face="Open Sans, arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Символ </span></font>@@unscopables</code> (<code>Symbol.unscopables</code>)  может быть определён к любому объекту, чтобы исключить имена свойств из-за того, что они отображаются как лексические переменные с привязкой окружения <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code>. Обратите внимание: если использовать <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">"Строгий режим"</a>, оператор <code>with</code> будет недоступен и вероятнее всего также не понадобится этот символ.</p>
+
+<p>Если Вы зададите свойству знаечние <code>true</code> в объекте <code>unscopables</code>  сделает его "<em>unscopable</em><em>"</em> и, следовательно, оно не будет задействовано в области лексических переменных. Придав свойству значение <code>false</code>, Вы сделаете его <code>scopable</code> и, как следствие, оно будет задействовано в области лексических переменных.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён метод  {{jsxref("Array.prototype.keys()")}}. Это означает, что внутри окружения <code>with</code>, "ключи" будут методом, а не пременной. Вот где теперь встроенные свойства символа {{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}} вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в оператор <code>with</code>.</p>
+
+<pre class="brush: js">var keys = [];
+
+with (Array.prototype) {
+ keys.push('что-то');
+}
+
+Object.keys(Array.prototype[Symbol.unscopables]);
+// ["copyWithin", "entries", "fill", "find", "findIndex",
+// "includes", "keys", "values"]
+</pre>
+
+<p><code><font face="Open Sans, arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Вы также можете задать </span></font>unscopables</code> для собственных объектов.</p>
+
+<pre class="brush: js">var obj = {
+ foo: 1,
+ bar: 2
+};
+
+obj[Symbol.unscopables] = {
+ foo: false,
+ bar: true
+};
+
+with (obj) {
+ console.log(foo); // 1
+ console.log(bar); // ReferenceError: bar is not defined
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-symbol.unscopables', 'Symbol.unscopables')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице создаётся из структурированных данных. Если Вы хотите дополнить эти данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам пулл-реквест.</div>
+
+<p>{{Compat("javascript.builtins.Symbol.unscopables")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}</li>
+ <li>оператор <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/with">with</a></code> (не доступен в <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">режиме Strict</a>)</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html b/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html
new file mode 100644
index 0000000000..f5ed1d1060
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/symbol/valueof/index.html
@@ -0,0 +1,94 @@
+---
+title: Symbol.prototype.valueOf()
+slug: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf
+translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/valueOf
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>valueOf()</strong></code> возвращает примитивное значение символьного объекта.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>Symbol().valueOf();
+</var></pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Метод <code>valueOf</code> объекта {{jsxref("Symbol")}} возвращает примитивное значение символьного объекта как экземпляр типа Symbol.</p>
+
+<p>JavaScript вызывает метод <code>valueOf</code> для конвертации объекта в примитивное значение. Вам нечасто потребуется вызывать метод <code>valueOf</code> самостоятельно; JavaScript автоматически вызывает его, когда натыкается на объект там, где ожидался примитив.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-symbol.prototype.valueof', 'Symbol.prototype.valueOf')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("36.0") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Object.prototype.valueOf()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/syntaxerror/index.html b/files/ru/web/javascript/reference/global_objects/syntaxerror/index.html
new file mode 100644
index 0000000000..d398a0bc22
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/syntaxerror/index.html
@@ -0,0 +1,174 @@
+---
+title: SyntaxError
+slug: Web/JavaScript/Reference/Global_Objects/SyntaxError
+tags:
+ - Error
+ - JavaScript
+ - Object
+ - Reference
+ - SyntaxError
+translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <code><strong>SyntaxError</strong></code> представляет ошибку, возникающую при попытке интерпретировать синтаксически неправильный код.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new SyntaxError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Исключение <code>SyntaxError</code> выбрасывается, когда движок JavaScript при разборе кода обнаруживает токены или токен, которые, согласно синтаксису, не должны здесь находиться.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("SyntaxError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>SyntaxError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<p>Глобальный объект <code>SyntaxError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="SyntaxError_instances" name="SyntaxError_instances">Экземпляры объекта <code>SyntaxError</code></h2>
+
+<h3 id="Properties_of_SyntaxError_instances" name="Properties_of_SyntaxError_instances">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_SyntaxError_instances" name="Methods_of_SyntaxError_instances">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Catch_an_SyntaxError" name="Example:_Catch_an_SyntaxError">Пример: перехват исключения <code>SyntaxError</code></h3>
+
+<pre class="brush: js">try {
+ eval('hoo bar');
+} catch (e) {
+ console.log(e instanceof SyntaxError); // true
+ console.log(e.message); // "missing ; before statement" - перед инструкцией отсутствует символ ;
+ console.log(e.name); // "SyntaxError"
+ console.log(e.fileName); // "Scratchpad/1"
+ console.log(e.lineNumber); // 1
+ console.log(e.columnNumber); // 4
+ console.log(e.stack); // "@Scratchpad/1:2:3\n"
+}
+</pre>
+
+<h3 id="Example:_Create_an_SyntaxError" name="Example:_Create_an_SyntaxError">Пример: возбуждение исключения <code>SyntaxError</code></h3>
+
+<pre class="brush: js">try {
+ throw new SyntaxError('Привет', 'someFile.js', 10);
+} catch (e) {
+ console.log(e instanceof SyntaxError); // true
+ console.log(e.message); // "Привет"
+ console.log(e.name); // "SyntaxError"
+ console.log(e.fileName); // "someFile.js"
+ console.log(e.lineNumber); // 10
+ console.log(e.columnNumber); // 0
+ console.log(e.stack); // "@Scratchpad/2:11:9\n"
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.4', 'SyntaxError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-syntaxerror', 'SyntaxError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("SyntaxError.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/syntaxerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/syntaxerror/prototype/index.html
new file mode 100644
index 0000000000..b558ae482e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/syntaxerror/prototype/index.html
@@ -0,0 +1,122 @@
+---
+title: SyntaxError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+ - SyntaxError
+translation_of: Web/JavaScript/Reference/Global_Objects/SyntaxError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>SyntaxError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("SyntaxError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("SyntaxError")}} наследуются от объекта <code>SyntaxError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>SyntaxError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "SyntaxError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("SyntaxError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "SyntaxError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "SyntaxError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "SyntaxError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "SyntaxError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "SyntaxError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("SyntaxError")}} не содержит собственных методов, экземпляры {{jsxref("SyntaxError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/@@species/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/@@species/index.html
new file mode 100644
index 0000000000..de71600f4c
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/@@species/index.html
@@ -0,0 +1,130 @@
+---
+title: 'get TypedArray[@@species]'
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species
+tags:
+ - JavaScript
+ - Property
+ - TypedArray
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/@@species
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>TypedArray[@@species]</strong></code> - это способ доступа, с помощью которого можно получить конструктор <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типизированного массива</a>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>TypedArray</em>[<a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species">Symbol.species</a>]
+
+<em>где TypedArray</em> это один из:
+
+Int8Array
+Uint8Array
+Uint8ClampedArray
+Int16Array
+Uint16Array
+Int32Array
+Uint32Array
+Float32Array
+Float64Array
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Свойство <strong><code>species</code> </strong>возвращает конструктор "по умолчанию" для объектов <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типизированного массива</a>. Конструкторы подкласса могут его переопределить.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Свойство <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Symbol/species"><code><strong>species</strong></code> </a>возвращает функцию-конструктор "по умолчанию", которая является одним из конструкторов данного <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типизированного массива</a>:</p>
+
+<pre class="brush: js">Int8Array[Symbol.species]; // function Int8Array()
+Uint8Array[Symbol.species]; // function Uint8Array()
+Float32Array[Symbol.species]; // function Float32Array()
+</pre>
+
+<p>В производном объекте-массиве (например, вы разработали свой массив <code>MyTypedArray</code>), <code>MyTypedArray</code> определяет свой конструктор. Однако, вы можете захотеть его переопределить, например, возвращать родительский объект из вашего производного класса:</p>
+
+<pre class="brush: js">class MyTypedArray extends Uint8Array {
+ //Переопределение вида MyTypedArray на родительский Uint8Array
+ static get [Symbol.species]() { return Uint8Array; }
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Описание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-get-%typedarray%-@@species', 'get %TypedArray% [ @@species ]')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop("48")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("48")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("TypedArray")}}</li>
+ <li>{{jsxref("Symbol.species")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html
new file mode 100644
index 0000000000..e877c6b856
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/bytes_per_element/index.html
@@ -0,0 +1,119 @@
+---
+title: TypedArray.BYTES_PER_ELEMENT
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT
+tags:
+ - JavaScript
+ - TypedArray
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/BYTES_PER_ELEMENT
+---
+<div>{{JSRef}}</div>
+
+<p>Свойство <code><strong>TypedArray.BYTES_PER_ELEMENT</strong></code> содержит размер в байтах каждого элемента типизированного массива.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">TypedArray.BYTES_PER_ELEMENT;</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объекты TypedArray отличаются друг от друга числом байтов на каждый элемент и способом интерпретации байтов. Константа <code>BYTES_PER_ELEMENT</code> содержит число байтов, который имеет каждый из элементов в данном массиве.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush:js">Int8Array.BYTES_PER_ELEMENT; // 1
+Uint8Array.BYTES_PER_ELEMENT; // 1
+Uint8ClampedArray.BYTES_PER_ELEMENT; // 1
+Int16Array.BYTES_PER_ELEMENT; // 2
+Uint16Array.BYTES_PER_ELEMENT; // 2
+Int32Array.BYTES_PER_ELEMENT; // 4
+Uint32Array.BYTES_PER_ELEMENT; // 4
+Float32Array.BYTES_PER_ELEMENT; // 4
+Float64Array.BYTES_PER_ELEMENT; // 8</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Описание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Заменено в ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение дано в ECMA-стандарте.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-typedarray.bytes_per_element', 'TypedArray.BYTES_PER_ELEMENT')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>7.0</td>
+ <td>{{ CompatGeckoDesktop("2") }}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>5.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>4.0</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("2") }}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>4.2</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("TypedArray")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/index.html
new file mode 100644
index 0000000000..e2a200783a
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/index.html
@@ -0,0 +1,258 @@
+---
+title: TypedArray
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray
+tags:
+ - JavaScript
+ - TypedArray
+ - TypedArrays
+ - Типизированные массивы
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><em>TypedArray </em></strong>(типизированный массив) это массивоподобное представление нижележащего <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">буфера с бинарными данными (ArrayBuffer)</a>. Нет ни глобального свойства <code><em>TypedArray</em></code>, ни открытого конструктора <em><code>TypedArray</code></em>. Но существует ряд глобальных элементов, которые являются конструкторами типизированных массивов для конкретно заданных типов данных. Они приведены ниже. Далее вы найдёте общие свойства и функции, которые можно использовать с любыми типизированными массивами.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new <em>TypedArray</em>(); // новое в ES2017
+new <em>TypedArray</em>(length);
+new <em>TypedArray</em>(typedArray);
+new <em>TypedArray</em>(object);
+new <em>TypedArray</em>(buffer [, byteOffset [, length]]);
+
+<strong>где <em>TypedArray()</em> это одно из следующих значений:</strong>
+
+Int8Array(), Uint8Array(), Uint8ClampedArray(), Int16Array(), Uint16Array(), Int32Array(), Uint32Array(), Float32Array(), Float64Array()
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>length</dt>
+ <dd>При вызове в памяти создаётся буфер длины  <em><strong><code>length</code></strong></em> *  <em>BYTES_PER_ELEMENT</em>  байт, содержащий нули</dd>
+ <dt>typedArray</dt>
+ <dd>Когда вызывается с аргументом <code><strong>typedArray</strong></code>, который может быть объектом любого из типов типизированных массивов (например, <code>Int32Array</code>), тогда переданный массив <code>typedArray</code> копируется в новый массив. Каждое значение из <code>typedArray</code> конвертируется в соответствующий конструктору тип прямо перед копированием. Длина нового объекта <code>typedArray</code> будет такой же как и длина переданного в параметре <code>typedArray</code></dd>
+ <dt>object</dt>
+ <dd>Новый массив создаётся так, как если бы была вызвана функция <code><em>TypedArray</em>.from()</code></dd>
+ <dt>buffer, byteOffset, length</dt>
+ <dd>Когда происходит вызов с параметрами <strong><code>buffer</code> </strong>и опциональными параметрами <strong><code>byteOffset </code></strong>и<code> </code><strong><code>length</code></strong>, то будет создан новый типизированный массив, который будет отражать <code>buffer </code>типа {{jsxref("ArrayBuffer")}}. Параметры <code>byteOffset</code> и <code>length</code> определяют диапазон (размер) памяти, выводимый данным массивоподобным представлением. Если оба этих параметра (<code>byteOffset</code> и <code>length</code>) опущены, то будет использован весь буфер <code>buffer</code>; если опущен только <code>length</code>, то будет выведен весь остаток буфера после смещения начала отсчета элементов, заданного параметром <code>byteOffset</code>.</dd>
+</dl>
+
+<h2 id="Описание"><a id="Description" name="Description">Описание</a></h2>
+
+<p>ECMAScript 2015 определяет конструктор объекта <em>TypedArray, </em>который является прототипом всех <em>TypedArray</em>-конструкторов. Этот конструктор не открыт явным образом: какое-либо глобальное свойство <em><code>%TypedArray%</code></em> или <em><code>TypedArray</code> </em>отсутствует.  Он доступен только через <code>Object.getPrototypeOf(...) (</code>например<code>, Int8Array.prototype)</code>. Все <em>TypedArray</em>s конструкторы наследуют общие свойства от конструктора <code>%TypedArray%</code>. Кроме того, все прототипы типизированных массивов (<em>TypedArray<code>.</code></em><code>prototype</code>) имеют своим прототипом <em>%TypedArray%<code>.</code></em><code>prototype</code>.</p>
+
+<p>Сам по себе конструктор <code>%TypedArray%</code> не имеет пользы. Его вызов напрямую или через оператор <code>new</code>  выдаст ошибку <code>TypeError</code>, кроме случая, когда он используется во время создания объектов в JS-движке, поддерживающего подклассы.  В настоящее время такие движки неизвестны, поэтому <code>%TypedArray%</code> используется только для дополнения функциональности (затычка) браузеров в конструкторах <em>TypedArray</em>.</p>
+
+<p>Когда создаётся экземпляр <em>TypedArray</em> (например, <code>Int8Array</code>), то буферный массив создаётся в памяти, в случае если объект <code>ArrayBuffer</code> передаётся как аргумент конструктора, то вместо создания буфера используется он. Адрес буфера сохраняется во внутреннем свойстве экземпляра, и все методы из %<code>TypedArray</code>%.<code>prototype</code>, например сеттеры и геттеры, оперируют с буфером, по этому адресу.</p>
+
+<h3 id="Доступ_к_свойствам">Доступ к свойствам</h3>
+
+<p>Получить доступ к элементам массива можно используя стандартный синтаксис по индексу (например, <code>arr[12]</code>). Однако, получение и установка индексируемых свойств по цепи прототипов не будет происходить даже в случае, когда вы пытаетесь использовать индексы извне массива. Индексируемые свойства обращаются к элементам буфера {{jsxref("ArrayBuffer")}} и не имеют отношения к объектным свойствам. Также можно использовать именованные свойства как и в обычных объектах.</p>
+
+<pre class="brush: js">//Установка и получение используя стандартный синтаксис массивов
+var int16 = new Int16Array(2);
+int16[0] = 42;
+console.log(int16[0]); // 42
+
+//Отсутствует обращение к свойству прототипа (элемент №20 должен бы иметь значение "foo")
+Int8Array.prototype[20] = "foo";
+(new Int8Array(32))[20]; // 0
+//Отсутствует даже в случае обращения к индексу извне текущего массива
+Int8Array.prototype[20] = "foo";
+(new Int8Array(8))[20]; // undefined
+// также в случае отрицательных индексов
+Int8Array.prototype[-1] = "foo";
+(new Int8Array(8))[-1]; // undefined
+
+// Допустимы именованные свойства
+Int8Array.prototype.foo = "bar";
+(new Int8Array(32)).foo; // "bar"</pre>
+
+<h2 id="Объекты_TypedArray"><a id="TypedArray_objects" name="TypedArray_objects">Объекты TypedArray</a></h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">Тип</td>
+ <td class="header">Диапазон значений</td>
+ <td>Размер (байты)</td>
+ <td class="header">Описание</td>
+ <td class="header">Тип Web IDL</td>
+ <td class="header">Эквивалентный тип языка C</td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Int8Array")}}</td>
+ <td>-128 до 127</td>
+ <td>1</td>
+ <td>8-битное целое со знаком с дополнением до двух</td>
+ <td><code>byte</code></td>
+ <td><code>int8_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Uint8Array")}}</td>
+ <td>0 до 255</td>
+ <td>1</td>
+ <td>8-битное беззнаковое целое</td>
+ <td><code>octet</code></td>
+ <td><code>uint8_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Uint8ClampedArray")}}</td>
+ <td>0 до 255</td>
+ <td>1</td>
+ <td>8-битное беззнаковое целое (фиксированное от 0 до 255)</td>
+ <td><code>octet</code></td>
+ <td><code>uint8_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Int16Array")}}</td>
+ <td>-32768 до 32767</td>
+ <td>2</td>
+ <td>16-битное целое со знаком с дополнением до двух</td>
+ <td><code>short</code></td>
+ <td><code>int16_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Uint16Array")}}</td>
+ <td>0 до 65535</td>
+ <td>2</td>
+ <td>16-битное беззнаковое целое</td>
+ <td><code>unsigned short</code></td>
+ <td><code>uint16_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Int32Array")}}</td>
+ <td>-2147483648 до 2147483647</td>
+ <td>4</td>
+ <td>32-битное целое со знаком с дополнением до двух</td>
+ <td><code>long</code></td>
+ <td><code>int32_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Uint32Array")}}</td>
+ <td>0 до 4294967295</td>
+ <td>4</td>
+ <td>32-битное беззнаковое целое</td>
+ <td><code>unsigned long</code></td>
+ <td><code>uint32_t</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Float32Array")}}</td>
+ <td>1.2x10<sup>-38</sup> to 3.4x10<sup>38</sup></td>
+ <td>4</td>
+ <td>32-битное число с плавающей точкой IEEE-стандарта (7 значащих цифр, нпример 1.123456)</td>
+ <td><code>unrestricted float</code></td>
+ <td><code>float</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Float64Array")}}</td>
+ <td>5.0x10<sup>-324</sup> to 1.8x10<sup>308</sup></td>
+ <td>8</td>
+ <td>64-битное число с плавающей точкой IEEE-стандарта (16 значащих цифр, например, 1.123...15)</td>
+ <td><code>unrestricted double</code></td>
+ <td><code>double</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Возвращает размер элемента для разных типизированных массивов.</dd>
+ <dt><em>TypedArray</em>.length</dt>
+ <dd>Свойство "Длина", значение которого 0.</dd>
+ <dt>{{jsxref("TypedArray.name")}}</dt>
+ <dd>Возвращает строковое имя конструктора. Например, "Int8Array".</dd>
+ <dt>{{jsxref("TypedArray.@@species", "get TypedArray[@@species]")}}</dt>
+ <dd>Конструктор. Используется для создания производных объектов.</dd>
+ <dt>{{jsxref("TypedArray.prototype")}}</dt>
+ <dd>Прототип для <em>TypedArray</em>-объектов.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from()")}}</dt>
+ <dd>Создаёт типизированный массив из массивоподобного или перечислимого объекта. Смотрите {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of()")}}</dt>
+ <dd>Создаёт новый типизированный массив с переменным числом аргументов, из которых создастся массив. Смотрите {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Прототип_TypedArray">Прототип TypedArray</h2>
+
+<p><em>Все TypedArray</em>s-массивы наследуют от {{jsxref("TypedArray.prototype")}}.</p>
+
+<h3 id="Свойства_2">Свойства</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/TypedArray/prototype','Properties')}}</p>
+
+<h3 id="Методы_2">Методы</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/TypedArray/prototype','Methods')}}</p>
+
+<h3 id="Полифилы_(дополнители)_методов">Полифилы (дополнители) методов</h3>
+
+<p>Многие методы, используемые в TypedArray, могут быть подменены, используя методы, присутствующие среди стандартных в прототипе Arrays. Следующий кусок Javascript-кода демонстрирует, как вы можете дополнить недостающие методы Typed Array.</p>
+
+<pre class="brush: js example-bad">var typedArrayTypes = [<code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Int8Array" title="Объект Int8Array представляет типизированный массив 8-разрядных целых значений. Содержимое инициализируется значением 0. Создав экземпляр Int8Array, возможно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Int8Array</a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array" title="Объект Uint8Array представляет типизированный массив 8-разрядных целых беззнаковых значений. Содержимое инициализируется значением 0. Создав экземпляр Int8Array, возможно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Uint8Array</a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray" title="Типизированный массив Uint8ClampedArray — это массив, служащий для храния 8-битных безнаковых чисел, обрезаемых до диапазона от 0 до 255. Если значение меньше 0, то оно будет приведено к 0 , и к 255, если оно больше 255. Числа с плавающей точкой округляются с помощью математического округления. Массив инициализуруется нулями. После того как значение установлено, Вы можете ссылаться на него с помощью методов объекта или через стандартный синтаксис массивов (то есть, брать значения с помощью квадратных скобок). ">Uint8ClampedArray</a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Int16Array" title="Объект Int16Array представляет типизированный массив 16-битных целых чисел со знаком с дополнением до двух с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Int16Array, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Int16Array</a>,
+</code>          <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array" title="Объект Uint16Array представляет типизированный массив 16-битных целых беззнаковых чисел с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Uint16Array , можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Uint16Array</a>, ​​​<a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Int32Array" title="Объект Int32Array представляет типизированный массив 32-битных целых чисел со знаком с дополнением до двух с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Int32Array, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Int32Array</a>, <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array" title="Объект Uint32Array представляет типизированный массив 32-битных целых беззнаковых чисел с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Uint32Array, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).">Uint32Array</a>, ​​​<a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Float32Array" title="Объект Float32Array представляет типизированный массив 32-битных чисел с плавающей запятой (соответствует типу float в языке C) с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Float32Array, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации - квадратные скобки).">Float32Array</a>, </code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Float64Array" title="Объект Float64Array представляет типизированный массив 64-битных чисел с плавающей запятой (соответствует типу double в языке C) с платформо-зависимым порядком байт.Если необходим контроль за порядком байт, то вместо этого объекта используйте DataView. Содержимое инициализируется значением 0. Создав экземпляр Float64Array , можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации - квадратные скобки)."><code>Float64Array</code></a>];
+
+for (var k in typedArrayTypes)
+    for (var v in Array.prototype)
+        if (Array.prototype.hasOwnProperty(v) &amp;&amp;
+         !typedArrayTypes[k].prototype.hasOwnProperty(v))
+            typedArrayTypes[k].prototype[v] = Array.prototype[v];
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Примечание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Определяет работу <code>TypedArray</code> и <code>ArrayBufferView</code>. Заменен в ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-typedarray-objects', 'TypedArray Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальное определение в стандарте ECMA. Определяет поведение индекных и именованных свойств. Указывает, что необходимо использовать оператор <code>new</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Спецификация ECMAScript 2017 изменила конструктор TypedArray, так что используется операция <code>ToIndex,</code> и позволены конструкторы без аргументов.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+
+
+<p>{{Compat("javascript.builtins.TypedArray")}}</p>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+<p>Начиная с ECMAScript 2015, конструкторы <code>TypedArray</code> требуют использования оператора {{jsxref("Operators/new", "new")}}. Вызов конструктора <code>TypedArray</code> как функции без <code>new</code>, отныне выбросит ошибку {{jsxref("TypeError")}}.</p>
+
+<pre class="brush: js example-bad">var dv = Int8Array([1, 2, 3]);
+// TypeError: вызов встроенного конструктора Int8Array
+// без <strong>new </strong>запрещён</pre>
+
+<pre class="brush: js example-good">var dv = new Int8Array([1, 2, 3]);</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/join/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/join/index.html
new file mode 100644
index 0000000000..ba3118f74d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/join/index.html
@@ -0,0 +1,133 @@
+---
+title: TypedArray.prototype.join()
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray/join
+tags:
+ - JavaScript
+ - Prototype
+ - TypedArray
+ - Массив
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/join
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>join()</strong></code> объединяет все элементы массива в строку. Метод работает по тому же алгоритму, что и  {{jsxref("Array.prototype.join()")}}<em>.</em> <em>TypedArray</em> это один из типизированных массивов: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типы массивов</a>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><var>typedarray</var>.join(<code>[<var>separator</var> = ',']</code>);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>разделитель</code></dt>
+ <dd>Необязательный параметр. Определяет строку, разделяющую элементы массива. Разделитель приводится к строке в случае необходимости. Если он опущен, элементы массива разделяются запятой (",").</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Строка, соединяющая все элементы массива.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">var uint8 = new Uint8Array([1,2,3]);
+uint8.join(); // '1,2,3'
+uint8.join(' / '); // '1 / 2 / 3'
+uint8.join(''); // '123'
+</pre>
+
+<h2 id="Glossary('Polifill'_'Полифил')">{{Glossary('Polifill', 'Полифил')}}</h2>
+
+<p>Поскольку теперь нет глобального объекта с именем <em>TypedArray</em>, то полифиллинг доджен быть выполнен "по требованию".</p>
+
+<pre class="brush: js">// https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
+if (!Uint8Array.prototype.join) {
+ Object.defineProperty(Uint8Array.prototype, 'join', {
+ value: Array.prototype.join
+ });
+}
+</pre>
+
+<p>Если вам нужна поддержка устаревшего JavaScript-дфижка, который не поддерживает свойство <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code>, то лучше не создавать полифилы новых методов <code>Array.prototype</code>, так как вы не сможете сделать их неперечислимыми.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первоначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-%typedarray%.prototype.join', 'TypedArray.prototype.join')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("37")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("37")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("TypedArray")}}</li>
+ <li>{{jsxref("Array.prototype.join()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/prototype/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/prototype/index.html
new file mode 100644
index 0000000000..09ab9b3215
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/prototype/index.html
@@ -0,0 +1,128 @@
+---
+title: TypedArray.prototype
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray/prototype
+tags:
+ - TypedArray
+ - Типизированный массив
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>Свойство TypedArray</strong></code><strong><code>.prototype</code></strong> является прототипом для {{jsxref("TypedArray")}}-конструкторов.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Экземпляры {{jsxref("TypedArray")}} наследуются от {{jsxref("TypedArray.prototype")}}. Вы можете использовать объект прототипа конструктора для добавления в свойств и методов во все экземпляры <em>TypedArray</em>, где <em>TypedArray</em> это один из <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типизированных массивов</a>.</p>
+
+<p>Также смотрите описание <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Description"><em>TypedArray</em></a> для детальной информации о наследниках.</p>
+
+<h2 id="Свойства"><a id="Properties" name="Properties">Свойства</a></h2>
+
+<dl>
+ <dt><code>TypedArray.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, которая создала прототип экземпляра. Это единственное, что для объектов <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects">типизированных массивов</a> функционирует по умолчанию.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Возвращает {{jsxref("ArrayBuffer")}}, на который ссылается типизированный массив. Значение фиксировано с времени создания и доступно <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Возвращает длину (в байтах) типизированного массива (с начала {{jsxref("ArrayBuffer")}}). Значение фиксировано с времени создания и доступно <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Возвращает смещение (в байтах) типизированного массива от его {{jsxref("ArrayBuffer")}}. Значение фиксировано с времени создания и доступно <strong>только для чтения</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Возвращает число элементов типизированного массива. Значение фиксировано с времени создания и доступно <strong>только для чтения</strong>.</dd>
+</dl>
+
+<h2 id="Методы"><a id="Methods" name="Methods">Методы</a></h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.prototype.copyWithin()")}}</dt>
+ <dd>Копирует последовательность элементов массива внутри него. Подробнее {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.entries()")}}</dt>
+ <dd>Возвращает новый объект итератора <code><strong>Array Iterator</strong></code>, содержащий пары ключ / значение для каждого индекса массива. Подробнее {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.every()")}}</dt>
+ <dd>Проверяет, удовлетворяют ли все элементы массива условию, заданному в передаваемой функции. Подробнее {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.fill()")}}</dt>
+ <dd>Заполняет все элементы массива от начального индекта до конечного индекса указанным значением. Подробнее {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.filter()")}}</dt>
+ <dd>Создаёт новый массив с теми элементами текущего массива, с которыми фильтрующая функция вернёт <code>true</code>. Подробнее {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.find()")}}</dt>
+ <dd>Возвращает значение элемента массива, если элемент удовлетворяет условию проверяющей функции, иначе возвращается <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/undefined" title="Значение глобального свойства undefined представляет значение undefined. Это одно из примитивных значений JavaScript."><code>undefined</code></a>. Подробнее {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.findIndex()")}}</dt>
+ <dd>Возвращает индекс элемента массива, если элемент удовлетворяет условию проверяющей функции, иначе возвращается -1. Подробнее {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.forEach()")}}</dt>
+ <dd>Выполняет указанную функцию один раз для каждого элемента в массиве. Подробнее {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Определяет, содержит ли массив определённый элемент, возвращая в зависимости от этого <code>true</code> или <code>false</code>. Подробнее {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.indexOf()")}}</dt>
+ <dd>Возвращает первый (меньший) индекс элемента, значение которого равно указанному значению или -1, если такого индекса нет. Подробнее {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.join()")}}</dt>
+ <dd>Объединяет все элементы массива в строку . Подробнее {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.keys()")}}</dt>
+ <dd>Возвращает новый итератор массива <code><strong>Array Iterator</strong></code>, содержащий ключи каждого индекса в массиве. Подробнее {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.lastIndexOf()")}}</dt>
+ <dd>Возвращает последний (больший) индекс элемента, значение которого равно заданному значению или -1, если такого индекса нет. Подробнее {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.map()")}}</dt>
+ <dd>Создаёт новый массив с результатом вызова указанной функции для каждого элемента массива. Подробнее {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Ранний нестандартный вариант от {{jsxref("TypedArray.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.reduce()")}}</dt>
+ <dd>Применяет функцию к аккумулятору и каждому значению массива (слева-направо), сводя его к одному значению. Подробнее {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.reduceRight()")}}</dt>
+ <dd>Применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению. Подробнее {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.reverse()")}}</dt>
+ <dd>Обращает порядок следования элементов массива. Первый элемент массива становится последним, а последний — первым. Подробнее {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.set()")}}</dt>
+ <dd>Сохраняет несколько значений в типизированном массиве, получая входные значения из указанного массива.</dd>
+ <dt>{{jsxref("TypedArray.prototype.slice()")}}</dt>
+ <dd>Возвращает часть массива в новый объект массива. Подробнее {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.some()")}}</dt>
+ <dd>Возвращает <code>true</code>, если хоть какой-нибудь элемент массива удовлетворяет условию, заданному в передаваемой функции. Подробнее {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.sort()")}}</dt>
+ <dd>На месте сортирует элементы массива и возвращает отсортированный массив. Подробнее {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.subarray()")}}</dt>
+ <dd>Возвращает новый <code>TypedArray</code>-объект, начиная с указанного стартового и кончая указанным конечным индексом элемента массива.</dd>
+ <dt>{{jsxref("TypedArray.prototype.values()")}}</dt>
+ <dd>Возвращает новый объект итератора массива <strong><code>Array Iterator</code></strong>, содержащий значения для каждого индекса в массиве. Подробнее {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.toLocaleString()")}}</dt>
+ <dd>Возвращает локализованное строковое представление элементов массива. Подробнее {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.toString()")}}</dt>
+ <dd>Возвращает строковое представление указанного массива и его элементов . Подробнее {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.prototype.@@iterator()", "TypedArray.prototype[@@iterator]()")}}</dt>
+ <dd>Возвращает новый объект итератора массива <strong><code>Array Iterator</code></strong>, содержащий значения для каждого индекса массива.</dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Описание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-properties-of-the-%typedarrayprototype%-object', 'TypedArray prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-properties-of-the-%typedarrayprototype%-object', 'TypedArray prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<div class="hidden">Таблица совместимости для этой страницы сгенерирована из структуры. Если вы хотите дополнить эти данные, то обратитесь к странице <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте запрос в "pull request".</div>
+
+<p>{{Compat("javascript.builtins.TypedArray.prototype")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("TypedArray")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typedarray/set/index.html b/files/ru/web/javascript/reference/global_objects/typedarray/set/index.html
new file mode 100644
index 0000000000..2a26b9b4cb
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typedarray/set/index.html
@@ -0,0 +1,140 @@
+---
+title: TypedArray.prototype.set()
+slug: Web/JavaScript/Reference/Global_Objects/TypedArray/set
+tags:
+ - Типизированные массивы
+ - Типизированный массив
+ - метод
+ - прототип
+translation_of: Web/JavaScript/Reference/Global_Objects/TypedArray/set
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>set()</code></strong> сохраняет значения в типизированном массиве, читая значения из предоставленного массива.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>typedarr</var>.set(array [,offset])
+typedarr.set(typedarray [,offset])
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>array</dt>
+ <dd>Массив, из которого необходимо скопировать значения. Все значения из исходного массива копируются в текущий массив, за исключением случая, когда длина исходного массива плюс сдвиг превышают длину текущего массива, в таких ситуациях возникает исключение.</dd>
+ <dt>typedarray</dt>
+ <dd>Если исходный массив является типизированным массивом, то оба массива могут ссылаться на один и тот же {{jsxref("ArrayBuffer")}}, т.е. быть разными представлениями (view) одного и того же ArrayBuffer; браузер <strong>скопирует</strong> исходный диапазон буфера в диапазон назначения даже в случае перекрытия диапазонов.</dd>
+ <dt>offset {{ optional_inline() }}</dt>
+ <dd>Сдвиг для текущего массива, с которого будет производиться запись исходного массива. Если значение опущено, то используется 0 (в таких ситуациях, исходный массив перезапишет значения в текущем массиве начиная с индекса 0).</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>{{jsxref("undefined")}}.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<dl>
+ <dt>{{jsxref("RangeError")}}</dt>
+ <dd>Возникает, в случае, когда с текущим сдвигом елементы будут сохраняться за пределы типизированного массива.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_set">Использование метода <code>set</code></h3>
+
+<pre class="brush:js">var buffer = new ArrayBuffer(8);
+var uint8 = new Uint8Array(buffer);
+
+uint8.set([1,2,3], 3);
+
+console.log(uint8); // Uint8Array [ 0, 0, 0, 1, 2, 3, 0, 0 ]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Заменено в ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-%typedarray%.prototype.set-array-offset', 'TypedArray.prototype.set')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>7.0</td>
+ <td>{{CompatGeckoDesktop("2")}}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>5.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>4.0</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("2")}}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>4.2</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("TypedArray")}}</li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typeerror/index.html b/files/ru/web/javascript/reference/global_objects/typeerror/index.html
new file mode 100644
index 0000000000..3fa1ac526e
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typeerror/index.html
@@ -0,0 +1,131 @@
+---
+title: TypeError
+slug: Web/JavaScript/Reference/Global_Objects/TypeError
+tags:
+ - Error
+ - JavaScript
+ - Object
+ - Reference
+ - TypeError
+translation_of: Web/JavaScript/Reference/Global_Objects/TypeError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Объект <code><strong>TypeError</strong></code> представляет ошибку, возникающую, когда значение имеет не ожидаемый тип.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>new TypeError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Исключение <code>TypeError</code> выбрасывается, когда операнд или аргумент, переданный в функцию, не совместим с типом, ожидаемым оператором или функцией.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt>{{jsxref("TypeError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>TypeError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<p>Глобальный объект <code>TypeError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="TypeError_instances" name="TypeError_instances">Экземпляры объекта <code>TypeError</code></h2>
+
+<h3 id="Properties_of_TypeError_instances" name="Properties_of_TypeError_instances">Свойства</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/TypeError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_TypeError_instances" name="Methods_of_TypeError_instances">Методы</h3>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/TypeError/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Catch_an_TypeError" name="Example:_Catch_an_TypeError">Пример: перехват исключения <code>TypeError</code></h3>
+
+<pre class="brush: js">try {
+ null.f();
+} catch (e) {
+ console.log(e instanceof TypeError); // true
+ console.log(e.message); // "null has no properties" - null не имеет свойств
+ console.log(e.name); // "TypeError"
+ console.log(e.fileName); // "Scratchpad/1"
+ console.log(e.lineNumber); // 2
+ console.log(e.columnNumber); // 2
+ console.log(e.stack); // "@Scratchpad/2:2:3\n"
+}
+</pre>
+
+<h3 id="Example:_Create_an_TypeError" name="Example:_Create_an_TypeError">Пример: возбуждение исключения <code>TypeError</code></h3>
+
+<pre class="brush: js">try {
+ throw new TypeError('Привет', 'someFile.js', 10);
+} catch (e) {
+ console.log(e instanceof TypeError); // true
+ console.log(e.message); // "Привет"
+ console.log(e.name); // "TypeError"
+ console.log(e.fileName); // "someFile.js"
+ console.log(e.lineNumber); // 10
+ console.log(e.columnNumber); // 0
+ console.log(e.stack); // "@Scratchpad/2:2:9\n"
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.5', 'TypeError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-native-error-types-used-in-this-standard-typeerror', 'TypeError')}}</td>
+ <td>{{Spec2('ESDraft')}}    </td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{Compat("javascript.builtins.TypeError")}}</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("TypeError.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/typeerror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/typeerror/prototype/index.html
new file mode 100644
index 0000000000..adb4f5f0b6
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/typeerror/prototype/index.html
@@ -0,0 +1,122 @@
+---
+title: TypeError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/TypeError/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+ - TypeError
+translation_of: Web/JavaScript/Reference/Global_Objects/TypeError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>TypeError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("TypeError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("TypeError")}} наследуются от объекта <code>TypeError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>TypeError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "TypeError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("TypeError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "TypeError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "TypeError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "TypeError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "TypeError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "TypeError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("TypeError")}} не содержит собственных методов, экземпляры {{jsxref("TypeError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/uint16array/index.html b/files/ru/web/javascript/reference/global_objects/uint16array/index.html
new file mode 100644
index 0000000000..7e140010fc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/uint16array/index.html
@@ -0,0 +1,199 @@
+---
+title: Uint16Array
+slug: Web/JavaScript/Reference/Global_Objects/Uint16Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Uint16Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>Uint16Array</code></strong> представляет типизированный массив 16-битных целых беззнаковых чисел с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте <a class="new" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/DataView" rel="nofollow" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Uint16Array</code></strong> , можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Uint16Array(); // new in ES2017
+new Uint16Array(length);
+new Uint16Array(typedArray);
+new Uint16Array(object);
+new Uint16Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>For more information about the constructor syntax and the parameters, see <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint16Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Returns a number value of the element size. <code>2</code> in the case of an <code>Uint16Array</code>.</dd>
+ <dt>Uint16Array.length</dt>
+ <dd>Static length property whose value is 0. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Uint16Array.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Uint16Array</code> type: "Uint16Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Uint16Array.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Uint16Array.from()")}}</dt>
+ <dd>Creates a new <code>Uint16Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Uint16Array.of()")}}</dt>
+ <dd>Creates a new <code>Uint16Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Uint16Array_prototype"><code>Uint16Array</code> prototype</h2>
+
+<p>All <code>Uint16Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Uint16Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Uint16Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Uint16Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Uint16Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Uint16Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Uint16Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Uint16Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Uint16Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Uint16Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Uint16Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Uint16Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Uint16Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Uint16Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Uint16Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Uint16Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Uint16Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Uint16Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Uint16Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Uint16Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Uint16Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Uint16Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Uint16Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Uint16Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Uint16Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Uint16Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Uint16Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Uint16Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Uint16Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Uint16Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Uint16Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Uint16Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Uint16Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Uint16Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Uint16Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Uint16Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Uint16Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Uint16Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Uint16Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create a <code>Uint16Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var uint16 = new Uint16Array(2);
+uint16[0] = 42;
+console.log(uint16[0]); // 42
+console.log(uint16.length); // 2
+console.log(uint16.BYTES_PER_ELEMENT); // 2
+
+// From an array
+var arr = new Uint16Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint16Array([21, 31]);
+var y = new Uint16Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint16Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint16 = new Uint16Array(iterable);
+// Uint16Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Uint16Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Uint16Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Uint16Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Uint16Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Uint16Array([1, 2, 3]);
+// TypeError: calling a builtin Uint16Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Uint16Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays" title="en/JavaScript typed arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/uint32array/index.html b/files/ru/web/javascript/reference/global_objects/uint32array/index.html
new file mode 100644
index 0000000000..dffb14d480
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/uint32array/index.html
@@ -0,0 +1,199 @@
+---
+title: Uint32Array
+slug: Web/JavaScript/Reference/Global_Objects/Uint32Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Uint32Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>Uint32Array</code></strong> представляет типизированный массив 32-битных целых беззнаковых чисел с платформо-зависимым порядком байт. Если необходим контроль за порядком байт, то вместо этого объекта используйте <a class="new" href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/DataView" rel="nofollow" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>. Содержимое инициализируется значением <code>0</code>. Создав экземпляр <strong><code>Uint32Array</code></strong>, можно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Uint32Array(); // new in ES2017
+new Uint32Array(length);
+new Uint32Array(typedArray);
+new Uint32Array(object);
+new Uint32Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>For more information about the constructor syntax and the parameters, see <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint32Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Returns a number value of the element size. <code>4</code> in the case of an <code>Uint32Array</code>.</dd>
+ <dt>Uint32Array.length</dt>
+ <dd>Static length property whose value is 0. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Uint32Array.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Uint32Array</code> type: "Uint32Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Uint32Array.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Uint32Array.from()")}}</dt>
+ <dd>Creates a new <code>Uint32Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Uint32Array.of()")}}</dt>
+ <dd>Creates a new <code>Uint32Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Uint32Array_prototype"><code>Uint32Array</code> prototype</h2>
+
+<p>All <code>Uint32Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Uint32Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Uint32Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Uint32Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Uint32Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Uint32Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Uint32Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Uint32Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Uint32Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Uint32Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>Uint32Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Uint32Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Uint32Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Uint32Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Uint32Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Uint32Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Uint32Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Uint32Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Uint32Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Uint32Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Uint32Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Uint32Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Uint32Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Uint32Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Uint32Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Uint32Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Uint32Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Uint32Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Uint32Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Uint32Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Uint32Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Uint32Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Uint32Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Uint32Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Uint32Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Uint32Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Uint32Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Uint32Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Uint32Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create a <code>Uint32Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var uint32 = new Uint32Array(2);
+uint32[0] = 42;
+console.log(uint32[0]); // 42
+console.log(uint32.length); // 2
+console.log(uint32.BYTES_PER_ELEMENT); // 4
+
+// From an array
+var arr = new Uint32Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint32Array([21, 31]);
+var y = new Uint32Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(16);
+var z = new Uint32Array(buffer, 0, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint32 = new Uint32Array(iterable);
+// Uint32Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Uint32Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Uint32Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Uint32Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Uint32Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Uint32Array([1, 2, 3]);
+// TypeError: calling a builtin Uint32Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Uint32Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/uint8array/index.html b/files/ru/web/javascript/reference/global_objects/uint8array/index.html
new file mode 100644
index 0000000000..8992a49394
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/uint8array/index.html
@@ -0,0 +1,199 @@
+---
+title: Uint8Array
+slug: Web/JavaScript/Reference/Global_Objects/Uint8Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Uint8Array
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <strong><code>Uint8Array</code></strong> представляет типизированный массив 8-разрядных целых беззнаковых значений. Содержимое инициализируется значением 0. Создав экземпляр <strong><code>Uint8Array</code></strong>, возможно получить доступ к элементам массива, используя методы объекта или стандартный синтаксис доступа к элементу массива по его индексу (с помощью скобочной нотации).</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Uint8Array(); // new in ES2017
+new Uint8Array(length);
+new Uint8Array(typedArray);
+new Uint8Array(object);
+new Uint8Array(buffer [, byteOffset [, length]]);</pre>
+
+<p>For more information about the constructor syntax and the parameters, see <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8Array.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Returns a number value of the element size. <code>1</code> in the case of an <code>Uint8Array</code>.</dd>
+ <dt>Uint8Array.length</dt>
+ <dd>Static length property whose value is 0. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Uint8Array.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Uint8Array</code> type: "Uint8Array".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Uint8Array.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Uint8Array.from()")}}</dt>
+ <dd>Creates a new <code>Uint8Array</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Uint8Array.of()")}}</dt>
+ <dd>Creates a new <code>Uint8Array</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Uint8Array_prototype"><code>Uint8Array</code> prototype</h2>
+
+<p>All <code>Uint8Array</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Uint8Array.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Uint8Array</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Uint8Array.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Uint8Array</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Uint8Array.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Uint8Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Uint8Array.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Uint8Array</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Uint8Array.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements held in the <code>Uint8Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Uint8Array.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Uint8Array.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Uint8Array.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Uint8Array.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Uint8Array.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Uint8Array.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Uint8Array.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Uint8Array.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Uint8Array.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Uint8Array.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Uint8Array.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Uint8Array.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Uint8Array.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Uint8Array.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Uint8Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Uint8Array.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Uint8Array.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Uint8Array.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Uint8Array.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Uint8Array.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Uint8Array.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Uint8Array.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Uint8Array.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Uint8Array</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Uint8Array.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Uint8Array.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Uint8Array.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Uint8Array.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<p>Different ways to create a <code>Uint8Array</code>:</p>
+
+<pre class="brush: js">// From a length
+var uint8 = new Uint8Array(2);
+uint8[0] = 42;
+console.log(uint8[0]); // 42
+console.log(uint8.length); // 2
+console.log(uint8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>ECMAScript 2017 changed the <code>Uint8Array</code> constructor to use the <code>ToIndex</code> operation and allows constructors with no arguments.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Uint8Array")}}</p>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015, <code>Uint8Array</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Uint8Array</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Uint8Array([1, 2, 3]);
+// TypeError: calling a builtin Uint8Array constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Uint8Array([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/uint8clampedarray/index.html b/files/ru/web/javascript/reference/global_objects/uint8clampedarray/index.html
new file mode 100644
index 0000000000..e686cc5806
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/uint8clampedarray/index.html
@@ -0,0 +1,256 @@
+---
+title: Uint8ClampedArray
+slug: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray
+translation_of: Web/JavaScript/Reference/Global_Objects/Uint8ClampedArray
+---
+<div>{{JSRef}}</div>
+
+<p>Типизированный массив<strong><code> Uint8ClampedArray </code></strong>—  это массив,  служащий для хранения 8-битных безнаковых чисел, обрезаемых до диапазона от 0 до 255. Если значение меньше 0, то оно будет приведено к 0 , и к 255, если оно больше 255. Числа с плавающей точкой округляются с помощью математического округления. Массив инициализуруется нулями. После того как значение установлено, Вы можете ссылаться на него с помощью методов объекта или через стандартный синтаксис массивов (то есть, брать значения с помощью квадратных скобок). </p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">new Uint8ClampedArray(length);
+new Uint8ClampedArray(typedArray);
+new Uint8ClampedArray(object);
+new Uint8ClampedArray(buffer [, byteOffset [, length]]);</pre>
+
+<p>Для более подробной информации, смотрите <em><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#Syntax">TypedArray</a></em>.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.BYTES_PER_ELEMENT", "Uint8ClampedArray.BYTES_PER_ELEMENT")}}</dt>
+ <dd>Возвращает размер элемента в байтах. Для Uint8ClampedArray оно равно 1.</dd>
+ <dt>Uint8ClampedArray.length</dt>
+ <dd>Static length property whose value is 3. For the actual length (number of elements), see {{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}}.</dd>
+ <dt>{{jsxref("TypedArray.name", "Uint8ClampedArray.name")}}</dt>
+ <dd>Returns the string value of the constructor name. In the case of the <code>Uint8ClampedArray</code> type: "Uint8ClampedArray".</dd>
+ <dt>{{jsxref("TypedArray.prototype", "Uint8ClampedArray.prototype")}}</dt>
+ <dd>Prototype for the <em>TypedArray</em> objects.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("TypedArray.from", "Uint8ClampedArray.from()")}}</dt>
+ <dd>Creates a new <code>Uint8ClampedArray</code> from an array-like or iterable object. See also {{jsxref("Array.from()")}}.</dd>
+ <dt>{{jsxref("TypedArray.of", "Uint8ClampedArray.of()")}}</dt>
+ <dd>Creates a new <code>Uint8ClampedArray</code> with a variable number of arguments. See also {{jsxref("Array.of()")}}.</dd>
+</dl>
+
+<h2 id="Uint8ClampedArray_prototype"><code>Uint8ClampedArray</code> prototype</h2>
+
+<p>All <code>Uint8ClampedArray</code> objects inherit from {{jsxref("TypedArray.prototype", "%TypedArray%.prototype")}}.</p>
+
+<h3 id="Properties_2">Properties</h3>
+
+<dl>
+ <dt><code>Uint8ClampedArray.prototype.constructor</code></dt>
+ <dd>Returns the function that created an instance's prototype. This is the <code>Uint8ClampedArray</code> constructor by default.</dd>
+ <dt>{{jsxref("TypedArray.prototype.buffer", "Uint8ClampedArray.prototype.buffer")}} {{readonlyInline}}</dt>
+ <dd>Returns the {{jsxref("ArrayBuffer")}} referenced by the <code>Uint8ClampedArray</code> Fixed at construction time and thus <strong>read only</strong>.</dd>
+ <dt>{{jsxref("TypedArray.prototype.byteLength", "Uint8ClampedArray.prototype.byteLength")}} {{readonlyInline}}</dt>
+ <dd>Returns the length (in bytes) of the <code>Uint8ClampedArray</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.byteOffset", "Uint8ClampedArray.prototype.byteOffset")}} {{readonlyInline}}</dt>
+ <dd>Returns the offset (in bytes) of the <code>Uint8ClampedArray</code> from the start of its {{jsxref("ArrayBuffer")}}. Fixed at construction time and thus <strong>read only.</strong></dd>
+ <dt>{{jsxref("TypedArray.prototype.length", "Uint8ClampedArray.prototype.length")}} {{readonlyInline}}</dt>
+ <dd>Returns the number of elements hold in the <code>UintClamped8Array</code>. Fixed at construction time and thus <strong>read only.</strong></dd>
+</dl>
+
+<h3 id="Methods_2">Methods</h3>
+
+<dl>
+ <dt>{{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}</dt>
+ <dd>Copies a sequence of array elements within the array. See also {{jsxref("Array.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.entries", "Uint8ClampedArray.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the key/value pairs for each index in the array. See also {{jsxref("Array.prototype.entries()")}}.</dd>
+ <dt>{{jsxref("TypedArray.every", "Uint8ClampedArray.prototype.every()")}}</dt>
+ <dd>Tests whether all elements in the array pass the test provided by a function. See also {{jsxref("Array.prototype.every()")}}.</dd>
+ <dt>{{jsxref("TypedArray.fill", "Uint8ClampedArray.prototype.fill()")}}</dt>
+ <dd>Fills all the elements of an array from a start index to an end index with a static value. See also {{jsxref("Array.prototype.fill()")}}.</dd>
+ <dt>{{jsxref("TypedArray.filter", "Uint8ClampedArray.prototype.filter()")}}</dt>
+ <dd>Creates a new array with all of the elements of this array for which the provided filtering function returns true. See also {{jsxref("Array.prototype.filter()")}}.</dd>
+ <dt>{{jsxref("TypedArray.find", "Uint8ClampedArray.prototype.find()")}}</dt>
+ <dd>Returns the found value in the array, if an element in the array satisfies the provided testing function or <code>undefined</code> if not found. See also {{jsxref("Array.prototype.find()")}}.</dd>
+ <dt>{{jsxref("TypedArray.findIndex", "Uint8ClampedArray.prototype.findIndex()")}}</dt>
+ <dd>Returns the found index in the array, if an element in the array satisfies the provided testing function or -1 if not found. See also {{jsxref("Array.prototype.findIndex()")}}.</dd>
+ <dt>{{jsxref("TypedArray.forEach", "Uint8ClampedArray.prototype.forEach()")}}</dt>
+ <dd>Calls a function for each element in the array. See also {{jsxref("Array.prototype.forEach()")}}.</dd>
+ <dt>{{jsxref("TypedArray.includes", "Uint8ClampedArray.prototype.includes()")}} {{experimental_inline}}</dt>
+ <dd>Determines whether a typed array includes a certain element, returning <code>true</code> or <code>false</code> as appropriate. See also {{jsxref("Array.prototype.includes()")}}.</dd>
+ <dt>{{jsxref("TypedArray.indexOf", "Uint8ClampedArray.prototype.indexOf()")}}</dt>
+ <dd>Returns the first (least) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.indexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.join", "Uint8ClampedArray.prototype.join()")}}</dt>
+ <dd>Joins all elements of an array into a string. See also {{jsxref("Array.prototype.join()")}}.</dd>
+ <dt>{{jsxref("TypedArray.keys", "Uint8ClampedArray.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> that contains the keys for each index in the array. See also {{jsxref("Array.prototype.keys()")}}.</dd>
+ <dt>{{jsxref("TypedArray.lastIndexOf", "Uint8ClampedArray.prototype.lastIndexOf()")}}</dt>
+ <dd>Returns the last (greatest) index of an element within the array equal to the specified value, or -1 if none is found. See also {{jsxref("Array.prototype.lastIndexOf()")}}.</dd>
+ <dt>{{jsxref("TypedArray.map", "Uint8ClampedArray.prototype.map()")}}</dt>
+ <dd>Creates a new array with the results of calling a provided function on every element in this array. See also {{jsxref("Array.prototype.map()")}}.</dd>
+ <dt>{{jsxref("TypedArray.move", "Uint8ClampedArray.prototype.move()")}} {{non-standard_inline}} {{unimplemented_inline}}</dt>
+ <dd>Former non-standard version of {{jsxref("TypedArray.copyWithin", "Uint8ClampedArray.prototype.copyWithin()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduce", "Uint8ClampedArray.prototype.reduce()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from left-to-right) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduce()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reduceRight", "Uint8ClampedArray.prototype.reduceRight()")}}</dt>
+ <dd>Apply a function against an accumulator and each value of the array (from right-to-left) as to reduce it to a single value. See also {{jsxref("Array.prototype.reduceRight()")}}.</dd>
+ <dt>{{jsxref("TypedArray.reverse", "Uint8ClampedArray.prototype.reverse()")}}</dt>
+ <dd>Reverses the order of the elements of an array — the first becomes the last, and the last becomes the first. See also {{jsxref("Array.prototype.reverse()")}}.</dd>
+ <dt>{{jsxref("TypedArray.set", "Uint8ClampedArray.prototype.set()")}}</dt>
+ <dd>Stores multiple values in the typed array, reading input values from a specified array.</dd>
+ <dt>{{jsxref("TypedArray.slice", "Uint8ClampedArray.prototype.slice()")}}</dt>
+ <dd>Extracts a section of an array and returns a new array. See also {{jsxref("Array.prototype.slice()")}}.</dd>
+ <dt>{{jsxref("TypedArray.some", "Uint8ClampedArray.prototype.some()")}}</dt>
+ <dd>Returns true if at least one element in this array satisfies the provided testing function. See also {{jsxref("Array.prototype.some()")}}.</dd>
+ <dt>{{jsxref("TypedArray.sort", "Uint8ClampedArray.prototype.sort()")}}</dt>
+ <dd>Sorts the elements of an array in place and returns the array. See also {{jsxref("Array.prototype.sort()")}}.</dd>
+ <dt>{{jsxref("TypedArray.subarray", "Uint8ClampedArray.prototype.subarray()")}}</dt>
+ <dd>Returns a new <code>Uint8ClampedArray</code> from the given start and end element index.</dd>
+ <dt>{{jsxref("TypedArray.values", "Uint8ClampedArray.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array. See also {{jsxref("Array.prototype.values()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toLocaleString", "Uint8ClampedArray.prototype.toLocaleString()")}}</dt>
+ <dd>Returns a localized string representing the array and its elements. See also {{jsxref("Array.prototype.toLocaleString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.toString", "Uint8ClampedArray.prototype.toString()")}}</dt>
+ <dd>Returns a string representing the array and its elements. See also {{jsxref("Array.prototype.toString()")}}.</dd>
+ <dt>{{jsxref("TypedArray.@@iterator", "Uint8ClampedArray.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Array Iterator</code> object that contains the values for each index in the array.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<pre class="brush: js">// From a length
+var uintc8 = new Uint8ClampedArray(2);
+uintc8[0] = 42;
+uintc8[1] = 1337;
+console.log(uintc8[0]); // 42
+console.log(uintc8[1]); // 255 (clamped)
+console.log(uintc8.length); // 2
+console.log(uintc8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Uint8ClampedArray([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint8ClampedArray([21, 31]);
+var y = new Uint8ClampedArray(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8ClampedArray(buffer, 1, 4);
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Superseded by ECMAScript 6.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition in an ECMA standard. Specified that <code>new</code> is required.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#table-49', 'TypedArray constructors')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>7.0</td>
+ <td>{{ CompatGeckoDesktop(2) }}</td>
+ <td>11 (as of <a href="https://support.microsoft.com/en-us/kb/2929437">KB2929437</a>)</td>
+ <td>11.6</td>
+ <td>5.1</td>
+ </tr>
+ <tr>
+ <td><code>new</code> is required</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{ CompatGeckoDesktop(44) }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>4.0</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile(2) }}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>11.6</td>
+ <td>4.2</td>
+ </tr>
+ <tr>
+ <td><code>new</code> is required</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{ CompatGeckoMobile(44) }}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Compatibility_notes">Compatibility notes</h2>
+
+<p>Starting with ECMAScript 2015 (ES6), <code>Uint8ClampedArray</code> constructors require to be constructed with a {{jsxref("Operators/new", "new")}} operator. Calling a <code>Uint8ClampedArray</code> constructor as a function without <code>new</code>, will throw a {{jsxref("TypeError")}} from now on.</p>
+
+<pre class="brush: js example-bad">var dv = Uint8ClampedArray([1, 2, 3]);
+// TypeError: calling a builtin Uint8ClampedArray constructor
+// without new is forbidden</pre>
+
+<pre class="brush: js example-good">var dv = new Uint8ClampedArray([1, 2, 3]);</pre>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/undefined/index.html b/files/ru/web/javascript/reference/global_objects/undefined/index.html
new file mode 100644
index 0000000000..adb250f4f8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/undefined/index.html
@@ -0,0 +1,143 @@
+---
+title: undefined
+slug: Web/JavaScript/Reference/Global_Objects/undefined
+tags:
+ - JavaScript
+ - NeedsUpdate
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/undefined
+---
+<div>{{jsSidebar("Objects")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Значение глобального свойства <code><strong>undefined</strong></code> представляет значение <code>{{Glossary("Undefined", "undefined")}}</code>. Это одно из {{Glossary("Primitive", "примитивных значений")}} JavaScript.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<div></div>
+
+<p>{{EmbedInteractiveExample("pages/js/globalprops-undefined.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>undefined</code></pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>undefined</code> является свойством <em>глобального объекта</em>, то есть, это переменная в глобальной области видимости. Начальным значением <code>undefined</code> является примитивное значение <code>undefined</code>.</p>
+
+<p>В современных браузерах (JavaScript 1.8.5 / Firefox 4+), <code>undefined</code> является ненастраиваемым и незаписываемым свойством, в соответствии со спецификацией ECMAScript 5. Даже когда это не так, избегайте его переопределения.</p>
+
+<p>Переменная, не имеющая присвоенного значения, обладает типом <code>undefined</code>. Также <code>undefined</code> возвращают метод или инструкция, если переменная, участвующая в вычислениях, не имеет присвоенного значения. Функция возвращает <code>undefined</code>, если она не {{jsxref("Statements/return", "возвращает", "", 1)}} какого-либо значения.</p>
+
+<p>Поскольку <code>undefined</code> не является {{jsxref("Reserved_Words", "зарезервированным словом", "", 1)}}, он может использоваться в качестве <a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Variables">идентификатора</a> (имени переменной) в любой области видимости, за исключением глобальной.</p>
+
+<pre class="brush: js">// печатает 'foo string'
+(function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })();
+
+// печатает 'foo string'
+(function(undefined){ console.log(undefined, typeof undefined); })('foo');
+</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Strict_equality_and_undefined" name="Strict_equality_and_undefined">Пример: строгое сравнение и <code>undefined</code></h3>
+
+<p>Вы можете использовать <code>undefined</code> и операторы строгого равенства или неравенства для определения того, имеет ли переменная значение. В следующем коде переменная <code>x</code> не определена и инструкция <code>if</code> вычисляется в <code>true</code>.</p>
+
+<pre class="brush: js">var x;
+if (x === undefined) {
+ // эти инструкции будут выполнены
+}
+else {
+ // эти инструкции не будут выполнены
+}
+</pre>
+
+<div class="note">
+<p><strong>Обратите внимание:</strong> здесь используется оператор строгого равенства (идентичности) вместо простого оператора равенства, поскольку <code>x == undefined</code> также проверяет, является ли <code>x</code> равным <code>null</code>, в то время как оператор идентичности этого не делает. {{jsxref("Global_Objects/null", "null")}} не эквивалентен <code>undefined</code>. Для более подробной информации смотрите {{jsxref("Operators/Comparison_Operators", "операторы сравнения", "", 1)}}.</p>
+</div>
+
+<h3 id="Typeof_operator_and_undefined" name="Typeof_operator_and_undefined">Пример: оператор <code>typeof</code> и <code>undefined</code></h3>
+
+<p>В качестве альтернативы можно использовать оператор {{jsxref("Operators/typeof", "typeof")}}:</p>
+
+<pre class="brush: js">var x;
+if (typeof x === 'undefined') {
+ // эти инструкции будут выполнены
+}
+</pre>
+
+<p>Одной из причин использования оператора {{jsxref("Operators/typeof", "typeof")}} может быть та, что он не выбрасывает ошибку, если переменная не была определена.</p>
+
+<pre class="brush: js">// переменная x не была определена ранее
+if (typeof x === 'undefined') { // вычислится в true без ошибок
+ // эти инструкции будут выполнены
+}
+
+if (x === undefined) { // выкинет ReferenceError
+
+}
+</pre>
+
+<p>Однако, уловки такого рода должны избегаться. JavaScript является языком со статической областью видимости, так что узнать, была ли переменная определена, можно путём просмотра, была ли она определена в охватывающем контексте. Единственным исключением являет глобальная область видимости, но глобальная область видимости привязана к глобальному объекту, так что проверка существования переменной в глобальном контексте может быть осуществлена путём проверки существования свойства <em>глобального объекта</em> (например, используя оператор {{jsxref("Operators/in", "in")}}).</p>
+
+<h3 id="Void_operator_and_undefined" name="Void_operator_and_undefined">Пример: оператор <code>void</code> и <code>undefined</code></h3>
+
+<p>Третьей альтернативой является оператор {{jsxref("Operators/void", "void")}}.</p>
+
+<pre class="brush: js">var x;
+if (x === void 0) {
+ // эти инструкции будут выполнены
+}
+
+// переменная y не была определена ранее
+if (y === void 0) {
+ // выкинет ReferenceError (в отличие от оператора `typeof`)
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.1.1.3', 'undefined')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-undefined', 'undefined')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.undefined")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/NaN", "NaN")}}</li>
+ <li>{{jsxref("Global_Objects/null", "null")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/unescape/index.html b/files/ru/web/javascript/reference/global_objects/unescape/index.html
new file mode 100644
index 0000000000..503782b5d0
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/unescape/index.html
@@ -0,0 +1,126 @@
+---
+title: unescape()
+slug: Web/JavaScript/Reference/Global_Objects/unescape
+translation_of: Web/JavaScript/Reference/Global_Objects/unescape
+---
+<div>
+<div>
+<div>{{jsSidebar("Objects")}} {{deprecated_header()}}</div>
+</div>
+</div>
+
+<h2 id="Summary" name="Summary">Описание</h2>
+
+<p>Устаревший метод <code><strong>unescape(str)</strong></code> создает новую строку в которой шестнадцатиричная последовательность симоволов вида %xx заменяется эквивалентами из кодировки ASCII. Знаки, закодированные в формате %uxxxx (знаки Юникода), заменяются знаками Юникода в шестнадцатеричной кодировке xxxx.</p>
+
+<p>Последовательность может быть результатом работы функции вроде {{jsxref("Global_Objects/escape", "escape")}}. Т.к. {{jsxref("Global_Objects/decodeURIComponent", "unescape")}} является устаревшей, используйте {{jsxref("Global_Objects/decodeURI", "decodeURI")}} или {{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} вместо неё.</p>
+
+<div class="note"><strong>Обратите внимание:</strong> Не рекомендуется использовать <code>unescape</code> чтобы декодировать URI, используйте <code>decodeURI</code> вместо него.</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>unescape(str)</code></pre>
+
+<h3 id="Parameters" name="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>str</code></dt>
+ <dd>Строка которую необходимо преобразовать</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>Функция unescape</code> это свойство <em>глабального объекта</em>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js">unescape("abc123"); // "abc123"
+unescape("%E4%F6%FC"); // "äöü"
+unescape("%u0107"); // "ć"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Standard</td>
+ <td>Начальное определние.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-B.2.2', 'unescape')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено в (информативно) Compatibility Annex B</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-unescape-string', 'unescape')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено в (нормативно) Annex B for Additional ECMAScript Features for Web Browsers</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_Also" name="See_Also">Смотрите так же</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/decodeURI", "decodeURI")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/uneval/index.html b/files/ru/web/javascript/reference/global_objects/uneval/index.html
new file mode 100644
index 0000000000..21cd4e9958
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/uneval/index.html
@@ -0,0 +1,73 @@
+---
+title: uneval()
+slug: Web/JavaScript/Reference/Global_Objects/uneval
+tags:
+ - JavaScript
+ - Reference
+translation_of: Web/JavaScript/Reference/Global_Objects/uneval
+---
+<p>{{jsSidebar("Objects")}}{{Non-standard_header}}</p>
+
+<div><strong style="font-size: 2.14285714285714rem; font-weight: 700; letter-spacing: -1px; line-height: 30px;">Сводка</strong></div>
+
+<p><code style="font-style: normal; line-height: 1.5;"><strong>uneval()</strong></code><span style="line-height: 1.5;"> метод создает строковое представление исходного кода объекта.</span></p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">uneval(object)</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>JavaScript-выражение или оператор.</dd>
+</dl>
+
+<div class="note"><strong>Примечание:</strong> Вы не получите корректное JSON-представление объекта.</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p><code>uneval()</code> является функцией высшего порядка и не связана с любым объектом.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush:js">var a = 1;
+uneval(a); // возвращает строку, содержащую 1
+
+var b = "1";
+uneval(b) // возвращает строку, содержащую "1"
+
+uneval(function foo(){}); // возвращает "(function foo(){})"
+
+
+var a = uneval(function foo(){return 'привет'});
+var foo = eval(a);
+foo(); // возвращает "привет"
+</pre>
+
+<h2 id="See_also" name="See_also">Технические характеристики</h2>
+
+<p>Не является частью какой-либо спецификации.</p>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<p> </p>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.uneval")}}</p>
+
+<p> </p>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_Also" name="See_Also">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Global_Objects/eval", "eval()")}}</li>
+ <li>{{jsxref("JSON.stringify")}}</li>
+ <li>{{jsxref("JSON.parse")}}</li>
+ <li>{{jsxref("Object.toSource")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/urierror/index.html b/files/ru/web/javascript/reference/global_objects/urierror/index.html
new file mode 100644
index 0000000000..c93ab67453
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/urierror/index.html
@@ -0,0 +1,163 @@
+---
+title: URIError
+slug: Web/JavaScript/Reference/Global_Objects/URIError
+tags:
+ - Error
+ - JavaScript
+ - Object
+ - Reference
+ - URIError
+translation_of: Web/JavaScript/Reference/Global_Objects/URIError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Объект <code><strong>URIError</strong></code> представляет ошибку, возникающую при неправильном использовании глобальных функций обработки URI.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+<pre class="syntaxbox"><code>new URIError([<var>message</var>[, <var>fileName</var>[, <var>lineNumber</var>]]])</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+<dl>
+ <dt><code>message</code></dt>
+ <dd>Необязательный параметр. Человеко-читаемое описание ошибки.</dd>
+ <dt><code>fileName</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Имя файла, содержащего код, вызвавший исключение.</dd>
+ <dt><code>lineNumber</code> {{non-standard_inline}}</dt>
+ <dd>Необязательный параметр. Номер строки кода, вызвавшей исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Исключение <code>URIError</code> выбрасывается при передаче некорректного URI в глобальные функции обработки URI.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt>{{jsxref("URIError.prototype")}}</dt>
+ <dd>Позволяет добавлять свойства в объект <code>URIError</code>.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Глобальный объект <code>URIError</code> не содержит собственных методов, однако, он наследует некоторые методы из цепочки прототипов.</p>
+
+<h2 id="URIError_instances" name="URIError_instances">Экземпляры объекта <code>URIError</code></h2>
+
+<h3 id="Properties_of_URIError_instances" name="Properties_of_URIError_instances">Свойства</h3>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/URIError/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_of_URIError_instances" name="Methods_of_URIError_instances">Методы</h3>
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects/URIError/prototype', 'Methods')}}</div>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Catch_an_URIError" name="Example:_Catch_an_URIError">Пример: перехват исключения <code>URIError</code></h3>
+<pre class="brush: js">try {
+ decodeURIComponent('%');
+} catch (e) {
+ console.log(e instanceof URIError); // true
+ console.log(e.message); // "malformed URI sequence" - неверный формат последовательности URI
+ console.log(e.name); // "URIError"
+ console.log(e.fileName); // "Scratchpad/1"
+ console.log(e.lineNumber); // 2
+ console.log(e.columnNumber); // 2
+ console.log(e.stack); // "@Scratchpad/2:2:3\n"
+}
+</pre>
+
+<h3 id="Example:_Create_an_URIError" name="Example:_Create_an_URIError">Пример: возбуждение исключения <code>URIError</code></h3>
+<pre class="brush: js">try {
+ throw new URIError('Привет', 'someFile.js', 10);
+} catch (e) {
+ console.log(e instanceof URIError); // true
+ console.log(e.message); // "Привет"
+ console.log(e.name); // "URIError"
+ console.log(e.fileName); // "someFile.js"
+ console.log(e.lineNumber); // 10
+ console.log(e.columnNumber); // 0
+ console.log(e.stack); // "@Scratchpad/2:2:9\n"
+}
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.6.6', 'URIError')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-native-error-types-used-in-this-standard-urierror', 'URIError')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("URIError.prototype")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURI", "decodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURI", "encodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/urierror/prototype/index.html b/files/ru/web/javascript/reference/global_objects/urierror/prototype/index.html
new file mode 100644
index 0000000000..5e149071db
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/urierror/prototype/index.html
@@ -0,0 +1,122 @@
+---
+title: URIError.prototype
+slug: Web/JavaScript/Reference/Global_Objects/URIError/prototype
+tags:
+ - Error
+ - JavaScript
+ - Property
+ - Prototype
+ - URIError
+translation_of: Web/JavaScript/Reference/Global_Objects/URIError
+---
+<div>{{JSRef("Global_Objects", "Error", "EvalError,InternalError,RangeError,ReferenceError,SyntaxError,TypeError,URIError")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+<p>Свойство <code><strong>URIError.prototype</strong></code> представляет прототип конструктора объекта {{jsxref("URIError")}}.</p>
+
+<div>{{js_property_attributes(0, 0, 0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+<p>Все экземпляры {{jsxref("URIError")}} наследуются от объекта <code>URIError.prototype</code>. Вы можете использовать прототип для добавления свойств или методов ко всем экземплярам.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+<dl>
+ <dt><code>URIError.prototype.constructor</code></dt>
+ <dd>Определяет функцию, создающую прототип экземпляра.</dd>
+ <dt>{{jsxref("Error.prototype.message", "URIError.prototype.message")}}</dt>
+ <dd>Сообщение ошибки. Хотя стандарт ECMA-262 определяет, что {{jsxref("URIError")}} должен предоставлять своё собственное свойство <code>message</code>, в <a href="/ru/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> он наследует свойство {{jsxref("Error.prototype.message")}}.</dd>
+ <dt>{{jsxref("Error.prototype.name", "URIError.prototype.name")}}</dt>
+ <dd>Название ошибки. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.fileName", "URIError.prototype.fileName")}}</dt>
+ <dd>Путь к файлу, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.lineNumber", "URIError.prototype.lineNumber")}}</dt>
+ <dd>Номер строки в файле, в котором возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.columnNumber", "URIError.prototype.columnNumber")}}</dt>
+ <dd>Номер колонки в строке, на которой возникла эта ошибка. Унаследовано от {{jsxref("Error")}}.</dd>
+ <dt>{{jsxref("Error.prototype.stack", "URIError.prototype.stack")}}</dt>
+ <dd>Стек вызовов. Унаследовано от {{jsxref("Error")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+<p>Хотя объект прототипа {{jsxref("URIError")}} не содержит собственных методов, экземпляры {{jsxref("URIError")}} наследуют некоторые методы из цепочки прототипов.</p>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.11.7.6', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-nativeerror.prototype', 'NativeError.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено как <code><em>NativeError</em>.prototype</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome для Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Error.prototype")}}</li>
+ <li>{{jsxref("Function.prototype")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..260264b01d
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/clear/index.html
@@ -0,0 +1,91 @@
+---
+title: WeakMap.prototype.clear()
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/clear
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/clear
+---
+<div>{{JSRef}} {{obsolete_header}}</div>
+
+<p>Метод <code><strong>clear()</strong></code> удаляет все элементы из объекта WeakMap, но он больше не является частью ECMAScript и его реализаций.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>wm</em>.clear();</code></pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_clear">Использование метода <code>clear</code></h3>
+
+<pre class="brush: js;highlight:[10]">var wm = new WeakMap();
+var obj = {};
+
+wm.set(obj, "foo");
+wm.set(window, "bar");
+
+wm.has(obj); // true
+wm.has(window); // true
+
+wm.clear();
+
+wm.has(obj) // false
+wm.has(window) // false
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p>Не входит ни в одну текущую спецификацию или черновик. Этот метод был частью черновика ECMAScript 6, до 28 ревизии (версия от 14 октября, 2014), но был удален в последующих версиях черновика. В финальном стандарте его не будет.</p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>20-45</td>
+ <td>11</td>
+ <td>23</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>20-45</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakMap")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..76e4b078dc
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/delete/index.html
@@ -0,0 +1,114 @@
+---
+title: WeakMap.prototype.delete()
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/delete
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/delete
+---
+<div>{{JSRef}}</div>
+
+<p><code><font face="Open Sans, Arial, sans-serif">Метод </font><strong>delete()</strong></code> удаляет элемент из объекта WeakMap.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>wm</em>.delete(key);</code></pre>
+
+<h3 id="Параетры">Параетры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязателен. Ключ элемента, который будет уделен из объекта WeakMap.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращает true если элемент из объекта WeakMap удалён успешно.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_delete">Использование метода delete</h3>
+
+<pre class="brush: js;highlight:[4]">var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.delete(window); // Возвращает true. Успешно удалён.
+
+wm.has(window); // Возвращает false. Объекта window больше нет в WeakMap.
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakmap.prototype.delete', 'WeakMap.prototype.delete')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop("6.0")}}</td>
+ <td>11</td>
+ <td>23</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("6.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Firefox-specific_notes">Firefox-specific notes</h2>
+
+<ul>
+ <li>Prior to SpiderMonkey 38 {{geckoRelease(38)}}, this method threw a {{jsxref("TypeError")}} when the <code>key</code> parameter was not an object. This has been fixed in version 38 and later to return <code>false</code> as per latest ES6 standard ({{bug(1127827)}}).</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakMap")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html
new file mode 100644
index 0000000000..3617aa5f82
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/get/index.html
@@ -0,0 +1,115 @@
+---
+title: WeakMap.prototype.get()
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/get
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/get
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>get()</strong></code> возвращает элемент из объекта WeakMap,</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>wm</em>.get(key);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязателен. Ключ элемента, который будет возвращён из объекта WeakMap.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Возвращает элемент по указанному ключу или undefined, если ключ не может быть найден в объекте WeakMap.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_get">Использование метода get</h3>
+
+<pre class="brush: js">var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.get(window); // Возвращает "foo".
+wm.get("baz"); // Возвращает undefined.
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakmap.prototype.get', 'WeakMap.prototype.get')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop("6.0")}}</td>
+ <td>11</td>
+ <td>23</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("6.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Firefox-specific_notes">Firefox-specific notes</h2>
+
+<ul>
+ <li>Prior to SpiderMonkey 38 {{geckoRelease(38)}}, this method threw a {{jsxref("TypeError")}} when the key parameter was not an object. However, the latest ES6 standard specifies to return <code>undefined</code> instead. Furthermore, <code>WeakMap.prototype.get</code> accepted an optional second argument as a fallback value, which is not part of the standard. Both non-standard behaviors are removed in version 38 and higher ({{bug(1127827)}}).</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakMap.set()")}}</li>
+ <li>{{jsxref("WeakMap.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html
new file mode 100644
index 0000000000..18eede2abb
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/has/index.html
@@ -0,0 +1,118 @@
+---
+title: WeakMap.prototype.has()
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/has
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/has
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>has()</strong></code> возвращает булевое значение, которое указывает на то существует элемент с таким ключом в объекте WeakMap или нет.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>wm</em>.has(key);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязателен. Ключ элемента, существование которого необходимо проверить в объекте WeakMap.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<dl>
+ <dt>Boolean</dt>
+ <dd>Возвращает <code>true</code> если элемент с указанным ключом существует в объекте WeakMap, если нет — false.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_has">Использование метода <code>has</code></h3>
+
+<pre class="brush: js">var wm = new WeakMap();
+wm.set(window, "foo");
+
+wm.has(window); // возвращает true
+wm.has("baz"); // возвращает false
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakmap.prototype.has', 'WeakMap.prototype.has')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop("6.0")}}</td>
+ <td>11</td>
+ <td>23</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("6.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Firefox-specific_notes">Firefox-specific notes</h2>
+
+<ul>
+ <li>Prior to SpiderMonkey 38 {{geckoRelease(38)}}, this method threw a {{jsxref("TypeError")}} when the <code>key</code> parameter was not an object. This has been fixed in version 38 and later to return <code>false</code> as per latest ES6 standard ({{bug(1127827)}}).</li>
+</ul>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakMap.prototype.set()")}}</li>
+ <li>{{jsxref("WeakMap.prototype.get()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/index.html
new file mode 100644
index 0000000000..1bf1b3c017
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/index.html
@@ -0,0 +1,158 @@
+---
+title: WeakMap
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap
+---
+<div>{{JSRef("Global_Objects", "WeakMap")}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p>Объект <strong><code>WeakMap</code></strong> — коллекция пар ключ-значение. В качестве ключей могут быть использованы только объекты, а значения могут быть произвольных типов.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code>new WeakMap([iterable])
+</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>iterable</code></dt>
+ <dd>Может быть массивом или любым другим итерируемым объектом, элементы которого являются парами ключ-значение (массивы из двух элементов). Каждая пара ключ-значение будет добавлена во вновь созданный экземпляр <code>WeakMap</code>. <code>Null</code> обрабатывается как <code>undefined</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Ключами WeakMap могут быть только объекты. {{Glossary("Primitive", "Примитивы")}} в качестве ключей не допускаются (т.е. {{jsxref("Symbol")}} не может быть ключом <code>WeakMap</code>).</p>
+
+<h3 id="Почему_WeakMap">Почему<em> Weak</em>Map?</h3>
+
+<p>Опытный JavaScript разработчик заметит, что map API можно реализовать на JavaScript c помощью двух массивов (один для ключей, второй для значений) и четырех общих API методов. Установка элементов в этот map должна будет одновременно запушить ключи и значения. В результате индексы ключа и значения будут корректными. Получение значений с map потребует итерирование ключей, чтобы найти совпадение, а затем использование индекса этого соответствия для извлечения соответствующего значения из массива значений.</p>
+
+<p>У такой реализации было бы два главных неудобства. Первым является O(n) поиск (где n — количество ключей в map), так как обе операции требуют итерирование списка ключей для нахождения совпадения. Вторым <span style="background-color: #f9f9f9; color: #252525; font-family: sans-serif; font-size: 12.3199996948242px; line-height: 18.4799995422363px; text-transform: lowercase;">– </span>проблема утечки памяти. В словарях, написанных вручную, массив с ключами будет хранить ссылки на объекты-ключи, не давая им быть помеченными сборщиком мусора. В нативных <code>WeakMap</code>, ссылки на объекты-ключи хранятся «слабо», что означает то, что они не предотвратят сборку мусора в том случае, если других ссылок на объект не будет.</p>
+
+<p>WeakMaps имеют “weak” («слабые») обращения к ключам объекта, а следовательно непрепятствие сборщику мусора, когда мы больше не имеем объекта-ключа. WeakMaps могут быть особенно полезными конструкциями при сопоставлении ключей с информацией о ключе, который ценен, только если ключ не был собран сборщиком мусора (Garbage collector).</p>
+
+<p>Из-за того, что ссылки являются слабыми, ключи <code>WeakMap</code> не перечисляемы (то есть нет метода, который возвращает список ключей). Иначе список бы зависел от состояния сбора мусора, представляя индетерминизм. Если вы хотите иметь список ключей, вам следует поддерживать его самостоятельно.</p>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>WeakMap.length</code></dt>
+ <dd>Значение свойства <code>length</code> всегда равно 0.</dd>
+ <dt>{{jsxref("WeakMap.prototype")}}</dt>
+ <dd>Представляет прототип конструктора <code>WeakMap</code>. Позволяет добавлять свойства всем объектам типа <code>WeakMap</code>.</dd>
+</dl>
+
+<h2 id="Boolean_instances" name="Boolean_instances">Экземпляры <code>WeakMap</code></h2>
+
+<p>Все экземпляры <code>WeakMap</code> унаследованы от {{jsxref("WeakMap.prototype")}}.</p>
+
+<h3 id="Свойства">Свойства</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype','Properties')}}</p>
+
+<h3 id="Методы">Методы</h3>
+
+<p>{{page('ru/Web/JavaScript/Reference/Global_Objects/WeakMap/prototype','Methods')}}</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_объекта_WeakMap">Использование объекта <code>WeakMap</code></h3>
+
+<pre class="brush: js notranslate">const wm1 = new WeakMap(),
+ wm2 = new WeakMap(),
+ wm3 = new WeakMap();
+const o1 = {},
+ o2 = function(){},
+ o3 = window,
+  o4 = [1, 2, 3];
+
+wm1.set(o1, 37);
+wm1.set(o2, 'azerty');
+wm2.set(o1, o2); // значением может быть что угодно, включая объект или функцию
+wm2.set(o3, undefined);
+wm2.set(wm1, wm2); // ключами и значениями могут быть объекты. Даже WeakMap-ами
+
+wm1.get(o2); // 'azerty'
+wm2.get(o2); // undefined, нет значения для o2 в wm2
+wm2.get(o3); // undefined, это установленное значение
+
+wm1.has(o2); // true
+wm2.has(o2); // false
+wm2.has(o3); // true (даже если значение равно 'undefined')
+
+wm3.set(o1, 37);
+wm3.get(o1); // 37
+
+wm1.has(o1); // true
+wm1.delete(o1);
+wm1.has(o1); // false
+</pre>
+
+<h3 id="Пример_Реализация_класса_WeakMap-like_классов_с_методом_.clear">Пример: Реализация класса WeakMap-like классов с методом .clear()</h3>
+
+<pre class="brush: js notranslate">class ClearableWeakMap {
+ constructor(init) {
+ this._wm = new WeakMap(init)
+ }
+ clear() {
+ this._wm = new WeakMap()
+ }
+ delete(k) {
+ return this._wm.delete(k)
+ }
+ get(k) {
+ return this._wm.get(k)
+ }
+ has(k) {
+ return this._wm.has(k)
+ }
+ set(k, v) {
+ this._wm.set(k, v)
+ return this
+ }
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table>
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-weakmap-objects', 'WeakMap')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakmap-objects', 'WeakMap')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<p style=""></p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.WeakMap")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<p style=""></p>
+
+<ul>
+ <li><a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=547941">WeakMap bug at Mozilla</a></li>
+ <li><a href="http://fitzgeraldnick.com/weblog/53/">Hiding Implementation Details with ECMAScript 6 WeakMaps</a></li>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("WeakSet")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html
new file mode 100644
index 0000000000..3a955a427f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/prototype/index.html
@@ -0,0 +1,74 @@
+---
+title: WeakMap.prototype
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/prototype
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap
+---
+<div>{{JSRef}}</div>
+
+<p><code><strong>WeakMap</strong></code><strong><code>.prototype</code></strong> свойство указыкает на прототип {{jsxref("WeakMap")}} конструктора.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>{{jsxref("WeakMap")}} экзепляры унаследывают {{jsxref("WeakMap.prototype")}}. Вы можите использовать прототип конструктора объекта для добавления нових свойств и/или методов всем экзепляра класса <code>WeakMap</code>.</p>
+
+<p><code>WeakMap.prototype</code> является простым объектом:</p>
+
+<pre class="brush: js">Object.prototype.toString.call(WeakMap.prototype); // "[object Object]"</pre>
+
+<h2 id="Свойства">Свойства</h2>
+
+<dl>
+ <dt><code>WeakMap.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создавшую экземпляр. {{jsxref("WeakMap")}} function by default.</dd>
+</dl>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("WeakMap.delete", "WeakMap.prototype.delete(key)")}}</dt>
+ <dd>Удаление значение по ключу. <code>WeakMap.prototype.has(key)</code> вернет <code>false</code> после.</dd>
+ <dt>{{jsxref("WeakMap.get", "WeakMap.prototype.get(key)")}}</dt>
+ <dd>Возвращает значение по ключу, or <code>undefined</code> такового нет.</dd>
+ <dt>{{jsxref("WeakMap.has", "WeakMap.prototype.has(key)")}}</dt>
+ <dd>Вернет логическое значение, связанное с существованием ключа.</dd>
+ <dt>{{jsxref("WeakMap.set", "WeakMap.prototype.set(key, value)")}}</dt>
+ <dd>Устанавливает значение по ключу, после возвращает самого себя.</dd>
+ <dt><s class="obsoleteElement">{{jsxref("WeakMap.prototype.clear()")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Удаляет все ключи-значения из <code>WeakMap</code> объекта. Заметьте, что это возможно, только есть <code>WeakMap</code>-like объект имеет<code>.clear()</code> метод путем инкапсулирования <code>WeakMap</code> объекта, раннее неимевшего его (смотри пример на странице {{jsxref("WeakMap")}})</s></dd>
+</dl>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-weakmap.prototype', 'WeakMap.prototype')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakmap.prototype', 'WeakMap.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+
+
+<p>{{Compat("javascript.builtins.WeakMap.prototype")}}</p>
+
+<h2 id="Рекомендуем">Рекомендуем</h2>
+
+<ul>
+ <li>{{jsxref("Map.prototype")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html b/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html
new file mode 100644
index 0000000000..f8dad8a44f
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakmap/set/index.html
@@ -0,0 +1,120 @@
+---
+title: WeakMap.prototype.set()
+slug: Web/JavaScript/Reference/Global_Objects/WeakMap/set
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakMap/set
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <code><strong>set()</strong></code> добавляет новый элемент с указанными ключом и значением в объект WeakMap.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>wm</em>.set(key, value);</code></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt>key</dt>
+ <dd>Обязателен. Ключ добавляемого в WeakMap объект элемента.</dd>
+ <dt>value</dt>
+ <dd>Обязателен. Значение добавляемого в WeakMap объект элемента.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Объект <code>WeakMap.</code></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_метода_set">Использование метода <code>set</code></h3>
+
+<pre class="brush: js">var wm = new WeakMap();
+var obj = {};
+
+// Добавляет новый элемент в объект WeakMap
+wm.set(obj, "foo").set(window, "bar"); // chainable
+
+// Обновляет элемент в объекте WeakMap
+wm.set(obj, "baz");
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakmap.prototype.set', 'WeakMap.prototype.set')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop("6.0")}}</td>
+ <td>11</td>
+ <td>23</td>
+ <td>7.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("6.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>8</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Firefox-specific_notes">Firefox-specific notes</h2>
+
+<ul>
+ <li>Prior to Firefox 33 {{geckoRelease("33")}}, <code>WeakMap.prototype.set</code> returned <code>undefined</code> and was not chainable. This has been fixed ({{bug(1031632)}}). The behavior can be found in Chrome/v8 as well (<a href="https://code.google.com/p/v8/issues/detail?id=3410">issue</a>).</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakMap.prototype.get()")}}</li>
+ <li>{{jsxref("WeakMap.prototype.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakset/add/index.html b/files/ru/web/javascript/reference/global_objects/weakset/add/index.html
new file mode 100644
index 0000000000..3534fb4d59
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakset/add/index.html
@@ -0,0 +1,77 @@
+---
+title: WeakSet.prototype.add()
+slug: Web/JavaScript/Reference/Global_Objects/WeakSet/add
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - WeakSet
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/add
+---
+<div>{{JSRef("Global_Objects", "WeakSet")}}</div>
+
+<p>Метод <code><strong>add()</strong></code> добавляет новый объект в конец объекта WeakSet.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>ws</em>.add(value);</code>
+</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Обязателен. Объект, добавляемый в WeakSet.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:Using_the_add_method" name="Example:Using_the_add_method">Использование метода add</h3>
+
+<pre class="brush: js">var ws = new WeakSet();
+
+ws.add(window); // добавляет объект window в WeakSet
+
+ws.has(window); // true
+
+// Weakset принимает в качестве параметров только объекты
+ws.add(1);
+// результат в Chrome: "TypeError: Invalid value used in weak set"
+// результат в Firefox: "TypeError: 1 is not a non-null object" </pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakset.prototype.add', 'WeakSet.prototype.add')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.WeakSet.add")}}</p>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakSet")}}</li>
+ <li>{{jsxref("WeakSet.prototype.delete()")}}</li>
+ <li>{{jsxref("WeakSet.prototype.has()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakset/delete/index.html b/files/ru/web/javascript/reference/global_objects/weakset/delete/index.html
new file mode 100644
index 0000000000..2ebed17dde
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakset/delete/index.html
@@ -0,0 +1,123 @@
+---
+title: WeakSet.prototype.delete()
+slug: Web/JavaScript/Reference/Global_Objects/WeakSet/delete
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - WeakSet
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/delete
+---
+<div>{{JSRef("Global_Objects", "WeakSet")}}</div>
+
+<p>Метод <code><strong>delete()</strong></code> удаляет указанный элемент из объекта <code>WeakSet</code>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>ws</em>.delete(value);</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Обязателен. Объект, удаляемый из  WeakSet.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Если объект был успешно удалён, возвращается true, иначе false.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:Testing_size_of_all_array_elements" name="Example:Testing_size_of_all_array_elements">Использование метода <code>delete</code> </h3>
+
+<pre class="brush: js">var ws = new WeakSet();
+var obj = {};
+
+ws.add(window);
+
+ws.delete(obj); // Вернёт false. Удаляемый объект не найден в WeakSet.
+ws.delete(window); // Вернёт true. Объект успешно удалён.
+
+ws.has(window); // Вернёт false. Объект window был удалён из WeakSet.
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakset.prototype.delete', 'WeakSet.prototype.delete')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop(34)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>23</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile(34) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakSet")}}</li>
+ <li>{{jsxref("WeakSet.prototype.clear()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakset/has/index.html b/files/ru/web/javascript/reference/global_objects/weakset/has/index.html
new file mode 100644
index 0000000000..abd00581e2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakset/has/index.html
@@ -0,0 +1,124 @@
+---
+title: WeakSet.prototype.has()
+slug: Web/JavaScript/Reference/Global_Objects/WeakSet/has
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Method
+ - Prototype
+ - WeakSet
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet/has
+---
+<div>{{JSRef("Global_Objects", "WeakSet")}}</div>
+
+<p>Метод <code><strong>has()</strong></code> определяет, содержит ли WeakSet определённый элемент, возвращая в зависимости от этого true или false. </p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><code><em>ws</em>.has(value);</code></pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt>value</dt>
+ <dd>Обязателен. Искомый объект.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<dl>
+ <dt>Boolean</dt>
+ <dd>Если объект был найден в WeakSet вернёт true, иначе false.</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:Using_the_has_method" name="Example:Using_the_has_method">Использование метода <code>has</code> </h3>
+
+<pre class="brush: js">var ws = new WeakSet();
+var obj = {};
+ws.add(window);
+
+mySet.has(window); // вернёт true
+mySet.has(obj); // вернёт false
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakset.prototype.has', 'WeakSet.prototype.has')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{CompatGeckoDesktop(34)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>23</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile(34) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("WeakSet")}}</li>
+ <li>{{jsxref("WeakSet.prototype.add()")}}</li>
+ <li>{{jsxref("WeakSet.prototype.delete()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakset/index.html b/files/ru/web/javascript/reference/global_objects/weakset/index.html
new file mode 100644
index 0000000000..b4660283a8
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakset/index.html
@@ -0,0 +1,109 @@
+---
+title: WeakSet
+slug: Web/JavaScript/Reference/Global_Objects/WeakSet
+tags:
+ - ECMAScript6
+ - JavaScript
+ - WeakSet
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet
+---
+<div>{{JSRef()}}</div>
+
+<p>Объект <strong><code>WeakSet</code></strong> - коллекция, элементами которой могут быть только <em>объекты. </em>Ссылки на эти объекты в WeakSet являются слабыми. Каждый объект может быть добавлен в WeakSet только один раз.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"> new WeakSet([iterable]);</pre>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt>iterable</dt>
+ <dd>При передаче <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/for...of">итерируемого объекта</a>, все его элементы будут добавлены в новый WeakSet. <code>Null</code> обрабатывается как <code>undefined</code>.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Объекты <code>WeakSet </code>представляют собой коллекции объектов. Каждый объект в WeakSet встречается только один раз, что обеспечивает его уникальность в рамках коллекции WeakSet.</p>
+
+<p>Главным отличия от объекта {{jsxref("Set")}}:</p>
+
+<ul>
+ <li>WeakSet <strong>содержит только объекты</strong>, тогда как Set - значения любого типа.</li>
+ <li>Ссылки на объекты в WeakSet являются слабыми: если на объект, хранимый в WeakSet нет ни одной внешней ссылки, то сборщик мусора удалит этот объект. Также это означает, что WeakSet <strong>не итерируем, </strong>так как нет возможности получить список текущих хранимых в WeakSet объектов.  </li>
+</ul>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>WeakSet.length</code></dt>
+ <dd>Значение свойства <code>length</code> всегда равно 0.</dd>
+ <dt>{{jsxref("WeakSet.prototype")}}</dt>
+ <dd>Представляет прототип конструктора Weak<code>Set</code>. Позволяет добавлять свойства  всем объектам типа <code>WeakSet</code>.</dd>
+</dl>
+
+<h2 id="Экземпляры_WeakSet"><code>Экземпляры WeakSet</code> </h2>
+
+<p>Все экземпляры класса <code>WeakSet</code> унаследованы от {{jsxref("WeakSet.prototype")}}.</p>
+
+<h3 id="Properties_2" name="Properties_2">Свойства</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/prototype','Properties')}}</p>
+
+<h3 id="Methods" name="Methods">Методы</h3>
+
+<p>{{page('ru/docs/Web/JavaScript/Reference/Global_Objects/WeakSet/prototype','Methods')}}</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:Using_the_WeakSet_object" name="Example:Using_the_WeakSet_object">Использование объекта <code>WeakSet</code> </h3>
+
+<pre class="brush: js">var ws = new WeakSet();
+var obj = {};
+var foo = {};
+
+ws.add(window);
+ws.add(obj);
+
+ws.has(window); // true
+ws.has(foo); // false, foo не добавлен в WeakSet
+
+ws.delete(window); // удаляет window из WeakSet
+ws.has(window); // false, window был удалён
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakset-objects', 'WeakSet')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakset-objects', 'WeakSet')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.builtins.WeakSet")}}</p>
+
+<div id="compat-mobile"> </div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Map")}}</li>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("WeakMap")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/weakset/prototype/index.html b/files/ru/web/javascript/reference/global_objects/weakset/prototype/index.html
new file mode 100644
index 0000000000..d7ae6c0270
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/weakset/prototype/index.html
@@ -0,0 +1,141 @@
+---
+title: WeakSet.prototype
+slug: Web/JavaScript/Reference/Global_Objects/WeakSet/prototype
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Property
+ - WeakSet
+translation_of: Web/JavaScript/Reference/Global_Objects/WeakSet
+---
+<div>{{JSRef("Global_Objects", "WeakSet")}}</div>
+
+<p>Свойство <code><strong>WeakSet</strong></code><strong><code>.prototype</code></strong> представляет прототип для конструктора {{jsxref("WeakSet")}}.</p>
+
+<div>{{js_property_attributes(0,0,0)}}</div>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Экземпляры {{jsxref("WeakSet")}} наследуются от {{jsxref("WeakSet.prototype")}}. Вы можете изменять прототип конструктора объекта для применения изменений ко всем экземплярам класса <code>WeakSet.</code></p>
+
+<p><code>WeakSet.prototype</code> сам по себе является обычным объектом:</p>
+
+<pre class="brush: js">Object.prototype.toString.call(WeakSet.prototype); // "[object Object]"</pre>
+
+<h2 id="Properties" name="Properties">Свойства</h2>
+
+<dl>
+ <dt><code>WeakSet.prototype.constructor</code></dt>
+ <dd>Возвращает функцию, создающую экземпляр прототипа. По умолчанию, это функция {{jsxref("WeakSet")}}.</dd>
+</dl>
+
+<h2 id="Methods" name="Methods">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("WeakSet.add", "WeakSet.prototype.add(value)")}}</dt>
+ <dd>Добавляет объект value в WeakSet. </dd>
+ <dt>{{jsxref("WeakSet.delete", "WeakSet.prototype.delete(value)")}}</dt>
+ <dd>Удаляет из WeakSet элемент value. После удаления вызов <code>WeakSet.prototype.has(value) возвращает false.</code> </dd>
+ <dt>{{jsxref("WeakSet.has", "WeakSet.prototype.has(value)")}}</dt>
+ <dd>Определяет, содержит WeakSet объект value или нет, возвращая, соответственно, true или false. </dd>
+ <dt><s class="obsoleteElement">{{jsxref("WeakSet.prototype.clear()")}} {{obsolete_inline}}</s></dt>
+ <dd><s class="obsoleteElement">Удаляет все элементы из объекта WeakSet.</s></dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-weakset.prototype', 'WeakSet.prototype')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-weakset.prototype', 'WeakSet.prototype')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>36</td>
+ <td>{{ CompatGeckoDesktop(34) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>23</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Ordinary object</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop("40")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome for Android</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile(34) }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Ordinary object</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("40")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Set.prototype")}}</li>
+ <li>{{jsxref("WeakMap.prototype")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..ba600573a9
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/webassembly/compile/index.html
@@ -0,0 +1,83 @@
+---
+title: WebAssembly.compile()
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compile
+---
+<div>{{JSRef}}</div>
+
+<p>Функция <strong><code>WebAssembly.compile()</code></strong> компилирует {{jsxref("WebAssembly.Module")}} из двоичного кода WebAssembly. Эта функция полезна, если необходимо компилировать модуль до того, как его можно создать (в противном случае следует использовать функцию {{jsxref("WebAssembly.instantiate()")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Promise&lt;WebAssembly.Module&gt; WebAssembly.compile(bufferSource);</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><em>bufferSource</em></dt>
+ <dd>Типированный массив <a href="/en-US/docs/Web/JavaScript/Typed_arrays">typed array</a> или <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer">ArrayBuffer</a>, содержащий двоичный код модуля <code>.wasm</code>, который вы хотите скомпилировать.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Обещание, (<code>Promise</code>), которое разрешает объект {{jsxref("WebAssembly.Module")}}, представляющий скомпилированный модуль.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<ul>
+ <li>Если <code>bufferSource</code> не является <a href="/en-US/docs/Web/JavaScript/Typed_arrays">typed array</a>, генерируется {{jsxref("TypeError")}}.</li>
+ <li>Если компиляция не удалась, обещание отклоняется с помощью {{jsxref("WebAssembly.CompileError")}}.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В следующем примере выполняется компиляция загруженного <code>simple.wasm</code> байт-кода с использованием функции <code>compile()</code>, а затем отправляется его <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API">worker</a>-работнику, использующему <a href="/en-US/docs/Web/API/Worker/postMessage">postMessage()</a>.</p>
+
+<pre class="brush: js">var worker = new Worker("wasm_worker.js");
+
+fetch('simple.wasm').then(response =&gt;
+  response.arrayBuffer()
+).then(bytes =&gt;
+  WebAssembly.compile(bytes)
+).then(mod =&gt;
+  worker.postMessage(mod)
+);</pre>
+
+<div class="note">
+<p><strong>Заметка:</strong> Вероятно, вы захотите использовать {{jsxref("WebAssembly.compileStreaming()")}} в большинстве случаев, поскольку он более эффективен, чем <code>compile()</code>.</p>
+</div>
+
+<h2 id="Характеристики">Характеристики</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коммент</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('WebAssembly JS', '#webassemblycompile', 'compile()')}}</td>
+ <td>{{Spec2('WebAssembly JS')}}</td>
+ <td>Первоначальное определение проекта.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузером</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на перенос.</div>
+
+<p>{{Compat("javascript.builtins.WebAssembly.compile")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/WebAssembly">WebAssembly</a> обзорная страница</li>
+ <li><a href="/en-US/docs/WebAssembly/Concepts">WebAssembly концепции</a></li>
+ <li><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></li>
+</ul>
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
new file mode 100644
index 0000000000..106519cdf2
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/webassembly/compilestreaming/index.html
@@ -0,0 +1,79 @@
+---
+title: WebAssembly.compileStreaming()
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/compileStreaming
+---
+<div>{{JSRef}}</div>
+
+<p>Функция <strong><code>WebAssembly.compileStreaming()</code></strong> компилирует {{jsxref("WebAssembly.Module")}} непосредственно из потокового исходника. Эта функция полезна, если необходимо скомпилировать модуль до того, как его можно создать (в противном случае следует использовать функцию {{jsxref("WebAssembly.instantiateStreaming()")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">Promise&lt;WebAssembly.Module&gt; WebAssembly.compileStreaming(<em>source</em>);</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><em>source</em></dt>
+ <dd>Обещание, или {{domxref("Response")}},  которое будет выполнено с одним, представляющим основной источник модулем <code>.wasm</code>, который вы хотите передать и скомпилировать.</dd>
+</dl>
+
+<h3 id="Возвращаемое_значение">Возвращаемое значение</h3>
+
+<p>Обещание, ( <code>Promise</code>), которое разрешает объект {{jsxref("WebAssembly.Module")}}, представляющий скомпилированный модуль.</p>
+
+<h3 id="Исключения">Исключения</h3>
+
+<ul>
+ <li>Если <code>bufferSource</code> не является <a href="/en-US/docs/Web/JavaScript/Typed_arrays">typed array</a>, генерируется {{jsxref("TypeError")}}.</li>
+ <li>Если компиляция не удалась, обещание отклоняется с помощью {{jsxref("WebAssembly.CompileError")}}.</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий пример (см. Нашу демонстрацию <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/compile-streaming.html">compile-streaming.html</a> на GitHub и <a href="https://mdn.github.io/webassembly-examples/js-api-examples/compile-streaming.html">view it live</a>) напрямую передает модуль .wasm из исходника, затем компилирует его в объект {{jsxref("WebAssembly.Module")}}.<br>
+ Поскольку функция <code>compileStreaming()</code> принимает обещание для объекта {{domxref("Response")}}, вы можете напрямую передать ему вызов {{domxref("WindowOrWorkerGlobalScope.fetch()")}}, и он передаст ответ в выполняемую функцию.</p>
+
+<pre class="brush: js">var importObject = { imports: { imported_func: arg =&gt; console.log(arg) } };
+
+WebAssembly.compileStreaming(fetch('simple.wasm'))
+.then(module =&gt; WebAssembly.instantiate(module, importObject))
+.then(instance =&gt; instance.exports.exported_func());</pre>
+
+<p>Затем создается полученный экземпляр модуля с помощью {{jsxref("WebAssembly.instantiate()")}} и вызывается экспортированная функция.</p>
+
+<h2 id="Характеристики">Характеристики</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коммент</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('WebAssembly Embedding', '#webassemblycompilestreaming', 'compileStreaming()')}}</td>
+ <td>{{Spec2('WebAssembly Embedding')}}</td>
+ <td>Первоначальное определение <br>
+ проекта.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузером</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад в данные, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на перенос.</div>
+
+<p>{{Compat("javascript.builtins.WebAssembly.compileStreaming")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/WebAssembly">WebAssembly</a> обзорная страница</li>
+ <li><a href="/en-US/docs/WebAssembly/Concepts">WebAssembly концепции</a></li>
+ <li><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/global_objects/webassembly/index.html b/files/ru/web/javascript/reference/global_objects/webassembly/index.html
new file mode 100644
index 0000000000..daff5d4ee7
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/webassembly/index.html
@@ -0,0 +1,161 @@
+---
+title: WebAssembly
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly
+---
+<div>{{JSRef}}{{SeeCompatTable}}</div>
+
+<p>Объект JavaScript <strong><code>WebAssembly</code></strong> действует как пространство имен для всего <a href="/en-US/docs/WebAssembly">WebAssembly</a>-связанного функционала.</p>
+
+<p>В отличие от большинства других глобальных объектов, <code>WebAssembly</code> не является конструктором (это не объект функции). Можно сравнить его с {{jsxref("Math")}}, который так же является пространством имен констант и функций, или  {{jsxref("Intl")}}, который является пространством имен для конструкторов интернационализации и других языково-чувствительных функций.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Основное использование <code>WebAssembly</code> следующее:</p>
+
+<ul>
+ <li>Загрузка кода WebAssembly, с помощью функции {{jsxref("WebAssembly.instantiate()")}}.</li>
+ <li>Создание новой памяти и таблицы экземпляров с помощью конструкторов {{jsxref("WebAssembly.Memory()")}}/{{jsxref("WebAssembly.Table()")}}.</li>
+ <li>Обеспечение возможности управлять ошибками, которые появляются в WebAssembly с помощью конструкторов {{jsxref("WebAssembly.CompileError()")}}/{{jsxref("WebAssembly.LinkError()")}}/{{jsxref("WebAssembly.RuntimeError()")}}.</li>
+</ul>
+
+<h2 id="Методы">Методы</h2>
+
+<dl>
+ <dt>{{jsxref("WebAssembly.instantiate()")}}</dt>
+ <dd>Основное API для компиляции и создания экземпляра кода WebAssembly, возвращающее <code>Module</code> и его первый <code>Instance</code>.</dd>
+ <dt>{{jsxref("WebAssembly.compile()")}}</dt>
+ <dd>Компилирует {{jsxref("WebAssembly.Module")}} из бинарного кода WebAssembly, оставляя создание экземпляра отдельным шагом.</dd>
+ <dt>{{jsxref("WebAssembly.validate()")}}</dt>
+ <dd>Проверяет представленный типизированный массив бинарного кода WebAssembly, возвращая в зависимости от того были ли байты кода WebAssembly валидны (<code>true</code>) или (<code>false</code>).</dd>
+</dl>
+
+<h2 id="Конструкторы">Конструкторы</h2>
+
+<dl>
+ <dt>{{jsxref("WebAssembly.Module()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>Module</code>.</dd>
+ <dt>{{jsxref("WebAssembly.Instance()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>Instance</code>.</dd>
+ <dt>{{jsxref("WebAssembly.Memory()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>Memory</code>.</dd>
+ <dt>{{jsxref("WebAssembly.Table()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>Table</code>.</dd>
+ <dt>{{jsxref("WebAssembly.CompileError()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>CompileError</code>.</dd>
+ <dt>{{jsxref("WebAssembly.LinkError()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>LinkError</code>.</dd>
+ <dt>{{jsxref("WebAssembly.RuntimeError()")}}</dt>
+ <dd>Создает новый объект WebAssembly <code>RuntimeError</code>.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>После загрузки некоторого байт-кода WebAssembly с помощью fetch, мы компилируем и создаем экземпляр модуля с помощью функции {{jsxref("WebAssembly.instantiate()")}}, импортируя функции JavaScript в WebAssembly Module в процессе. Этот промис результирует в объект (<code>result</code>), содержащий скомпилированные <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Module">Module</a></code> и объекты <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Instance">Instance</a></code>. Мы можем вызвать <a href="/en-US/docs/WebAssembly/Exported_functions">Exported WebAssembly function</a>, которая была экспортирована через <code>Instance</code>.</p>
+
+<pre class="brush: js">var importObject = {
+ imports: {
+ imported_func: function(arg) {
+ console.log(arg);
+ }
+ }
+};
+
+fetch('simple.wasm').then(response =&gt;
+  response.arrayBuffer()
+).then(bytes =&gt;
+  WebAssembly.instantiate(bytes, importObject)
+).then(result =&gt;
+  result.instance.exports.exported_func()
+);</pre>
+
+<div class="note">
+<p><strong>Note</strong>: Смотрите пример <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/index.html">index.html</a> на GitHub (<a href="https://mdn.github.io/webassembly-examples/js-api-examples/">view it live also</a>), который использует наши <code><a href="https://github.com/mdn/webassembly-examples/blob/master/wasm-utils.js#L1">fetchAndInstantiate()</a></code> библиотечные функции.</p>
+</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коммент</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('WebAssembly JS', '#the-webassembly-object', 'WebAssembly')}}</td>
+ <td>{{Spec2('WebAssembly JS')}}</td>
+ <td>Первоначальное определение проекта.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Поддержка браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>57</td>
+ <td>15<sup>[2]</sup></td>
+ <td>{{CompatGeckoDesktop(52)}}<sup>[1]</sup></td>
+ <td>{{CompatNo}}</td>
+ <td>44</td>
+ <td>11</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome for Android</th>
+ <th>Android Webview</th>
+ <th>Edge Mobile</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>57</td>
+ <td>57</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile(52)}}<sup>[1]</sup></td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>11</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] WebAssembly включен в Firefox 52+, хотя не валиден в <a href="https://www.mozilla.org/en-US/firefox/organizations/">Firefox 52 Extended Support Release</a> (ESR.)</p>
+
+<p>[2] В настоящее время поддерживается флаг «Экспериментальные функции JavaScript».  Для более подробной информации смотрите <a href="https://blogs.windows.com/msedgedev/2017/04/20/improved-javascript-performance-webassembly-shared-memory/">этот blog post</a>.</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/WebAssembly">WebAssembly</a> обзорная страница</li>
+ <li><a href="/en-US/docs/WebAssembly/Concepts">WebAssembly концепции</a></li>
+ <li><a href="/en-US/docs/WebAssembly/Using_the_JavaScript_API">Использование WebAssembly JavaScript API</a></li>
+</ul>
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
new file mode 100644
index 0000000000..c453aeaf46
--- /dev/null
+++ b/files/ru/web/javascript/reference/global_objects/webassembly/table/index.html
@@ -0,0 +1,104 @@
+---
+title: WebAssembly.Table
+slug: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table
+translation_of: Web/JavaScript/Reference/Global_Objects/WebAssembly/Table
+---
+<div>{{JSRef}}</div>
+
+<p>Объект <code><strong>WebAssembly.Table()</strong></code> - это JavaScript обертка — структура похожая на массив, представляюшая таблицу функций WebAssembly. Таблица, созданная через JavaScript или в коде WebAssembly, будет доступна и может быть изменена как из JavaScript, так и из WebAssembly.</p>
+
+<div class="note">
+<p><strong>Обратите внимание</strong>: Таблицы сейчас хранят только ссылки на функции, но это может быть расширено в будущем.</p>
+</div>
+
+<h2 id="Конструктор">Конструктор</h2>
+
+<dl>
+ <dt><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/Table">WebAssembly.Table()</a></code></dt>
+ <dd>Создает новый объект <code>Table</code>.</dd>
+</dl>
+
+<h2 id="Экземпляры_Table">Экземпляры <code>Table</code></h2>
+
+<p>Все экземпляры <code>Table</code> наследуются от <a href="/ru-RU/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly/Table/prototype">прототипа конструктора</a> <code>Table()</code>, следовательно изменения прототипа затронут все экземпляры <code>Table</code>.</p>
+
+<h3 id="Свойства_экземпляра">Свойства экземпляра</h3>
+
+<dl>
+ <dt><code>Table.prototype.constructor</code></dt>
+ <dd>Возвращает функцию которая создала этот объект. По умолчанию это конструктор {{jsxref("WebAssembly.Table()")}}.</dd>
+ <dt>{{jsxref("WebAssembly/Table/length","Table.prototype.length")}}</dt>
+ <dd>Возвращает длину таблицы (количество елементов в таблице).</dd>
+</dl>
+
+<h3 id="Instance_methods">Instance methods</h3>
+
+<dl>
+ <dt>{{jsxref("WebAssembly/Table/get","Table.prototype.get(index)")}}</dt>
+ <dd>Возвращает указанное значение из таблицы.</dd>
+ <dt>{{jsxref("WebAssembly/Table/grow","Table.prototype.grow(count)")}}</dt>
+ <dd>Увеличивает размер таблицы на указанное количество элементов.</dd>
+ <dt>{{jsxref("WebAssembly/Table/set","Table.prototype.set(index, value)")}}</dt>
+ <dd>Сохраняет указанное значение в таблицу под указанным индексом.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий пример (смотри <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.html">исходный код</a> и <a href="https://mdn.github.io/webassembly-examples/js-api-examples/table2.html">живую версию</a> table2.html) создает новый экземпляр WebAssembly Table с 2 элементами. После этого выводит длину таблицы и содержимое первых двух елементов (полученных через {{jsxref("WebAssembly/Table/get", "Table.prototype.get()")}} чтобы показать что длина равняется 2 и елементы равны {{jsxref("null")}}.</p>
+
+<pre class="brush: js">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"</pre>
+
+<p>После этого мы создаем обьект импорта содержащий таблицу:</p>
+
+<pre class="brush: js">var importObj = {
+ js: {
+ tbl: tbl
+ }
+};</pre>
+
+<p>После этого, мы создаем экземпляр модуля wasm (table2.wasm) используя метод {{jsxref("WebAssembly.instantiateStreaming()")}}.  Модуль table2.wasm содержит две функции, одна возвращает 42, а вторая - 83) и сохраняет эти функции под индексами 0 и 1 в импортированную таблицу (смотри <a href="https://github.com/mdn/webassembly-examples/blob/master/js-api-examples/table2.wat">текстовую версию</a>).  Таким образом, после создания wasm-модуля, таблица имеет туже длину, но елементы таблицы стали <a href="/ru-RU/docs/WebAssembly/Exported_functions">функциями экспортированными из WebAssembly</a> которые можно вызывать из JS.</p>
+
+<pre class="brush: js">WebAssembly.instantiateStreaming(fetch('table2.wasm'), importObject)
+.then(function(obj) {
+  console.log(tbl.length);
+  console.log(tbl.get(0)());
+  console.log(tbl.get(1)());
+});</pre>
+
+<p>Заметьте что понадобилось добавить второй оператор вызова функции чтобы вызвать функцию возвращенную из талицы (т.е. <code>get(0)()</code> вместо <code>get(0)</code>) .</p>
+
+<p>Этот пример показывает что мы создаем и работаем с таблицей из JavaScript, но экземпляр таблицы также виден и доступен внутри модуля wasm.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('WebAssembly JS', '#tables', 'Table')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.WebAssembly.Table")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Обзор <a href="/ru-RU/docs/WebAssembly">WebAssembly</a></li>
+ <li><a href="/ru-RU/docs/WebAssembly/Concepts">Концепция WebAssembly</a></li>
+ <li><a href="/ru-RU/docs/WebAssembly/Using_the_JavaScript_API">Использование JavaScript API WebAssembly</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/index.html b/files/ru/web/javascript/reference/index.html
new file mode 100644
index 0000000000..606c77d483
--- /dev/null
+++ b/files/ru/web/javascript/reference/index.html
@@ -0,0 +1,48 @@
+---
+title: Справочник по JavaScript
+slug: Web/JavaScript/Reference
+tags:
+ - JavaScript
+translation_of: Web/JavaScript/Reference
+---
+<div>{{JsSidebar}}</div>
+
+<p>Эта часть раздела MDN по JavaScript служит хранилищем фактов о языке JavaScript. Более подробную информацию об этом справочнике можно получить <a href="/ru/docs/Web/JavaScript/Reference/About">здесь</a>.</p>
+
+<h2 id="Global_Objects" name="Global_Objects">Глобальные объекты</h2>
+
+<p>Эта глава описывает все <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects">стандартные встроенные объекты JavaScript</a> вместе с их методами и свойствами.</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Global_Objects', 'Standard objects (by category)')}}</div>
+
+<h2 id="Statements" name="Statements">Инструкции</h2>
+
+<p>Эта глава описывает все <a href="/ru/docs/Web/JavaScript/Reference/Statements">инструкции и объявления JavaScript</a>.</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Statements', 'Statements_and_declarations_by_category')}}</div>
+
+<h2 id="Expressions_and_operators" name="Expressions_and_operators">Выражения и операторы</h2>
+
+<p>Эта глава описывает все <a href="/ru/docs/Web/JavaScript/Reference/Operators">выражения и операторы JavaScript</a>.</p>
+
+<div>{{page('/ru/docs/Web/JavaScript/Reference/Operators', 'Expressions_and_operators_by_category')}}</div>
+
+<h2 id="Functions" name="Functions">Функции</h2>
+
+<p>Эта глава описывает, как работать с <a href="/ru/docs/Web/JavaScript/Reference/Functions">функциями JavaScript</a> для разработки ваших приложений.</p>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/arguments"><code>arguments</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Arrow_functions">Стрелочные функции</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Default_parameters">Параметры по умолчанию</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions/rest_parameters">Оставшиеся параметры</a></li>
+</ul>
+
+<h2 id="Additional_reference_pages" name="Additional_reference_pages">Дополнительные справочные страницы</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar">Лексическая грамматика</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Data_structures">Типы и структуры данных</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">Строгий режим</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">Устаревшие возможности</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/iteration_protocols/index.html b/files/ru/web/javascript/reference/iteration_protocols/index.html
new file mode 100644
index 0000000000..cc9b66658a
--- /dev/null
+++ b/files/ru/web/javascript/reference/iteration_protocols/index.html
@@ -0,0 +1,316 @@
+---
+title: The Iterator protocol
+slug: Web/JavaScript/Reference/Iteration_protocols
+tags:
+ - Итератор
+translation_of: Web/JavaScript/Reference/Iteration_protocols
+---
+<div>
+<div>{{jsSidebar("More")}}</div>
+</div>
+
+<p>Одно из нововведений стандарта ECMAScript 2015 - протоколы перебора, которые могут реализованы любым объектом, соблюдая при этом определенные правила.</p>
+
+<h2 id="Протоколы_перебора">Протоколы перебора</h2>
+
+<p>Протоколы перебора включают <a href="#The_.22iterable.22_protocol">the "iterable" protocol</a> и <a href="#The_.22iterator.22_protocol">the "iterator" protocol</a>.</p>
+
+<h3 id="Протокол_Итерируемый">Протокол "Итерируемый"</h3>
+
+<p>Протокол "<strong>Итерируемый</strong>" позволяет JavaScript объектам определять или настраивать поведение перебора, например, то какие значения перебираются в конструкции {{jsxref("Statements/for...of", "for..of")}}. Некоторые встроенные типы, такие как {{jsxref("Array")}} или {{jsxref("Map")}}, имеют поведение перебора по умолчанию, в то время как другие типы (такие как {{jsxref("Object")}}) его не имеют</p>
+
+<p>Для того, чтобы объект был <strong>итерируемым</strong>, в нем должен быть реализован метод <strong>@@iterator</strong>, т.е. этот объект (или любой из объектов из его <a href="/en-US/docs/Web/JavaScript/Guide/Inheritance_and_the_prototype_chain">prototype chain</a>) должен иметь свойство с именем {{jsxref("Symbol")}}<code>.iterator</code>:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Свойство</th>
+ <th scope="col">Значение</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>[Symbol.iterator]</code></td>
+ <td>Функция без аргументов, возвращающая объект, соответствующий <a href="#The_.22iterator.22_protocol">iterator protocol</a>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Всякий раз, когда объект подлежит перебору (например, когда в коде встречается цикл <code>for..of</code>), вызывается его метод <code>@@iterator</code> без аргументов, и возвращаемый <strong>iterator</strong> используется для получения перебираемых значений.</p>
+
+<h3 id="Протокол_Итератор">Протокол "Итератор"</h3>
+
+<p>Протокол "<strong>Итератор</strong>" определяет стандартный способ получения последовательности значений  (конечной или бесконечной).</p>
+
+<p>Объект является итератором, если в нем определен метод <strong>next()</strong> , реализующий следующую логику:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Свойство</th>
+ <th scope="col">Значение</th>
+ </tr>
+ <tr>
+ <td><code>next</code></td>
+ <td>
+ <p>Функция без аргументов, возвращающая объект с двумя свойствами:</p>
+
+ <ul>
+ <li><code>done</code> (boolean)
+
+ <ul>
+ <li>Принимает значение <code>true</code> если итератор достиг конца итерируемой последовательности. В этом случае свойство <code>value</code> может определять <em>возвращаемое значение</em> итератора. Возвращаемые значения объясняются более подробно <a href="http://www.2ality.com/2013/06/iterators-generators.html#generators-as-threads">here</a>.</li>
+ <li>Принимает значение <code>false</code> если итератор может генерировать следующее значение последовательности. Это эквивалентно не указанному done.</li>
+ </ul>
+ </li>
+ <li><code>value</code> - любое JavaScript значение, возвращаемое итератором. Может быть опущено, если <code>done имеет значение</code> <code>true</code>.</li>
+ </ul>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Некоторые итераторы, в свою очередь, итерабельны:</p>
+
+<pre class="brush: js">var someArray = [1, 5, 7];
+var someArrayEntries = someArray.entries();
+
+someArrayEntries.toString();           // "[object Array Iterator]"
+someArrayEntries === someArrayEntries[Symbol.iterator](); // true
+</pre>
+
+<h2 id="Примеры_использования_протокола_итератора">Примеры использования протокола "итератора"</h2>
+
+<p>{{jsxref("String")}} является примером встроенного итерабельного объекта:</p>
+
+<pre class="brush: js">var someString = "hi";
+typeof someString[Symbol.iterator] // "function"
+</pre>
+
+<p><font face="Consolas, Liberation Mono, Courier, monospace">По умолчанию итератор строки возвращает символы строки друг за другом:</font></p>
+
+<pre class="brush: js">var iterator = someString[Symbol.iterator]();
+iterator + "" // "[object String Iterator]"
+
+iterator.next() // { value: "h", done: false }
+iterator.next() // { value: "i", done: false }
+iterator.next() // { value: undefined, done: true }</pre>
+
+<p>Некоторые встроенные конструкции языка, например, <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread operator</a>, используют в своей внутренней реализации тот же протокол итерации:</p>
+
+<pre class="brush: js">[...someString] // ["h", "i"]</pre>
+
+<p>Поведение итератора можно переопределить применив собственный <code>@@iterator</code>:</p>
+
+<pre class="brush: js">var someString = new String("hi"); // need to construct a String object explicitly to avoid auto-boxing
+
+someString[Symbol.iterator] = function() {
+ return { // this is the iterator object, returning a single element, the string "bye"
+ next: function() {
+ if (this._first) {
+ this._first = false;
+ return { value: "bye", done: false };
+ } else {
+ return { done: true };
+ }
+ },
+ _first: true
+ };
+};
+</pre>
+
+<p>Notice how redefining <code>@@iterator</code> affects the behavior of built-in constructs, that use the iteration protocol:</p>
+
+<pre class="brush: js">[...someString] // ["bye"]
+someString + "" // "hi"
+</pre>
+
+<h2 id="Встроенная_итерируемость">Встроенная итерируемость</h2>
+
+<p>{{jsxref("String")}}, {{jsxref("Array")}}, {{jsxref("TypedArray")}}, {{jsxref("Map")}} и {{jsxref("Set")}} итерируемы, так как их прототипы содержат <code>@@</code><code>iterator</code> метод, а {{jsxref("Object")}} нет, так как прототип {{jsxref("Object")}} не содержит метода <code>@@</code><code>iterator</code></p>
+
+<h2 id="Итерируемость_определенная_пользователем">Итерируемость определенная пользователем</h2>
+
+<p>Мы можем создать итерируемый объект сами:</p>
+
+<pre class="brush: js">var myIterable = {}
+myIterable[Symbol.iterator] = function* () {
+ yield 1;
+ yield 2;
+ yield 3;
+};
+[...myIterable] // [1, 2, 3]
+</pre>
+
+<h2 id="Builtin_APIs_need_iterables">Builtin APIs need iterables</h2>
+
+<p>{{jsxref("Map", "Map([iterable])")}}, {{jsxref("WeakMap", "WeakMap([iterable])")}}, {{jsxref("Set", "Set([iterable])")}} and {{jsxref("WeakSet", "WeakSet([iterable])")}}:</p>
+
+<pre class="brush: js">var myObj = {}
+new Map([[1,"a"],[2,"b"],[3,"c"]]).get(2) // "b"
+new WeakMap([[{},"a"],[myObj,"b"],[{},"c"]]).get(myObj) // "b"
+new Set([1, 2, 3]).has(3) // true
+new Set("123").has("2") // true
+new WeakSet(function*() {
+ yield {};
+ yield myObj;
+ yield {};
+}()).has(myObj) // true
+</pre>
+
+<p>and {{jsxref("Promise.all", "Promise.all(iterable)")}}, {{jsxref("Promise.race", "Promise.race(iterable)")}}, {{jsxref("Array.from", "Array.from()")}}</p>
+
+<h2 id="Синтаксис_предполагающий_итерируемость">Синтаксис предполагающий итерируемость</h2>
+
+<p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for-of</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread</a>, yield*, destructing  - использование данного синтаксиса возможно только если типы данных, к которым он применяется, итерируемы:</p>
+
+<pre class="brush: js">for(let value of ["a", "b", "c"]){
+ console.log(value)
+}
+// "a"
+// "b"
+// "c"
+
+[..."abc"] // ["a", "b", "c"]
+
+function* gen(){
+ yield* ["a", "b", "c"]
+}
+
+gen().next() // { value:"a", done:false }
+
+[a, b, c] = new Set(["a", "b", "c"])
+a // "a"
+
+</pre>
+
+<h2 id="Non-well-formed_iterables">Non-well-formed iterables</h2>
+
+<p>If an iterable's <code>@@iterator</code> method doesn't return an iterator object, then it's a non-well-formed iterable, using it as such is likely to result in runtime exceptions or buggy behavior:</p>
+
+<pre class="brush: js">var nonWellFormedIterable = {}
+nonWellFormedIterable[Symbol.iterator] = () =&gt; 1
+[...nonWellFormedIterable] // TypeError: [] is not a function
+</pre>
+
+<h2 id="Объект-генератор_является_итератором_или_итерируемым">Объект-генератор является итератором или итерируемым</h2>
+
+<p>И тем и другим</p>
+
+<pre class="brush: js">var aGeneratorObject = function*(){
+ yield 1;
+ yield 2;
+ yield 3;
+}()
+typeof aGeneratorObject.next
+// "function", because it has a next method, so it's an iterator
+typeof aGeneratorObject[Symbol.iterator]
+// "function", because it has an @@iterator method, so it's an iterable
+aGeneratorObject[Symbol.iterator]() === aGeneratorObject
+// true, because its @@iterator method return its self (an iterator), so it's an well-formed iterable
+[...aGeneratorObject]
+// [1, 2, 3]
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_итератор">Простой итератор</h3>
+
+<pre class="brush: js">function makeIterator(array){
+ var nextIndex = 0;
+
+ return {
+ next: function(){
+ return nextIndex &lt; array.length ?
+ {value: array[nextIndex++], done: false} :
+ {done: true};
+ }
+ }
+}
+
+var it = makeIterator(['yo', 'ya']);
+
+console.log(it.next().value); // 'yo'
+console.log(it.next().value); // 'ya'
+console.log(it.next().done); // true
+</pre>
+
+<h3 id="Бесконечный_итератор">Бесконечный итератор</h3>
+
+<pre class="brush: js">function idMaker(){
+ var index = 0;
+
+ return {
+ next: function(){
+ return {value: index++, done: false};
+ }
+ }
+}
+
+var it = idMaker();
+
+console.log(it.next().value); // '0'
+console.log(it.next().value); // '1'
+console.log(it.next().value); // '2'
+// ...
+</pre>
+
+<h3 id="С_генератором">С генератором</h3>
+
+<pre class="brush: js">function* makeSimpleGenerator(array){
+ var nextIndex = 0;
+
+ while(nextIndex &lt; array.length){
+ yield array[nextIndex++];
+ }
+}
+
+var gen = makeSimpleGenerator(['yo', 'ya']);
+
+console.log(gen.next().value); // 'yo'
+console.log(gen.next().value); // 'ya'
+console.log(gen.next().done); // true
+
+
+
+function* idMaker(){
+ var index = 0;
+ while(true)
+ yield index++;
+}
+
+var gen = idMaker();
+
+console.log(gen.next().value); // '0'
+console.log(gen.next().value); // '1'
+console.log(gen.next().value); // '2'
+// ...
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-iteration', 'Iteration')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-iteration', 'Iteration')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Дополнительную информацию о генераторах ES 2015 смотри <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">на отдельной странице.</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/lexical_grammar/index.html b/files/ru/web/javascript/reference/lexical_grammar/index.html
new file mode 100644
index 0000000000..e3d581c8e6
--- /dev/null
+++ b/files/ru/web/javascript/reference/lexical_grammar/index.html
@@ -0,0 +1,693 @@
+---
+title: Лексический синтаксис
+slug: Web/JavaScript/Reference/Lexical_grammar
+tags:
+ - JavaScript
+ - Keyword
+ - Literal
+ - ключевые слова
+ - литералы
+translation_of: Web/JavaScript/Reference/Lexical_grammar
+---
+<div>{{JsSidebar("More")}}</div>
+
+<div>Этот раздел описывает синтаксис JavaScript. Исходный код ECMAScript скриптов сканируется слева направо и преобразуется в последовательность найденных элементов в токены, управляющие символы, окончания строк, комментарии или пробелы.<br>
+ECMAScript также определяет ключевые слова и литералы и имеет указания для автоматической вставки точек с запятой к концу инструкции.</div>
+
+<h2 id="Спецсимволы">Спецсимволы</h2>
+
+<p>Спецсимволы не имеют визуального представления, однако используются для управления интерпретацией текста.</p>
+
+<table class="standard-table">
+ <caption>Юникодные форматирующие спецсимволы</caption>
+ <tbody>
+ <tr>
+ <th>Code point</th>
+ <th>Name</th>
+ <th>Abbreviation</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td><code>U+200C</code></td>
+ <td>Zero width non-joiner</td>
+ <td>&lt;ZWNJ&gt;</td>
+ <td>Размещается между символами во избежание их соединений в лигатуры для некоторых языков (<a href="http://en.wikipedia.org/wiki/Zero-width_non-joiner">Wikipedia</a>)</td>
+ </tr>
+ <tr>
+ <td><code>U+200D</code></td>
+ <td>Zero width joiner</td>
+ <td>&lt;ZWJ&gt;</td>
+ <td>Размещается между символами, которые не могли бы нормально объединиться для того, чтобы символы отрисовывались, используя их соединительную форму в некоторых языках (<a href="http://en.wikipedia.org/wiki/Zero-width_joiner">Wikipedia</a>)</td>
+ </tr>
+ <tr>
+ <td><code>U+FEFF</code></td>
+ <td>Byte order mark</td>
+ <td>&lt;BOM&gt;</td>
+ <td>Используется вначале скрипта для того, чтобы пометить Юникод и порядок байтов (<a href="http://en.wikipedia.org/wiki/Byte_order_mark">Wikipedia</a>)</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Пробелы">Пробелы</h2>
+
+<p>Пробельные символы улучшают читабельность исходного текста и разделяет токены друг от друга. Пробельные символы обычно не обязательны для функционирования кода. <a href="http://en.wikipedia.org/wiki/Minification_%28programming%29">Утилиты для уменьшения объема кода</a> часто удаляют пробельные символы, чтобы уменьшить объем кода.</p>
+
+<table class="standard-table">
+ <caption>Таблица пробельных символов</caption>
+ <tbody>
+ <tr>
+ <th>Code point</th>
+ <th>Name</th>
+ <th>Abbreviation</th>
+ <th>Description</th>
+ <th>Escape sequence</th>
+ </tr>
+ <tr>
+ <td>U+0009</td>
+ <td>Character tabulation</td>
+ <td>&lt;HT&gt;</td>
+ <td>Горизонтальная табуляция</td>
+ <td>\t</td>
+ </tr>
+ <tr>
+ <td>U+000B</td>
+ <td>Line tabulation</td>
+ <td>&lt;VT&gt;</td>
+ <td>Вертикальная табуляция</td>
+ <td>\v</td>
+ </tr>
+ <tr>
+ <td>U+000C</td>
+ <td>Form feed</td>
+ <td>&lt;FF&gt;</td>
+ <td>Символ контроля разрыва страницы (<a href="http://en.wikipedia.org/wiki/Page_break#Form_feed">Wikipedia</a>)</td>
+ <td>\f</td>
+ </tr>
+ <tr>
+ <td>U+0020</td>
+ <td>Space</td>
+ <td>&lt;SP&gt;</td>
+ <td>Обычный пробел</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>U+00A0</td>
+ <td>No-break space</td>
+ <td>&lt;NBSP&gt;</td>
+ <td>
+ <p>Обычный пробел без точки, на которой может произойти разрыв страницы</p>
+ </td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>Others</td>
+ <td>Other Unicode space characters</td>
+ <td>&lt;USP&gt;</td>
+ <td><a href="http://en.wikipedia.org/wiki/Space_%28punctuation%29#Spaces_in_Unicode">Другие символы в Юникоде на Википедии</a></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Окончание_строк">Окончание строк</h2>
+
+<p>В дополнение к пробельным символам, символы окончания строк тоже используются для читабельности исходного кода. Однако, в некоторых случаях, символы окончания строк могут влиять на выполнение JavaScript кода, т.к. есть некоторые места, где они запрещены.</p>
+
+<p>Окончания строк также затрагивают процесс <a href="#Automatic_semicolon_insertion">автоматического проставления точки с запятой</a>. Также окончания строк попадают под условия <a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">регулярных выражений</a> при поиске <strong>\s</strong> класса.</p>
+
+<p>В ECMAScript, в качестве окончания строк можно использовать только ниже перечисленные Юникод символы. Другие символы окончания строк будут интерпретированы, как пробельные символы (например, Next Line, NEL, U+0085 будут интерпретироваться, как пробельные символы).</p>
+
+<table class="standard-table">
+ <caption>Символы окончания строк</caption>
+ <tbody>
+ <tr>
+ <th>Code point</th>
+ <th>Name</th>
+ <th>Abbreviation</th>
+ <th>Description</th>
+ <th>Escape sequence</th>
+ </tr>
+ <tr>
+ <td>U+000A</td>
+ <td>Line Feed</td>
+ <td>&lt;LF&gt;</td>
+ <td>Новая строка в UNIX системах.</td>
+ <td>\n</td>
+ </tr>
+ <tr>
+ <td>U+000D</td>
+ <td>Carriage Return</td>
+ <td>&lt;CR&gt;</td>
+ <td>Новая строка в Commodore и ранних Mac systems.</td>
+ <td>\r</td>
+ </tr>
+ <tr>
+ <td>U+2028</td>
+ <td>Line Separator</td>
+ <td>&lt;LS&gt;</td>
+ <td><a href="http://en.wikipedia.org/wiki/Newline">Wikipedia</a></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>U+2029</td>
+ <td>Paragraph Separator</td>
+ <td>&lt;PS&gt;</td>
+ <td><a href="http://en.wikipedia.org/wiki/Newline">Wikipedia</a></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Комментарии">Комментарии</h2>
+
+<p>Комментарии используются для добавления подсказок, заметок, предложений или предупреждений. Они могут упростить чтение и понимание кода. Также они могут быть использованы для предотвращения выполнения кода (этот приём практикуется при отладке кода).</p>
+
+<p>В JavaScript есть несколько способов указать комментарии в коде.</p>
+
+<p>Первый способ <code>//</code> комментарий; в этом случае весь текст в строке после двойного слэша будет комментарием, например:</p>
+
+<pre class="brush: js notranslate">function comment() {
+ // Это комментарий в строке
+ console.log("Hello world!");
+}
+comment();
+</pre>
+
+<p>Второй способ - это <code>/* */</code>, такой способ более гибок, чем первый.</p>
+
+<p>Например, вы можете использовать его в одной строке:</p>
+
+<pre class="brush: js notranslate">function comment() {
+ /* Это однострочный комментарий */
+ console.log("Hello world!");
+}
+comment();</pre>
+
+<p>Либо вы можете сделать многострочный комментарий, как показано здесь:</p>
+
+<pre class="brush: js notranslate">function comment() {
+ /* Этот комментарий располагается на нескольких линиях.
+ Обратите внимание, что вам не нужно обрывать комментарий, пока вы его не закончите*/
+ console.log("Hello world!");
+}
+comment(); </pre>
+
+<p>Также, если пожелаете, то вы можете использовать такое комментирование посреди строки кода. Хотя это может ухудшить читабельность кода:</p>
+
+<pre class="brush: js notranslate">function comment(x) {
+ console.log("Hello " + x /* вставьте значение x */ + " !");
+}
+comment("world");</pre>
+
+<p>Чтобы отключить выполнение кода, просто оберните код в комментарий, как здесь:</p>
+
+<pre class="brush: js notranslate">function comment() {
+ /* console.log("Hello world!"); */
+}
+comment();</pre>
+
+<p>В этом случае <code>console.log()</code> никогда не выполнится, пока он внутри комментария. Таким способом можно отключить любое количество строк кода.</p>
+
+<h2 id="Шебанг_комментарии">Шебанг комментарии</h2>
+
+<p>Третий специализированный синтаксис комментариев, <strong>шебанг комментарий</strong>, в процессе стандартизации в ECMAScript (смотреть <a href="https://github.com/tc39/proposal-hashbang">Hashbang Grammar proposal</a>).</p>
+
+<p>Шебанг комментарий ведет себя точно также как и однострочный (<code>//</code>) комменатрий. Вместо этого, он начинается с <code>#!</code> и <strong>действителен только в самом начале скрипта или модуля</strong>. Обратите внимание, что никакие пробелы не разрешены перед <code>#!</code>. Комментарий состоит из всех символов после <code>#!</code> до конца первой строки; только такой комментарий разрешен.</p>
+
+<p>Шебанг комментарий определяет путь к  JavaScript интерпретатору, скрипт которого Вы хотите выполнить. Пример, как это работает:</p>
+
+<pre class="brush: js notranslate">#!/usr/bin/env node
+
+console.log("Hello world");
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Note</strong>: Hashbang comments in JavaScript mimic <a href="https://en.wikipedia.org/wiki/Shebang_(Unix)">shebangs in Unix</a> used to run files with proper interpreter.</p>
+</div>
+
+<div class="blockIndicator warning">
+<p>Although <a href="https://en.wikipedia.org/wiki/Byte_order_mark">BOM</a> before hashbang comment will work in a browser it is not advised to use BOM in a script with hasbang. BOM will not work when you try to run the script in Unix/Linux. So use UTF-8 without BOM if you want to run scripts directly from shell.</p>
+</div>
+
+<p>Для определения JavaScript интерпретатора используйте только <code>#!</code> . В любых других случаях используйте <code>//</code> (или многострочный комментарий).</p>
+
+<h2 id="Ключевые_слова"><a id="Keywords" name="Keywords"></a>Ключевые слова</h2>
+
+<h3 id="Зарезервированные_ключевые_слова_в_ECMAScript_2015">Зарезервированные ключевые слова в ECMAScript 2015</h3>
+
+<div class="threecolumns">
+<ul>
+ <li>{{jsxref("Statements/break", "break")}}</li>
+ <li>{{jsxref("Statements/switch", "case")}}</li>
+ <li><code>class</code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>catch</code></a></li>
+ <li>{{jsxref("Statements/const", "const")}}</li>
+ <li>{{jsxref("Statements/continue", "continue")}}</li>
+ <li>{{jsxref("Statements/debugger", "debugger")}}</li>
+ <li>{{jsxref("Statements/switch", "default")}}</li>
+ <li>{{jsxref("Operators/delete", "delete")}}</li>
+ <li>{{jsxref("Statements/while", "do")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else"><code>else</code></a></li>
+ <li>{{jsxref("Statements/export", "export")}}</li>
+ <li><code>extends</code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>finally</code></a></li>
+ <li>{{jsxref("Statements/for", "for")}}</li>
+ <li>{{jsxref("Statements/function", "function")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else"><code>if</code></a></li>
+ <li>{{jsxref("Statements/import", "import")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>in</code></a></li>
+ <li>{{jsxref("Operators/instanceof", "instanceof")}}</li>
+ <li>{{jsxref("Statements/let", "let")}}</li>
+ <li>{{jsxref("Operators/new", "new")}}</li>
+ <li>{{jsxref("Statements/return", "return")}}</li>
+ <li>{{jsxref("Operators/super", "super")}}</li>
+ <li>{{jsxref("Statements/switch", "switch")}}</li>
+ <li>{{jsxref("Operators/this", "this")}}</li>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>try</code></a></li>
+ <li>{{jsxref("Operators/typeof", "typeof")}}</li>
+ <li>{{jsxref("Statements/var", "var")}}</li>
+ <li>{{jsxref("Operators/void", "void")}}</li>
+ <li>{{jsxref("Statements/while", "while")}}</li>
+ <li>{{jsxref("Statements/with", "with")}}</li>
+ <li><code>yield</code></li>
+</ul>
+</div>
+
+<h3 id="Ключевые_слова_зарезервированные_на_будущее">Ключевые слова, зарезервированные на будущее</h3>
+
+<p>Следующие ключевые слова зарезервированы на будущее ECMAScript спецификацией. За ними сейчас не стоит никакой функциональности, но она может появиться в будущих версиях, поэтому эти ключевые слова не могут быть использованы, как идентификаторы. Эти ключевые слова не могут быть использованы даже в strict или non-strict режимах.</p>
+
+<ul>
+ <li><code>enum</code></li>
+ <li><code>await</code></li>
+</ul>
+
+<p>Следующие ключевые слова зарезервированы для кода, который выполняется в strict режиме:</p>
+
+<div class="threecolumns">
+<ul>
+ <li><code>implements</code></li>
+ <li><code>package</code></li>
+ <li><code>protected</code></li>
+ <li><code>static</code></li>
+ <li><code>interface</code></li>
+ <li><code>private</code></li>
+ <li><code>public</code></li>
+</ul>
+</div>
+
+<h3 id="Зарезервированные_ключевые_слова_в_более_старых_версиях">Зарезервированные ключевые слова в более старых версиях</h3>
+
+<p>Перечисленные ниже ключевые слова зарезервированы для старых версий ECMAScript спецификаций (ECMAScript от 1 по 3).</p>
+
+<div class="threecolumns">
+<ul>
+ <li><code>abstract</code></li>
+ <li><code>boolean</code></li>
+ <li><code>byte</code></li>
+ <li><code>char</code></li>
+ <li><code>double</code></li>
+ <li><code>final</code></li>
+ <li><code>float</code></li>
+ <li><code>goto</code></li>
+ <li><code>int</code></li>
+ <li><code>long</code></li>
+ <li><code>native</code></li>
+ <li><code>short</code></li>
+ <li><code>synchronized</code></li>
+ <li><code>transient</code></li>
+ <li><code>volatile</code></li>
+</ul>
+</div>
+
+<p>К тому же, литералы <code>null</code>, <code>true</code>, и <code>false</code> зарезервированы в ECMAScript для их обычной функциональности.</p>
+
+<h3 id="Reserved_word_usage" name="Reserved_word_usage"></h3>
+
+<h3 id="Reserved_word_usage" name="Reserved_word_usage">Использование зарезервированных слов</h3>
+
+<p>Зарезервированные слова действительно применяются только к идентификаторам<strong> (vs. IdentifierNames)</strong>. Как описано в <a href="http://es5.github.com/#A.1">es5.github.com/#A.1</a>, это все имена IdentifierNames, которые не исключают зарезервированных слов.</p>
+
+<pre class="brush: js notranslate">a.import
+a["import"]
+a = { import: "test" }.
+</pre>
+
+<p>С другой стороны, следующее выражение неправильно, т.к. Идентификатор <code>IdentifierName</code> не содержит зарезервированных слов. Идентификаторы используются для <code>FunctionDeclaration, FunctionExpression, VariableDeclaration</code> и т.п., в то время, как <code>IdentifierNames</code> используются для <code> MemberExpression, CallExpression</code> и т.п.</p>
+
+<pre class="brush: js notranslate">function import() {} // неправильно.</pre>
+
+<h2 id="Литералы">Литералы</h2>
+
+<h3 id="Литерал_Null">Литерал Null</h3>
+
+<p>Подробнее о <code>{{jsxref('Global_Objects/null','null')}}null</code>.</p>
+
+<pre class="brush: js notranslate">null</pre>
+
+<h3 id="Литерал_Boolean">Литерал Boolean</h3>
+
+<p>Подробнее о <code>{{jsxref('Global_Objects/Boolean','Boolean')}}</code>.</p>
+
+<pre class="brush: js notranslate">true
+false</pre>
+
+<h3 id="Литералы_чисел">Литералы чисел</h3>
+
+<h4 id="Decimal_десятичные_числа">Decimal (десятичные числа)</h4>
+
+<pre class="brush: js notranslate">1234567890
+42
+
+// Будьте осторожны с использованием нуля вначале числа:
+
+0888 // 888 распознается, как десятичное число
+0777 // распознается, как восьмеричное число, 511 - как десятичное число
+</pre>
+
+<p>Имейте в виду, что литералы десятичных чисел могут начинаться с нуля (0), за которым следует другое десятичное число, но в случае, если число начинается с нуля и за ним идет цифра меньше 8, то число будет распознано как восьмеричное. This won't throw in JavaScript, see {{bug(957513)}}. See also the page about <code>{{jsxref('Global_Objects/parseInt','parseInt()','Octal_interpretations_with_no_radix')}}</code>.</p>
+
+<h4 id="Binary_двоичные_числа">Binary (двоичные числа)</h4>
+
+<p>Синтаксис двоичных чисел состоит из цифры ноль, за которой следует маленькая или большая латинская буква "B" (0b или 0B). Этот синтаксис новый и появился только в ECMAScript 2015, пожалуйста посмотрите таблицу совместимости с браузерами. Это может производить ошибку <code>{{jsxref('Global_Objects/SyntaxError','SyntaxError')}}</code>: "Missing binary digits after 0b", Если цифры не 0 или 1.</p>
+
+<pre class="brush: js notranslate">var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648
+var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
+var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607</pre>
+
+<h4 id="Octal_восьмеричные_числа">Octal (восьмеричные числа)</h4>
+
+<p>Восьмеричный числовой синтаксис, который использует 0 с последующей, в нижнем или верхнем регистре, латинскую букву "О" (<code>0o</code> или <code>0O)</code>. Этот синтаксис появился в ECMAScript 2015, пожалуйста, посмотрите таблицу совместимости с браузерами. Это может производить ошибку <code>SyntaxError</code>: "Missing octal digits after 0o", если цифры не между 0 и 7.</p>
+
+<pre class="brush: js notranslate">var n = 0O755; // 493
+var m = 0o644; // 420
+
+// Так же возможно с лидирующими нулями (см. заметку о десятичных дробях выше)
+0755
+0644
+</pre>
+
+<h4 id="Hexadecimal_шестнадцатеричные_числа">Hexadecimal (шестнадцатеричные числа)</h4>
+
+<p>Шестнадцатеричный числовой синтаксис, который использует 0 с последующей, в нижнем или верхнем регистре, латинскую букву "X" (<code>0x</code> или <code>0X)</code>. Если числа после 0x вне диапазона (0123456789ABCDEF), то может последовать за этим {{jsxref("SyntaxError")}}: "Identifier starts immediately after numeric literal".</p>
+
+<pre class="brush: js notranslate">0xFFFFFFFFFFFFFFFFF // 295147905179352830000
+0x123456789ABCDEF // 81985529216486900
+0XA // 10
+</pre>
+
+<h3 id="Литерал_Object_Объект">Литерал Object (Объект)</h3>
+
+<p>Смотрите также {{jsxref("Object")}} и {{jsxref('Operators/Object_initializer','Object initializer')}} для получения более подробной информации.</p>
+
+<pre class="brush: js notranslate">var o = { a: "foo", b: "bar", c: 42 };
+
+// сокращенная нотация. Появилась в ES2015
+var a = "foo", b = "bar", c = 42;
+var o = {a, b, c};
+// вместо
+var o = { a: a, b: b, c: c };
+</pre>
+
+<h3 id="Литерал_Array_Массив">Литерал Array (Массив)</h3>
+
+<p>Смотрите также {{jsxref("Array")}} для получения более подробной информации.</p>
+
+<pre class="brush: js notranslate">[1954, 1974, 1990, 2014]</pre>
+
+<h3 id="Литерал_String_Строка">Литерал String (Строка)</h3>
+
+<pre class="brush: js notranslate">'foo'
+"bar"</pre>
+
+<h4 id="Экранирование_шестнадцатеричной_последовательности">Экранирование шестнадцатеричной последовательности</h4>
+
+<pre class="brush: js notranslate">'\xA9' // "©"
+</pre>
+
+<h4 id="Экранирование_Юникод_символов">Экранирование Юникод символов</h4>
+
+<p>Для экранирования Юникод символов обязательно нужно указать по-крайней мере 4 символа после \u.</p>
+
+<pre class="brush: js notranslate">'\u00A9' // "©"</pre>
+
+<h4 id="Unicode_code_point_escapes">Unicode code point escapes</h4>
+
+<p>Новое в ECMAScript 2015. With Unicode code point escapes, any character can be escaped using hexadecimal numbers so that it is possible to use Unicode code points up to <code>0x10FFFF</code>. With simple Unicode escapes it is often necessary to write the surrogate halves separately to achieve the same.</p>
+
+<p>See also {{jsxref("String.fromCodePoint()")}} or {{jsxref("String.prototype.codePointAt()")}}.</p>
+
+<pre class="brush: js notranslate">'\u{2F804}'
+
+// the same with simple Unicode escapes
+'\uD87E\uDC04'</pre>
+
+<h3 id="Литерал_Регулярного_выражения">Литерал Регулярного выражения</h3>
+
+<p>Смотрите также <code>{{jsxref('Global_Objects/RegExp','RegExp')}}</code> для получения более подробной информации.</p>
+
+<pre class="brush: js notranslate">/ab+c/g
+
+// An "empty" regular expression literal
+// The empty non-capturing group is necessary
+// to avoid ambiguity with single-line comments.
+/(?:)/</pre>
+
+<h3 id="Литерал_Шаблона">Литерал Шаблона</h3>
+
+<p>Смотрите также {{jsxref('template_strings','template strings')}} для получения более подробной информации.</p>
+
+<pre class="brush: js notranslate">`string text`
+
+`string text line 1
+ string text line 2`
+
+`string text ${expression} string text`
+
+tag `string text ${expression} string text`</pre>
+
+<h2 id="Автоматическая_вставка_точки_с_запятой">Автоматическая вставка "точки с запятой"</h2>
+
+<p>Некоторые {{jsxref('Statements','JavaScript условия')}} должны быть завершены точкой с запятой и поэтому на них влияет автоматическая вставка точки с запятой (ASI):</p>
+
+<ul>
+ <li>Пустое условие</li>
+ <li><code>let</code>, <code>const</code>, переменные</li>
+ <li><code>import</code>, <code>export</code>, объявление модулей</li>
+ <li>Оператор-выражение</li>
+ <li><code>debugger</code></li>
+ <li><code>continue</code>, <code>break</code>, <code>throw</code></li>
+ <li><code>return</code></li>
+</ul>
+
+<p>Спецификация ECMAScript напоминает о <a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-rules-of-automatic-semicolon-insertion">трех правилах вставки точки с запятой</a>.</p>
+
+<p>1. Точка с запятой ставится до, когда ограничитель строки или "}" is encountered that is not allowed by the grammar.</p>
+
+<pre class="brush: js notranslate">{ 1 2 } 3
+
+// согласно ASI, будет преобразовано в
+
+{ 1 2 ;} 3;</pre>
+
+<p>2. Точка с запятой ставится в конце, когда обнаружен конец вводимой строки токенов и парсер is unable to parse the single input stream as a complete program.</p>
+
+<p>Here <code>++</code> is not treated as a {{jsxref('Operators/Arithmetic_Operators','postfix operator','Increment')}} applying to variable <code>b</code>, because a line terminator occurs between <code>b</code> and <code>++</code>.</p>
+
+<pre class="brush: js notranslate">a = b
+++c
+
+// согласно ASI, будет преобразовано в
+
+a = b;
+++c;
+</pre>
+
+<p>3. Точка с запятой вставляется в конце, когда согласно инструкции с ограниченным производством в грамматике следует ограничитель строки. Эти утверждения с правилами «no LineTerminator here» здесь:</p>
+
+<ul>
+ <li>PostfixExpressions (<code>++</code> and <code>--</code>)</li>
+ <li><code>continue</code></li>
+ <li><code>break</code></li>
+ <li><code>return</code></li>
+ <li><code>yield</code>, <code>yield*</code></li>
+ <li><code>module</code></li>
+</ul>
+
+<pre class="brush: js notranslate">return
+a + b
+
+// согласно ASI, будет преобразовано в
+
+return;
+a + b;
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1st Edition.</td>
+ <td>Standard</td>
+ <td>Первичное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-7', 'Lexical Conventions')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-ecmascript-language-lexical-grammar', 'Lexical Grammar')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Добавлено: Двоичные и восьмеричные числовые литералы, Unicode code point escapes, Шаблоны</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Binary and octal numeric literals<br>
+ (<code>0b</code> and <code>0o</code>)</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatGeckoDesktop("25")}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Unicode code point escapes<br>
+ (<code>\u{}</code>)</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatNo() }}<br>
+ {{bug(952985)}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Shorthand notation for object literals</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatGeckoDesktop("33")}}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ <tr>
+ <td>Template literals</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatGeckoDesktop("34")}}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Binary and octal numeric literals</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{CompatGeckomobile("33")}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Unicode code point escapes</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatNo() }}<br>
+ {{bug(952985)}}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ <tr>
+ <td>Shorthand notation for object literals</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{CompatGeckoMobile("33")}}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ <tr>
+ <td>Template literals</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Особенности_Firefox">Особенности Firefox</h2>
+
+<ul>
+ <li>Prior to Firefox 5 (JavaScript 1.8.6), future reserved keywords could be used when not in strict mode. This ECMAScript violation was fixed in Firefox 5.</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также:</h2>
+
+<ul>
+ <li><a href="http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/">Jeff Walden: Двоичные и восьмеричные числа</a></li>
+ <li><a href="http://mathiasbynens.be/notes/javascript-escapes">Mathias Bynens: JavaScript character escape sequences</a></li>
+ <li>{{jsxref("Boolean")}}</li>
+ <li>{{jsxref("Number")}}</li>
+ <li>{{jsxref("RegExp")}}</li>
+ <li>{{jsxref("String")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/addition/index.html b/files/ru/web/javascript/reference/operators/addition/index.html
new file mode 100644
index 0000000000..94efb4b63e
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/addition/index.html
@@ -0,0 +1,80 @@
+---
+title: Сложение (+)
+slug: Web/JavaScript/Reference/Operators/Addition
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/Addition
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор сложения (+) создает сумму числовых операндов или конкатенацию строк.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-addition.html")}}</div>
+
+<div></div>
+
+<p class="hidden">Источник для этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в интерактивный проект примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и пришлите нам запрос.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><strong>Оператор:</strong> <var>x</var> + <var>y</var>
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Сложение_чисел">Сложение чисел</h3>
+
+<pre class="brush: js notranslate">// Number + Number -&gt; addition
+1 + 2 // 3
+
+// Boolean + Number -&gt; addition
+true + 1 // 2
+
+// Boolean + Boolean -&gt; addition
+false + false // 0
+</pre>
+
+<h3 id="Сложение_строк">Сложение строк</h3>
+
+<pre class="brush: js notranslate">// String + String -&gt; concatenation
+'foo' + 'bar' // "foobar"
+
+// Number + String -&gt; concatenation
+5 + 'foo' // "5foo"
+
+// String + Boolean -&gt; concatenation
+'foo' + false // "foofalse"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификации</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-addition-operator-plus', 'Addition operator')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице составлена из структурированных данных. Если Вы хотите внести свой вклад в данные, пожалуйста, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос.</div>
+
+<p>{{Compat("javascript.operators.addition")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Subtraction">Subtraction operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Division">Division operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Multiplication">Multiplication operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder">Remainder operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation">Exponentiation operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment">Increment operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Decrement">Decrement operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_negation">Unary negation operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus">Unary plus operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/addition_assignment/index.html b/files/ru/web/javascript/reference/operators/addition_assignment/index.html
new file mode 100644
index 0000000000..dfabe25e2e
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/addition_assignment/index.html
@@ -0,0 +1,75 @@
+---
+title: Сложение с присваиванием (+=)
+slug: Web/JavaScript/Reference/Operators/Addition_assignment
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/Addition_assignment
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор сложения с присваиванием (<code>+=</code>) добавляет значение правого операнда к переменной и присваивает переменной результат. Типы двух операндов определяют поведение оператора сложения с присваиванием. Добавление или конкатенация возможны.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-addition-assignment.html")}}</div>
+
+<div></div>
+
+<p class="hidden">Источник для этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в интерактивный проект примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и пришлите нам запрос.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><strong>Оператор:</strong> x += y
+<strong>Значение:</strong> x = x + y</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_сложения_с_присваиванием">Использование сложения с присваиванием</h3>
+
+<pre class="brush: js notranslate">// Assuming the following variables
+// foo = 'foo'
+// bar = 5
+// baz = true
+
+// Number + Number -&gt; addition
+bar += 2 // 7
+
+// Boolean + Number -&gt; addition
+baz += 1 // 2
+
+// Boolean + Boolean -&gt; addition
+baz += false // 1
+
+// Number + String -&gt; concatenation
+bar += 'foo' // "5foo"
+
+// String + Boolean -&gt; concatenation
+foo += false // "foofalse"
+
+// String + String -&gt; concatenation
+foo += 'bar' // "foobar"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификации</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице составлена из структурированных данных. Если Вы хотите внести свой вклад в данные, пожалуйста, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос.</div>
+
+<p>{{Compat("javascript.operators.addition_assignment")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Assignment">Assignment operators in the JS guide</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Addition">Оператор сложения</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html b/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html
new file mode 100644
index 0000000000..16c83fcba5
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/arithmetic_operators/index.html
@@ -0,0 +1,290 @@
+---
+title: Арифметические операции
+slug: Web/JavaScript/Reference/Operators/Arithmetic_Operators
+tags:
+ - JavaScript
+ - Операторы
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>
+<div>{{jsSidebar("Operators")}}</div>
+</div>
+
+<p><strong>Арифметические операции</strong> принимают в качестве операндов числовые значения (это может быть и литерал и переменная) и возвращают результат в виде одного числового значения. Стандартными арифметическими операциями являются сложение (<code>+</code>), вычитание (<code>-</code>), умножение (<code>*</code>) и деление (<code>/</code>).</p>
+
+<h2 id="Сложение"><a name="Addition">Сложение (+)</a></h2>
+
+<p>Оператор сложения возвращает сумму числовых операндов или объединяет строки.</p>
+
+<h3 id="Syntax" name="Syntax">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Operator:</strong> x + y
+</pre>
+
+<h3 id="Examples" name="Examples">Примеры</h3>
+
+<pre class="brush: js">// Number + Number -&gt; сложение
+1 + 2 // 3
+
+// Boolean + Number -&gt; сложение
+true + 1 // 2
+
+// Boolean + Boolean -&gt; сложение
+false + false // 0
+
+// Number + String -&gt; конкатенация
+5 + "foo" // "5foo"
+
+// String + Boolean -&gt; конкатенация
+"foo" + false // "foofalse"
+
+// String + String -&gt; конкатенация
+"foo" + "bar" // "foobar"
+</pre>
+
+<h2 id="Вычитание_-"><a name="Subtraction">Вычитание (-)</a></h2>
+
+<p>Оператор вычитания вычитает один операнд из другого и возвращает разницу.</p>
+
+<h3 id="Syntax_2" name="Syntax_2">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Operator:</strong> x - y
+</pre>
+
+<h3 id="Examples_2" name="Examples_2">Примеры</h3>
+
+<pre class="brush: js">5 - 3 // 2
+3 - 5 // -2
+"foo" - 3 // NaN</pre>
+
+<h2 id="Деление"><a name="Division">Деление (/)</a></h2>
+
+<p>Оператор деления производит деление его операндов, где левый операнд - делимый, а правый - делитель.</p>
+
+<h3 id="Syntax_3" name="Syntax_3">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Operator:</strong> x / y
+</pre>
+
+<h3 id="Examples_3" name="Examples_3">Примеры</h3>
+
+<pre class="brush: js">1 / 2 // возвращает 0.5 в JavaScript
+1 / 2 // возвращает 0 в Java
+// (так числа не с плавающими точками)
+
+1.0 / 2.0 // возвращает 0.5 и в JavaScript и в Java
+
+2.0 / 0 // возвращает Infinity в JavaScript
+2.0 / 0.0 // тоже возвращает Infinity
+2.0 / -0.0 // возвращает -Infinity в JavaScript</pre>
+
+<h2 id="Умножение_*"><a name="Multiplication">Умножение (*)</a></h2>
+
+<p>Оператор умножения возвращает произведение операндов.</p>
+
+<h3 id="Syntax_4" name="Syntax_4">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Operator:</strong> x * y
+</pre>
+
+<h3 id="Examples_4" name="Examples_4">Примеры</h3>
+
+<pre class="brush: js">2 * 2 // 4
+-2 * 2 // -4
+Infinity * 0 // NaN
+Infinity * Infinity // Infinity
+"foo" * 2 // NaN
+</pre>
+
+<h2 id="Остаток_от_деления"><a name="Remainder">Остаток от деления (%)</a></h2>
+
+<p>Оператор возвращает целый остаток от деления левого операнда на правый. Возвращаемое значение всегда получает знак делимого, а не делителя.  Он использует встроенную функцию <code>modulo</code>, для получения результата, которая является целочисленным остатком деления <code>var1</code> на <code>var2</code> — например— <code>var1</code> modulo <code>var2</code>. <a href="http://wiki.ecmascript.org/doku.php?id=strawman:modulo_operator" title="http://wiki.ecmascript.org/doku.php?id=strawman:modulo_operator">Есть предложение добавить оператор modulo в будущие версии ECMAScript</a>, с той разницей, что оператор будет брать знак делителя, а не делимого.</p>
+
+<h3 id="Syntax_5" name="Syntax_5">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> var1 % var2
+</pre>
+
+<h3 id="Examples_5" name="Examples_5">Примеры</h3>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="number token">12</span> <span class="operator token">%</span> <span class="number token">5</span> <span class="comment token">// 2</span>
+<span class="operator token">-</span><span class="number token">1</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// -1</span>
+<span class="number token">NaN</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// NaN</span>
+<span class="number token">1</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// 1</span>
+<span class="number token">2</span> <span class="operator token">%</span> <span class="number token">3</span> <span class="comment token">// 2</span>
+<span class="operator token">-</span><span class="number token">4</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// -0</span>
+<span class="number token">5.5</span> <span class="operator token">%</span> <span class="number token">2</span> <span class="comment token">// 1.5</span></code></pre>
+
+<h2 id="Возведение_в_степень_**"><a name="Exponentiation">Возведение в степень (**)</a></h2>
+
+<p>Оператор возведения в степень возвращает результат первого операнда в степень. это, <code>var1</code><sup><code>var2</code></sup>, в предыдущем выражении, где <code>var1</code> и <code>var2</code> - переменные. Он право ассоциативен. <code>a ** b ** c</code> равно <code>a ** (b ** c)</code>.</p>
+
+<h3 id="Синтаксис">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> var1 ** var2</pre>
+
+<h3 id="Замечания">Замечания</h3>
+
+<p>Во многих языках, таких как PHP и Python и других, есть оператор возведения возведения в степень (обычно ^ или **), оператор определён имеющим приоритет выше, чем у унарных операторов, таких как унарный + и унарный -, но есть несколько исключений. Например, в Bash оператор ** создан имеющим приоритет ниже, чем у унарных операторов. В JavaScript невозможно написать двухсмысленное выражение, т.е. вы не можете ставить унарный оператор (<code>+/-/~/!/delete/void/typeof</code>) непосредственно перед базовым числом.</p>
+
+<pre class="brush: js">-2 ** 2;
+// 4 в Bash, -4 в других языках.
+// Это некорректно в JavaScript, т.е. операция двухсмыслена.
+
+
+-(2 ** 2);
+// -4 в JavaScript, намерения автора однозначны.</pre>
+
+<h3 id="Примеры">Примеры</h3>
+
+<pre class="brush: js">2 ** 3 // 8
+3 ** 2 // 9
+3 ** 2.5 // 15.588457268119896
+10 ** -1 // 0.1
+NaN ** 2 // NaN
+
+2 ** 3 ** 2 // 512
+2 ** (3 ** 2) // 512
+(2 ** 3) ** 2 // 64</pre>
+
+<p>Изменим знак результата возведения в степень:</p>
+
+<pre class="brush: js">-(2 ** 2) // -4</pre>
+
+<p>Насильная установка основания как отрицательного числа:</p>
+
+<pre class="brush: js">(-2) ** 2 // 4</pre>
+
+<h2 id="Инкремент"><a name="Increment">Инкремент (++)</a></h2>
+
+<p>Оператор инкремента увеличивает на единицу(инкрементирует) операнд и возвращает значение.</p>
+
+<ul>
+ <li>Если операция используется как постфикс, с оператором после операнда (например, x++), значение операнда возвращается, а затем увеличивается на единицу.</li>
+ <li>Если используется префиксная форма с оператором перед операндом (например, ++x), значение операнда возвращается увеличенным на единицу.</li>
+</ul>
+
+<h3 id="Syntax_6" name="Syntax_6">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x++ или ++x
+</pre>
+
+<h3 id="Examples_6" name="Examples_6">Примеры</h3>
+
+<pre class="brush: js">// Постфиксный
+var x = 3;
+y = x++; // y = 3, x = 4
+
+// Префиксный
+var a = 2;
+b = ++a; // a = 3, b = 3
+</pre>
+
+<h2 id="sect1"></h2>
+
+<h2 id="Декремент_--"><a name="Decrement">Декремент (--)</a></h2>
+
+<p>Операция декремента уменьшает на 1 (отнимает единицу) свой операнд и возвращает значение.</p>
+
+<ul>
+ <li>Если операция используется как постфикс (например, x--), значение операнда возвращается, а затем уменьшается на единицу.</li>
+ <li>Если используется префиксная форма (например, --x), значение операнда возвращается уменьшенным на единицу.</li>
+</ul>
+
+<h3 id="Syntax_7" name="Syntax_7">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x-- или --x
+</pre>
+
+<h3 id="Examples_7" name="Examples_7">Примеры</h3>
+
+<pre class="brush: js">// Постфиксный
+var x = 3;
+y = x--; // y = 3, x = 2
+
+// Префиксный
+var a = 2;
+b = --a; // a = 1, b = 1
+</pre>
+
+<h2 id="Унарный_минус_-"><a name="Unary_negation">Унарный минус (-)</a></h2>
+
+<p>Унарный минус ставится перед своим операндом и возвращает его математическое отрицание.</p>
+
+<h3 id="Syntax_8" name="Syntax_8">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> -x
+</pre>
+
+<h3 id="Examples_8" name="Examples_8">Примеры</h3>
+
+<pre class="brush: js">var x = 3;
+y = -x; // y = -3, x = 3
+</pre>
+
+<h2 id="Унарный_плюс"><a name="Unary_plus">Унарный плюс</a> (+)</h2>
+
+<p>Оператор унарный плюс предшедствует своему операнду и оценивает его, пытается преобразовать его в число, если он им не является. Хотя, унарное отрицание (-) также конвертирует не числа, унарный плюс - быстрейший и предпочитаемый способ конвертирования чего-либо в число потому, что он не выполняет каких-либо операций с числом. Он может конвертировать строковые представления целых и чисел с плавающей точкой, а также нестроковые значения <code>true</code>, <code>false</code> и <code>null</code>. Поддерживаются числа в десятичном и шестнадцатиричном (с префиксом "0x") формате. Отрицательные числа тоже поддерживаются (но не 16-ричные). Если он не может вычислить конкретное значение, выполнится как <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN">NaN</a>.</p>
+
+<h3 id="Syntax_9" name="Syntax_9">Синтаксис</h3>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> +x
+</pre>
+
+<h3 id="Examples_9" name="Examples_9">Примеры</h3>
+
+<pre class="brush: js">+3 // 3
++"3" // 3
++true // 1
++false // 0
++null // 0
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Примечание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.3')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено в нескольких секциях специфии: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.6">Additive operators</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.5">Multiplicative operators</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.3">Postfix expressions</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4">Unary operators</a>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-postfix-expressions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено в нескольких секциях специфии: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-additive-operators">Additive operators</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-multiplicative-operators">Multiplicative operators</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-postfix-expressions">Postfix expressions</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-unary-operators">Unary operators</a>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES7', '#sec-postfix-expressions')}}</td>
+ <td>{{Spec2('ES7')}}</td>
+ <td>Добавлен <a href="https://github.com/rwaldron/exponentiation-operator">Оператор возведения в степень</a>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-postfix-expressions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<p>{{Compat("javascript.operators.arithmetic")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Операторы присваивания</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/array_comprehensions/index.html b/files/ru/web/javascript/reference/operators/array_comprehensions/index.html
new file mode 100644
index 0000000000..c2bed1585e
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/array_comprehensions/index.html
@@ -0,0 +1,241 @@
+---
+title: Упрощенный синтаксис создания массивов
+slug: Web/JavaScript/Reference/Operators/Array_comprehensions
+translation_of: Archive/Web/JavaScript/Array_comprehensions
+---
+<div class="warning"><strong>Non-standard. Do not use!</strong><br>
+Сокращенный синтаксис создания массивов не стандартен. В будущем используйте {{jsxref("Array.prototype.map")}}, {{jsxref("Array.prototype.filter")}}, {{jsxref("Functions/Arrow_functions", "Стрелочные функции", "", 1)}} и {{jsxref("Operators/Spread_operator", "spread syntax", "", 1)}}.</div>
+
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Синтаксис <strong>array comprehension</strong> - это JavaScript-выражение, которое позволяет быстро создавать новый массив из существующего. Аналогичные сокращения существуют во многих других языках программирования.</p>
+
+<p><a href="##Differences_to_the_older_JS1.7.2FJS1.8_comprehensions">Ниже</a> показаны различия со старым синтаксисом Array Comprehension в SpiderMonkey, основанном на черновиках для ECMAScript 4.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">[for (x of итерируемый_объект) x]
+[for (x of итерируемый_объект) if (условие) x]
+[for (x of итерируемый_объект) for (y of итерируемый_объект) x + y]
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Внутри сокращения допустимо использование двух видов компонентов:</p>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}} и</li>
+ <li>{{jsxref("Statements/if...else", "if")}}</li>
+</ul>
+
+<p>Итерация for-of всегда является первым компонентом. Допустимо использование нескольких for-of итераций или условных операторов if.</p>
+
+<p>Сокращённый синтаксис создания массивов был предложен к стандартизации в ECMAScript 2016, он предоставлял удобный сокращения для создания новых массивов из других массивов. Сокращения могут быть использованы вместо вызовов {{jsxref("Array.prototype.map", "map()")}} и {{jsxref("Array.prototype.filter", "filter()")}} или их комбинаций.</p>
+
+<p>Следующий пример показывает, как из массива чисел создаётся новый массив чисел с с удвоенным значением.</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> numbers <span class="operator token">=</span> <span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="number token">2</span><span class="punctuation token">,</span> <span class="number token">3</span><span class="punctuation token">,</span> <span class="number token">4</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> doubled <span class="operator token">=</span> <span class="punctuation token">[</span><span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="keyword token">of</span> numbers<span class="punctuation token">)</span> i <span class="operator token">*</span> <span class="number token">2</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>doubled<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// logs 2,4,6,8</span></code></pre>
+
+<p>Это эквивалентно следующей операции с {{jsxref("Array.prototype.map", "map()")}}:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> doubled <span class="operator token">=</span> numbers<span class="punctuation token">.</span><span class="function token">map</span><span class="punctuation token">(</span>i <span class="operator token">=</span><span class="operator token">&gt;</span> i <span class="operator token">*</span> <span class="number token">2</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p>Сокращённый синтаксис может быть использован также для выбора элементов по определённому условию. Вывод четных чисел:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> numbers <span class="operator token">=</span> <span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="number token">2</span><span class="punctuation token">,</span> <span class="number token">3</span><span class="punctuation token">,</span> <span class="number token">21</span><span class="punctuation token">,</span> <span class="number token">22</span><span class="punctuation token">,</span> <span class="number token">30</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> evens <span class="operator token">=</span> <span class="punctuation token">[</span><span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="keyword token">of</span> numbers<span class="punctuation token">)</span> <span class="keyword token">if</span> <span class="punctuation token">(</span>i <span class="operator token">%</span> <span class="number token">2</span> <span class="operator token">===</span> <span class="number token">0</span><span class="punctuation token">)</span> i<span class="punctuation token">]</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>evens<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// logs 2,22,30</span></code></pre>
+
+<p>{{jsxref("Array.prototype.filter", "filter()")}} может использоваться для той же цели:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> evens <span class="operator token">=</span> numbers<span class="punctuation token">.</span><span class="function token">filter</span><span class="punctuation token">(</span>i <span class="operator token">=</span><span class="operator token">&gt;</span> i <span class="operator token">%</span> <span class="number token">2</span> <span class="operator token">===</span> <span class="number token">0</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p>Стили операторов {{jsxref("Array.prototype.map", "map()")}} и {{jsxref("Array.prototype.filter", "filter()")}} можно одновременно использовать в одном сокращённом выражении. Далее фильтруются только четные числа, а затем создаётся массив с их удвоенным значением:</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> numbers <span class="operator token">=</span> <span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">,</span> <span class="number token">2</span><span class="punctuation token">,</span> <span class="number token">3</span><span class="punctuation token">,</span> <span class="number token">21</span><span class="punctuation token">,</span> <span class="number token">22</span><span class="punctuation token">,</span> <span class="number token">30</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> doubledEvens <span class="operator token">=</span> <span class="punctuation token">[</span><span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="keyword token">of</span> numbers<span class="punctuation token">)</span> <span class="keyword token">if</span> <span class="punctuation token">(</span>i <span class="operator token">%</span> <span class="number token">2</span> <span class="operator token">===</span> <span class="number token">0</span><span class="punctuation token">)</span> i <span class="operator token">*</span> <span class="number token">2</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>doubledEvens<span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// logs 4,44,60</span></code></pre>
+
+<p>Квадратные скобки обозначают неявный блок. Новый переменные (такие как  "<strong>i"</strong> в примере выше) трактуются, как если бы они объявлялись с использованием {{jsxref("Statements/let","let")}}. Это значит, что эти переменные недоступны извне.</p>
+
+<p>Входными данными необязательно может быть массив; также можно использовать <a href="/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators" title="en-US/docs/JavaScript/Guide/Iterators and Generators">итераторы и генераторы</a>.</p>
+
+<p>Даже строки могут подаваться на вход; можно делать то же, что с <code>filter</code> и <code>map</code> (но с массивоподобными объектами):</p>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">var</span> str <span class="operator token">=</span> <span class="string token">'abcdef'</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> consonantsOnlyStr <span class="operator token">=</span> <span class="punctuation token">[</span><span class="keyword token">for</span> <span class="punctuation token">(</span>c <span class="keyword token">of</span> str<span class="punctuation token">)</span> <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="operator token">!</span><span class="punctuation token">(</span><span class="regex token">/[aeiouAEIOU]/</span><span class="punctuation token">)</span><span class="punctuation token">.</span><span class="function token">test</span><span class="punctuation token">(</span>c<span class="punctuation token">)</span><span class="punctuation token">)</span> c<span class="punctuation token">]</span><span class="punctuation token">.</span><span class="function token">join</span><span class="punctuation token">(</span><span class="string token">''</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// 'bcdf'</span>
+<span class="keyword token">var</span> interpolatedZeros <span class="operator token">=</span> <span class="punctuation token">[</span><span class="keyword token">for</span> <span class="punctuation token">(</span>c <span class="keyword token">of</span> str<span class="punctuation token">)</span> c <span class="operator token">+</span> <span class="string token">'0'</span> <span class="punctuation token">]</span><span class="punctuation token">.</span><span class="function token">join</span><span class="punctuation token">(</span><span class="string token">''</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// 'a0b0c0d0e0f0'</span></code></pre>
+
+<p>Для предупреждения конвертации в число (в данном конкретном примере) использвалась функция {{jsxref("Array.prototype.join", "join()")}}.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простые_сокращения">Простые сокращения</h3>
+
+<pre class="brush:js">[for (i of [ 1, 2, 3 ]) i*i ];
+// [ 1, 4, 9 ]
+
+var abc = [ "A", "B", "C" ];
+[for (letters of abc) letters.toLowerCase()];
+// [ "a", "b", "c" ]</pre>
+
+<h3 id="Сокращения_с_условным_оператором_if">Сокращения с условным оператором "if"</h3>
+
+<pre class="brush: js">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
+[for (year of years) if (year &gt; 2000) year];
+// [ 2006, 2010, 2014 ]
+[for (year of years) if (year &gt; 2000) if(year &lt; 2010) year];
+// [ 2006], the same as below:
+[for (year of years) if (year &gt; 2000 &amp;&amp; year &lt; 2010) year];
+// [ 2006]
+</pre>
+
+<h3 id="Сокращения_в_сравнении_с_map_и_filter">Сокращения в сравнении с <code>map</code> и <code>filter</code></h3>
+
+<p>Простой способ понять синтаксис Array Comprehension - это сравнить его с методами Array {{jsxref("Array.map", "map")}} и {{jsxref("Array.filter", "filter")}}:</p>
+
+<pre class="brush: js">var numbers = [ 1, 2, 3 ];
+
+numbers.map(function (i) { return i * i });
+numbers.map(i =&gt; i*i);
+[for (i of numbers) i*i ];
+// all are [ 1, 4, 9 ]
+
+numbers.filter(function (i) { return i &lt; 3 });
+numbers.filter(i =&gt; i &lt; 3);
+[for (i of numbers) if (i &lt; 3) i];
+// all are [ 1, 2 ]
+</pre>
+
+<h3 id="Сокращения_с_двумя_массивами">Сокращения с двумя массивами</h3>
+
+<p>Использование двух итераторов for-of для работы с двумя массивами:</p>
+
+<pre class="brush: js">var numbers = [ 1, 2, 3 ];
+var letters = [ "a", "b", "c" ];
+
+var cross = [for (i of numbers) for (j of letters) i+j];
+// [ "1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c" ]
+
+var grid = [for (i of numbers) [for (j of letters) i+j]];
+// [
+// ["1a", "1b", "1c"],
+// ["2a", "2b", "2c"],
+// ["3a", "3b", "3c"]
+// ]
+
+[for (i of numbers) if (i &gt; 1) for (j of letters) if(j &gt; "a") i+j]
+// ["2b", "2c", "3b", "3c"], the same as below:
+
+[for (i of numbers) for (j of letters) if (i &gt; 1) if(j &gt; "a") i+j]
+// ["2b", "2c", "3b", "3c"]
+
+[for (i of numbers) if (i &gt; 1) [for (j of letters) if(j &gt; "a") i+j]]
+// [["2b", "2c"], ["3b", "3c"]], not the same as below:
+
+[for (i of numbers) [for (j of letters) if (i &gt; 1) if(j &gt; "a") i+j]]
+// [[], ["2b", "2c"], ["3b", "3c"]]
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p>Изначально было в черновике ECMAScript 2015, но исключено в ревизии 27 (Август 2014). Смотрите старые ревизии ES2015 для уточнения семантики.</p>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("30") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile("30") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Специфика_работы_SpiderMonkey">Специфика работы SpiderMonkey</h2>
+
+<ul>
+ <li>{{jsxref("Statements/let", "let")}} не поддерживается как идентификатор, так как он доступен только в  JS версии 1.7 и XUL-скриптах.</li>
+ <li>Деструктуризация сокращений не поддерживается ({{bug(980828)}}).</li>
+</ul>
+
+<h2 id="Отличия_от_старой_версии_JS1.7JS1.8"><a id="#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions" name="#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions"></a>Отличия от старой версии JS1.7/JS1.8</h2>
+
+<div class="warning">Сокращения из JS1.7/JS1.8 были исключены из движка Gecko, начиная с версии 46 ({{bug(1220564)}}).</div>
+
+<p><strong>Старый синтаксис (не используйте его больше!):</strong></p>
+
+<pre class="brush: js example-bad line-numbers language-js"><code class="language-js"><span class="punctuation token">[</span>X <span class="keyword token">for</span> <span class="punctuation token">(</span>Y <span class="keyword token">in</span> Z<span class="punctuation token">)</span><span class="punctuation token">]</span>
+<span class="punctuation token">[</span>X <span class="keyword token">for</span> each <span class="punctuation token">(</span>Y <span class="keyword token">in</span> Z<span class="punctuation token">)</span><span class="punctuation token">]</span>
+<span class="punctuation token">[</span>X <span class="keyword token">for</span> <span class="punctuation token">(</span>Y <span class="keyword token">of</span> Z<span class="punctuation token">)</span><span class="punctuation token">]</span></code></pre>
+
+<p>Различия:</p>
+
+<ul>
+ <li>Сокращения в ESNext создают одну область для элемента "for" вместо области для всех элементов for в целом.
+ <ul>
+ <li>Old: <code>[()=&gt;x for (x of [0, 1, 2])][1]() // 2</code></li>
+ <li>New: <code>[for (x of [0, 1, 2]) ()=&gt;x][1]() // 1, каждая итерация создаёт свежую связку с x. </code></li>
+ </ul>
+ </li>
+ <li>Сокращения в ESNext начинаются с "for" вместо присваиваемой переменной.
+ <ul>
+ <li>Old: <code>[i * 2 for (i of numbers)]</code></li>
+ <li>New: <code>[for (i of numbers) i * 2]</code></li>
+ </ul>
+ </li>
+ <li>Сокращения в ESNext могут иметь несколько компонентов <code>if</code> и <code>for</code>.</li>
+ <li>Сокращения в ESNext работают только с итерациями вида <code>{{jsxref("Statements/for...of", "for...of")}}</code> и не работают с <code>{{jsxref("Statements/for...in", "for...in")}}</code>.</li>
+</ul>
+
+<p>Смотрите <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1220564#c42">Bug 1220564, comment 42</a> для внесения предложений по коду.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}}</li>
+ <li>{{jsxref("Operators/Generator_comprehensions", "Сокращённые описания генераторов", "" ,1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/assignment_operators/index.html b/files/ru/web/javascript/reference/operators/assignment_operators/index.html
new file mode 100644
index 0000000000..aa1d42facf
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/assignment_operators/index.html
@@ -0,0 +1,430 @@
+---
+title: Операторы присваивания
+slug: Web/JavaScript/Reference/Operators/Assignment_Operators
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators#Assignment_operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Оператор присваивания</strong> присваивает левому операнду значение, основанное на значении правого операнда.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Основной оператор присваивания - это знак равно (<code>=</code>), он и присваивает значение правого операнда, левому. То есть - <code>x = y</code> присваивает значение переменной <code>y</code>, переменной <code>x</code>. Другие операторы присваивания, как следует из приведенной ниже таблицы с определениями и примерами, являются сокращениями стандартных операций.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th>Имя</th>
+ <th>Сокращенный оператор</th>
+ <th>Смысл</th>
+ </tr>
+ <tr>
+ <td><a href="#Assignment">Присваивание</a></td>
+ <td><code>x = y</code></td>
+ <td><code>x = y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Addition_assignment">Присваивание со сложением</a></td>
+ <td><code>x += y</code></td>
+ <td><code>x = x + y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Subtraction_assignment">Присваивание с вычитанием</a></td>
+ <td><code>x -= y</code></td>
+ <td><code>x = x - y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Multiplication_assignment">Присваивание с умножением</a></td>
+ <td><code>x *= y</code></td>
+ <td><code>x = x * y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Division_assignment">Присваивание с делением</a></td>
+ <td><code>x /= y</code></td>
+ <td><code>x = x / y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Remainder_assignment">Присваивание по модулю</a></td>
+ <td><code>x %= y</code></td>
+ <td><code>x = x % y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Left_shift_assignment">Присваивание с левым сдвигом</a></td>
+ <td><code>x &lt;&lt;= y</code></td>
+ <td><code>x = x &lt;&lt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Right_shift_assignment">Присваивание с правым сдвигом</a></td>
+ <td><code>x &gt;&gt;= y</code></td>
+ <td><code>x = x &gt;&gt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Unsigned_right_shift_assignment">Присваивание с беззнаковым сдвигом вправо</a></td>
+ <td><code>x &gt;&gt;&gt;= y</code></td>
+ <td><code>x = x &gt;&gt;&gt; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_AND_assignment">Присваивание с побитовым AND</a></td>
+ <td><code>x &amp;= y</code></td>
+ <td><code>x = x &amp; y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_XOR_assignment">Присваивание с побитовым XOR</a></td>
+ <td><code>x ^= y</code></td>
+ <td><code>x = x ^ y</code></td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_OR_assignment">Присваивание с побитовым OR</a></td>
+ <td><code>x |= y</code></td>
+ <td><code>x = x | y</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Присваивание">Присваивание</h2>
+
+<p>Простой оператор присваивания, который задает значение переменной. Цепочка операторов присваивания может быть использована для назначения нескольким переменным одного и того же значения. Смотрите пример.</p>
+
+<h4 id="Синтаксис">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x = y
+</pre>
+
+<h4 id="Примеры">Примеры</h4>
+
+<pre class="brush: js">// Например, следующие переменные:
+// x = 5
+// y = 10
+// z = 25
+
+x = y // x - 10
+x = y = z // x, y и z все равны 25
+</pre>
+
+<h2 id="Присваивание_со_сложением">Присваивание со сложением</h2>
+
+<p>Оператор добавочного присваивания, <strong>добавляет</strong> значение правого операнда к значению левого, и сохраняет результат в переменную левого операнда.<strong> </strong>Типы значений обоих операндов, определяют поведение оператора добавочного присваивания. Возможны сложение и конкатенация. Смотрите {{jsxref("Operators/Arithmetic_Operators", "addition operator", "#Addition", 1)}} для подробностей.</p>
+
+<h4 id="Синтаксис_2">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x += y
+<strong>Значение:</strong> x = x + y
+</pre>
+
+<h4 id="Примеры_2">Примеры</h4>
+
+<pre class="brush: js">// Например, следующие переменные:
+// foo = "foo"
+// bar = 5
+// baz = true
+
+// Результат исполнения каждого нижеприведенного примера
+// представлен в изоляции от предыдущих примеров (как если
+// бы значения переменных foo, bar, baz возвращались на
+// первоначальные)
+
+// Number + Number -&gt; сложение
+bar += 2 // 7
+
+// Boolean + Number -&gt; сложение
+baz += 1 // 2
+
+// Boolean + Boolean -&gt; сложение
+baz += false // 1
+
+// Number + String -&gt; конкатенация
+bar += "foo" // "5foo"
+
+// String + Boolean -&gt; конкатенация
+foo += false // "foofalse"
+
+// String + String -&gt; конкатенация
+foo += "bar" // "foobar"
+</pre>
+
+<h2 id="Присваивание_с_вычитанием">Присваивание с вычитанием</h2>
+
+<p>Оператор вычитаемого присваивания <strong>вычитает</strong> значение правого операнда из значения левого, и присваивает результат переменной левого операнда. Смотрите {{jsxref("Operators/Arithmetic_Operators", "subtraction operator", "#Subtraction", 1)}} для подробностей.</p>
+
+<h4 id="Синтаксис_3">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x -= y
+<strong>Значение:</strong> x = x - y
+</pre>
+
+<h4 id="Примеры_3">Примеры</h4>
+
+<pre class="brush: js">// Например, следующие переменные:
+// bar = 5
+
+bar -= 2 // 3
+bar -= "foo" // NaN
+</pre>
+
+<h3 id="Присваивание_с_умножением"><a name="Multiplication_assignment">Присваивание с умножением</a></h3>
+
+<p>The multiplication assignment operator <strong>multiplies</strong> a variable by the value of the right operand and assigns the result to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "multiplication operator", "#Multiplication", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_4">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x *= y
+<strong>Значение:</strong> x = x * y
+</pre>
+
+<h4 id="Примеры_4">Примеры</h4>
+
+<pre class="brush: js">// Assuming the following variable
+// bar = 5
+
+bar *= 2 // 10
+bar *= "foo" // NaN
+</pre>
+
+<h3 id="Присваивание_с_делением"><a name="Division_assignment">Присваивание с делением</a></h3>
+
+<p>The division assignment operator <strong>divides</strong> a variable by the value of the right operand and assigns the result to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "division operator", "#Division", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_5">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x /= y
+<strong>Значение:</strong> x = x / y
+</pre>
+
+<h4 id="Примеры_5">Примеры</h4>
+
+<pre class="brush: js">// Assuming the following variable
+// bar = 5
+
+bar /= 2 // 2.5
+bar /= "foo" // NaN
+bar /= 0 // Infinity
+</pre>
+
+<h3 id="Присваивание_по_модулю"><a name="Remainder_assignment">Присваивание по модулю</a></h3>
+
+<p>The remainder assignment operator <strong>divides</strong> a variable by the value of the right operand and assigns the <strong>remainder</strong> to the variable. See the {{jsxref("Operators/Arithmetic_Operators", "remainder operator", "#Remainder", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_6">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x %= y
+<strong>Значение:</strong> x = x % y
+</pre>
+
+<h4 id="Примеры_6">Примеры</h4>
+
+<pre class="brush: js">// Assuming the following variable
+// bar = 5
+
+bar %= 2 // 1
+bar %= "foo" // NaN
+bar %= 0 // NaN
+</pre>
+
+<h3 id="Присваивание_с_левым_сдвигом"><a name="Left_shift_assignment">Присваивание с левым сдвигом</a></h3>
+
+<p>The left shift assignment operator moves the specified amount of bits to the left and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "left shift operator", "#Left_shift", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_7">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x &lt;&lt;= y
+<strong>Значение:</strong> x = x &lt;&lt; y
+</pre>
+
+<h4 id="Примеры_7">Примеры</h4>
+
+<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
+bar &lt;&lt;= 2; // 20 (00000000000000000000000000010100)
+</pre>
+
+<h3 id="Присваивание_с_правым_сдвигом"><a name="Right_shift_assignment">Присваивание с правым сдвигом</a></h3>
+
+<p>The right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "right shift operator", "#Right_shift", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_8">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x &gt;&gt;= y
+<strong>Значение:</strong> x = x &gt;&gt; y
+</pre>
+
+<h4 id="Примеры_8">Примеры</h4>
+
+<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
+bar &gt;&gt;= 2; // 1 (00000000000000000000000000000001)
+
+var bar -5; // (-00000000000000000000000000000101)
+bar &gt;&gt;= 2; // -2 (-00000000000000000000000000000010)
+</pre>
+
+<h3 id="Присваивание_с_беззнаковым_сдвигом_вправо"><a name="Unsigned_right_shift_assignment">Присваивание с беззнаковым сдвигом вправо</a></h3>
+
+<p>The unsigned right shift assignment operator moves the specified amount of bits to the right and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", " unsigned right shift operator", "#Unsigned_right_shift", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_9">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x &gt;&gt;&gt;= y
+<strong>Значение:</strong> x = x &gt;&gt;&gt; y
+</pre>
+
+<h4 id="Примеры_9">Примеры</h4>
+
+<pre class="brush: js">var bar = 5; // (00000000000000000000000000000101)
+bar &gt;&gt;&gt;= 2; // 1 (00000000000000000000000000000001)
+
+var bar = -5; // (-00000000000000000000000000000101)
+bar &gt;&gt;&gt;= 2; // 1073741822 (00111111111111111111111111111110)</pre>
+
+<h3 id="Присваивание_с_побитовым_AND"><a name="Bitwise_AND_assignment">Присваивание с побитовым AND</a></h3>
+
+<p>The bitwise AND assignment operator uses the binary representation of both operands, does a bitwise AND operation on them and assigns the result to the variable. See the {{jsxref("Operators/Bitwise_Operators", "bitwise AND operator", "#Bitwise_AND", 1)}} for more details.</p>
+
+<h4 id="Синтаксис_10">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x &amp;= y
+<strong>Значение:</strong> x = x &amp; y
+</pre>
+
+<h4 id="Примеры_10">Примеры</h4>
+
+<pre class="brush: js">var bar = 5;
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+bar &amp;= 2; // 0
+</pre>
+
+<h3 id="Присваивание_с_побитовым_XOR"><a name="Bitwise_XOR_assignment">Присваивание с побитовым XOR</a></h3>
+
+<p>Побитовый оператор присваивания XOR использует двоичное представление обоих операндов, выполняет побитовую XOR-операцию и присваивает результат переменной. Для получения более подробной информации см. {{jsxref("Operators/Bitwise_Operators", "Побитовый оператор XOR", "#Bitwise_XOR", 1)}}.</p>
+
+<h4 id="Синтаксис_11">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x ^= y
+<strong>Значение:</strong> x = x ^ y
+</pre>
+
+<h4 id="Примеры_11">Примеры</h4>
+
+<pre class="brush: js">var bar = 5;
+bar ^= 2; // 7
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+// -----------------------------------
+// 7: 00000000000000000000000000000111
+</pre>
+
+<h3 id="Присваиванием_с_побитовым_OR"><a name="Bitwise_OR_assignment">Присваиванием с побитовым OR</a></h3>
+
+<p>Побитовый оператор присваивания OR использует двоичное (бинарное) представление обоих операндов, выполняет побитовое ИЛИ для них и присваивает результат переменной. Дополнительную информацию см. {{jsxref("Operators/Bitwise_Operators", "Побитовый оператор OR", "#Bitwise_OR", 1)}}.</p>
+
+<h4 id="Синтаксис_12">Синтаксис</h4>
+
+<pre class="syntaxbox"><strong>Оператор:</strong> x |= y
+<strong>Значение:</strong> x = x | y
+</pre>
+
+<h4 id="Примеры_12">Примеры</h4>
+
+<pre class="brush: js">var bar = 5;
+bar |= 2; // 7
+// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+// -----------------------------------
+// 7: 00000000000000000000000000000111
+</pre>
+
+<h2 id="Примеры_13">Примеры</h2>
+
+<h3 id="Левый_операнд_с_другим_оператором_присваивания">Левый операнд с другим оператором присваивания</h3>
+
+<p>В необычных ситуациях оператор присваивания, например, <em>x += y</em> не идентичен выражению, <em>x = x + y</em>. Когда левый операнд оператора присваивания содержит оператор присваивания, левый операнд оценивается только один раз. Например:</p>
+
+<pre class="brush: js">a[i++] += 5 // i оценивается только один раз
+a[i++] = a[i++] + 5 // i оценивается дважды
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.13', 'Операторы присваивания')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-assignment-operators', 'Операторы присваивания')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators">Арифметические операции</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/async_function/index.html b/files/ru/web/javascript/reference/operators/async_function/index.html
new file mode 100644
index 0000000000..9b9c72aba1
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/async_function/index.html
@@ -0,0 +1,147 @@
+---
+title: async function expression
+slug: Web/JavaScript/Reference/Operators/async_function
+translation_of: Web/JavaScript/Reference/Operators/async_function
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Ключевое слово <strong><code>async function</code></strong> исползуется для определения асинхронной функции внутри выражений.</p>
+
+<p>Вы также можете определить асинхронные функции при помощи <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function" title="The async function keyword can be used to define async functions inside expressions.">инструкции async function</a>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">async function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]]) {
+ <em>statements</em>
+}</pre>
+
+<p>Согласно спецификации <a href="https://developer.mozilla.org/en-US/docs/">ES2015</a>, вы также можете использовать <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочные функции</a>.</p>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции. Этот параметр может быть опущен, в этом случае говорят об <em>анонимной функции</em>. Имя используется только в теле функции.</dd>
+ <dt><code>paramN</code></dt>
+ <dd>Имя аргумента, передаваемого функции.</dd>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции, составляющие тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Выражение <code>async function</code> очень похоже, и имеет почти тот же синтаксис, что и {{jsxref('Statements/async_function', 'async function statement')}}. Главное отличие между выражениями async <code>function</code> и объявлениями async <code>function</code> заключается в <em>имени функции,</em> которое может быть опущено в выражении <code>async function</code> для создания <em>анонимной</em> функции. Выражение <code>async function</code> можно использовать в виде {{Glossary("IIFE")}} (Immediately Invoked Function Expression), и оно будет запущено сразу после объявления. См. также главу о <a href="/en-US/docs/Web/JavaScript/Reference/Functions">функциях</a>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: js">function resolveAfter2Seconds(x) {
+ return new Promise(resolve =&gt; {
+ setTimeout(() =&gt; {
+ resolve(x);
+ }, 2000);
+ });
+};
+
+(async function(x) { // выражение асинхронной функции в виде IIFE
+ var a = resolveAfter2Seconds(20);
+ var b = resolveAfter2Seconds(30);
+ return x + await a + await b;
+})(10).then(v =&gt; {
+ console.log(v); // выведет 60 после 2 секунд.
+});
+
+var add = async function(x) { // назначение выражения асинхронной функции переменной
+ var a = await resolveAfter2Seconds(20);
+ var b = await resolveAfter2Seconds(30);
+ return x + a + b;
+};
+
+add(10).then(v =&gt; {
+ console.log(v); // выведет 60 после 4 секунд.
+});
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th> Edge</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(55)}}</td>
+ <td>{{CompatGeckoDesktop("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(55)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/async_function", "async function")}}</li>
+ <li>{{jsxref("AsyncFunction")}} object</li>
+ <li>{{jsxref("Operators/await", "await")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/await/index.html b/files/ru/web/javascript/reference/operators/await/index.html
new file mode 100644
index 0000000000..ecce9884c5
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/await/index.html
@@ -0,0 +1,157 @@
+---
+title: await
+slug: Web/JavaScript/Reference/Operators/await
+translation_of: Web/JavaScript/Reference/Operators/await
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор <code>await</code> используется для ожидания окончания {{jsxref("Promise")}}. Может быть использован только внутри {{jsxref("Statements/async_function", "async function")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">[<em>rv</em>] = await <em>expression</em>;</pre>
+
+<dl>
+ <dt><code>expression</code></dt>
+ <dd>{{jsxref("Promise")}} или любое другое значение для ожидания разрешения.</dd>
+ <dt><code>rv</code></dt>
+ <dd>
+ <p>Возвращает полученное из <code>Promise</code> значение, либо само значение, если оно не является <code>Promise.</code></p>
+ </dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Оператор <code>await</code> заставляет функцию, объявленную с использованием оператора <code>async</code>, ждать выполнения <code>Promise</code> и продолжать выполнение после возвращения <code>Promise</code> значения. Впоследствии возвращает полученное из  <code>Promise</code> значение. Если типом значения, к которому был применен оператор <code>await</code>, является не <code>Promise</code>, то значение приводится к успешно выполненному <code>Promise</code>.</p>
+
+<p>Если <code>Promise</code> отклоняется, то <code>await</code> генерирует исключение с отклонённым значением.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p><code>await</code> ожидает разрешения <code>Promise</code> и возвращает полученное значение.</p>
+
+<pre class="brush: js">function resolveAfter2Seconds(x) {
+ return new Promise(resolve =&gt; {
+ setTimeout(() =&gt; {
+ resolve(x);
+ }, 2000);
+ });
+}
+
+async function f1() {
+ var x = await resolveAfter2Seconds(10);
+ console.log(x); // 10
+}
+f1();
+</pre>
+
+<p>Если типом значения является не <code>Promise</code>, значение преобразуется к успешно выполненному <code>Promise</code>.</p>
+
+<pre class="brush: js">async function f2() {
+ var y = await 20;
+ console.log(y); // 20
+}
+f2();
+</pre>
+
+<p>Если <code>Promise</code> отклонен, то выбрасывается исключение с переданным значением.</p>
+
+<pre class="brush: js">async function f3() {
+ try {
+ var z = await Promise.reject(30);
+ } catch(e) {
+ console.log(e); // 30
+ }
+}
+f3();</pre>
+
+<p>Обработка отклонённого <code>Promise</code> без <code>try/catch</code> блока.</p>
+
+<pre class="brush: js">var response = await promisedFunction().catch((err) =&gt; { console.log(err); });
+// response получит значение undefined, если Promise будет отклонён
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-definitions', 'async functions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(55)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>10.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("52.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatOpera(42)}}</td>
+ <td>10.1</td>
+ <td>{{CompatChrome(55)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Statements/async_function", "async function")}}</li>
+ <li>{{jsxref("Operators/async_function", "async function expression")}}</li>
+ <li>{{jsxref("AsyncFunction")}} object</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/bitwise_and/index.html b/files/ru/web/javascript/reference/operators/bitwise_and/index.html
new file mode 100644
index 0000000000..ce232c1463
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/bitwise_and/index.html
@@ -0,0 +1,111 @@
+---
+title: Bitwise AND (&)
+slug: Web/JavaScript/Reference/Operators/Bitwise_AND
+tags:
+ - JavaScript
+ - Оператор
+ - По
+ - Поитовые операторы
+translation_of: Web/JavaScript/Reference/Operators/Bitwise_AND
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Побитовый опеератор И (<code>&amp;</code>) возвращает <code>1</code> в каждой битовой позиции,  для которой соответствующие биты обоих операндов равны <code>1</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-bitwise-and.html")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><code><var>a</var> &amp; <var>b</var></code>
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Операнды преобразуются в  32-битные целые числа и выражаются серией битов (нулей and единиц). Числа с более чем 32 битами отбрасывают старшие разряды. Например, следующее целое число  с более чем 32 битами будет преобразовано в 32-биитное целое:</p>
+
+<pre class="brush: js notranslate">До: 11100110111110100000000000000110000000000001
+После: 10100000000000000110000000000001</pre>
+
+<p>Каждый бит в первом операнде связан с соответствующим битом во втором операнде:<em>первый бит - с первым</em>,<em>второй- со вторым</em>, и т.д.</p>
+
+<p>Оператор применяется к каждой паре битов, и результат строится побитово.</p>
+
+<p>Таблица истинности для оператора И:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th class="header" scope="col">a</th>
+ <th class="header" scope="col">b</th>
+ <th class="header" scope="col">a И b</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ </tbody>
+</table>
+
+<pre class="brush: js notranslate">. 9 (base 10) = 00000000000000000000000000001001 (base 2)
+ 14 (base 10) = 00000000000000000000000000001110 (base 2)
+ --------------------------------
+14 &amp; 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
+</pre>
+
+<p>Побитовоее И для любого числа <code><var>x</var></code> с <code>0</code> дает <code>0</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_побитового_И">Использование побитового И</h3>
+
+<pre class="brush: js notranslate">// 5: 00000000000000000000000000000101
+// 2: 00000000000000000000000000000010
+5 &amp; 2; // 0</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#prod-BitwiseANDExpression', 'Bitwise AND expression')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+
+
+<p>{{Compat("javascript.operators.bitwise_and")}}</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise">Bitwise operators in the JS guide</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_AND_assignment">Bitwise AND assignment operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/bitwise_operators/index.html b/files/ru/web/javascript/reference/operators/bitwise_operators/index.html
new file mode 100644
index 0000000000..e681bdf40b
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/bitwise_operators/index.html
@@ -0,0 +1,625 @@
+---
+title: Битовые операции
+slug: Web/JavaScript/Reference/Operators/Bitwise_Operators
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Битовые операции обращаются со своими операндами как с 32-х разрядными последовательностями нулей и единиц, а не как с десятичными, восьмеричными или шестнадцатиричными числами. К примеру десятичное число 9 в двоичном представлении будет выглядеть как 1001. Битовые операции производят свои преобразования именно с двоичным представлением числа, но возвращают стандартные числовые значения языка JavaScript.</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header" colspan="2">Операторы</td>
+ </tr>
+ <tr>
+ <td>Реализованы в:</td>
+ <td>JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>Версия ECMA:</td>
+ <td>ECMA-262</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Следующая таблица содержит сводные данные о битовых операциях в JavaScript:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <th>Оператор</th>
+ <th>Использование</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>Побитовое И</td>
+ <td style="white-space: nowrap;"><code>a &amp; b</code></td>
+ <td>Возвращает 1 в тех разрядах, которые у обоих операндов были равны 1.</td>
+ </tr>
+ <tr>
+ <td>Побитовое ИЛИ</td>
+ <td style="white-space: nowrap;"><code>a | b</code></td>
+ <td>Возвращает 1 в тех разрядах, которые хотя бы у одного из операндов были равны 1.</td>
+ </tr>
+ <tr>
+ <td>Побитовое исключающее ИЛИ</td>
+ <td style="white-space: nowrap;"><code>a ^ b</code></td>
+ <td>Возвращает 1 в тех позициях, которые только у одного из операндов были равны 1.</td>
+ </tr>
+ <tr>
+ <td>Побитовое НЕ</td>
+ <td style="white-space: nowrap;"><code>~ a</code></td>
+ <td>Инвертирует биты операнда.</td>
+ </tr>
+ <tr>
+ <td>Сдвиг влево</td>
+ <td style="white-space: nowrap;"><code>a &lt;&lt; b</code></td>
+ <td>Сдвигает двоичное представление числа a на b разрядов влево заполняя освободившиеся справа разряды нулями.</td>
+ </tr>
+ <tr>
+ <td>Арифметический сдвиг вправо</td>
+ <td style="white-space: nowrap;"><code>a &gt;&gt; b</code></td>
+ <td>Сдвигает двоичное представление числа a на b разрядов вправо. Освобождающиеся разряды заполняются  знаковым битом.</td>
+ </tr>
+ <tr>
+ <td>Логический сдвиг вправо</td>
+ <td style="white-space: nowrap;"><code>a &gt;&gt;&gt; b</code></td>
+ <td>Сдвигает двоичное представление числа a на b разрядов вправо. Освобождающиеся разряды заполняются нулями.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Signed_32-bit_integers" name="Signed_32-bit_integers">Представление чисел (Signed 32-bit integers)</h3>
+
+<p>Операнды всех битовых операций конвертируются в 32-х битовые целые со знаком представленные в дополнительном коде и с использованием порядка битов от "старшего к младшему". Порядок битов "от старшего к младшему" означает, что наиболее значимый бит (бит с наибольшим значением) находится слева если 32-х разрядное число представлено в виде горизонтальной линии (шкалы). Представление в дополнительном коде  означает, что отрицательное значение числа (например 5 и -5) получается путем инвертирования числа (операция "побитовое НЕ", также известное как "обратный код") и прибавления к нему единицы.</p>
+
+<p>Возьмем, к примеру, число 314. Представим его в двоичном коде:</p>
+
+<pre class="eval">00000000000000000000000100111010
+</pre>
+
+<p>Следующая строка представляет собой его обратный код или ~314:</p>
+
+<pre class="eval">11111111111111111111111011000101
+</pre>
+
+<p>Прибавив к нему единицу, мы получаем двоичное представление числа  -314, оно же 314 в дополнительном коде:</p>
+
+<pre class="eval">11111111111111111111111011000110</pre>
+
+<p>Дополнение до 2-х гарантирует нам, что у положительного числа самый левый бит равен 0, в то время как у отрицательного он равен 1. Он зовется <em>знаковым битом</em>.</p>
+
+<p><br>
+ Число 0 есть число, у которого во ввсех битовых позициях записаны нули.</p>
+
+<pre class="line-numbers language-html"><code class="language-html">0 (base 10) = 00000000000000000000000000000000 </code></pre>
+
+<p>Число -1 есть число, у которого во всех битовых позициях записаны единицы.</p>
+
+<pre class="line-numbers language-html"><code class="language-html">-1 (base 10) = 11111111111111111111111111111111 </code></pre>
+
+<p>Число <code>-2147483648</code> (в шестнадцатиричной системе счисления: <code>-0x80000000</code>) - это вещественное число, которое состоит только из 0, заисключением самого первого слева, который есть 1 (отвечает за знак числа).</p>
+
+<pre class="line-numbers language-html"><code class="language-html">-2147483648 (base 10) = 10000000000000000000000000000000</code></pre>
+
+<p>Число <code>2147483648</code> (в шестнадцатиричной системе счисления: <code>0x80000000</code>) - это вещественное число, которое состоит только из 1, заисключением самого первого слева, который есть 0 (отвечает за знак числа).</p>
+
+<pre class="line-numbers language-html"><code class="language-html">2147483647 (base 10) = 01111111111111111111111111111111</code></pre>
+
+<p><code>-2147483648 и 2147483647 - это самое минимальное и самое максимальное числа, которые можно представить в 32 разрядной ячейке памяти.</code></p>
+
+<h2 id="Bitwise_logical_operators" name="Bitwise_logical_operators">Побитовые логические операции</h2>
+
+<p>Побитовые логические операции работают следующим образом:</p>
+
+<ul>
+ <li>Операнды конвертируются в 32-х битовые числа отображаемые последовательностью нулей и единиц. Числа более 32-х бит теряют свои старшие биты. Например:</li>
+</ul>
+
+<pre class="line-numbers language-html"><code class="language-html">До: 11100110111110100000000000000110000000000001
+После: 10100000000000000110000000000001</code>
+</pre>
+
+<ul>
+ <li>Каждый бит первого операнда считается парным соотвествующему биту второго операнда. Первый бит - первому, второй второму итд.</li>
+ <li>Операция применяется к каждой паре битов, and the result is constructed bitwise.</li>
+</ul>
+
+<h3 id="_.28Bitwise_AND.29" name="&amp;_.28Bitwise_AND.29">&amp; (Побитовое AND)</h3>
+
+<p>Производит побитовое И над каждой парой битов. Операция <code>a</code> AND <code>b</code> веренет 1 если только и <code>a</code> и <code>b</code> равны 1. Таблица истинности для этой операции выглядит так:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">a</td>
+ <td class="header">b</td>
+ <td class="header">a AND b</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Пример:</p>
+
+<pre class="eval"> 9 (основание 10) = 00000000000000000000000000001001 (основание 2)
+ 14 (основание 10) = 00000000000000000000000000001110 (основание 2)
+ --------------------------------
+14 &amp; 9 (основание 10) = 00000000000000000000000000001000 (осн. 2) = 8 (осн. 10)
+</pre>
+
+<p>Побитовое  AND любого числа x с нулем вернет 0.</p>
+
+<p>Побитовое  AND любого числа x с числом -1 вернет х.</p>
+
+<h3 id="_.28Bitwise_OR.29" name="|_.28Bitwise_OR.29">| (Побитовое OR)</h3>
+
+<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.7em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px;">Производит побитовое ИЛИ над каждой парой битов. Операция <code style="color: rgb(37, 34, 29); font-weight: inherit;">a</code> OR <code style="color: rgb(37, 34, 29); font-weight: inherit;">b</code> веренет 1 если <code style="color: rgb(37, 34, 29); font-weight: inherit;">a</code> или <code style="color: rgb(37, 34, 29); font-weight: inherit;">b</code> равны 1. Таблица истинности для этой операции выглядит так:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">a</td>
+ <td class="header">b</td>
+ <td class="header">a OR b</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ </tbody>
+</table>
+
+<pre class="eval">Пример:
+
+9 (осн. 10) = 00000000000000000000000000001001 (осн. 2)
+14 (осн. 10) = 00000000000000000000000000001110 (осн. 2)
+ --------------------------------
+14 | 9 (осн. 10) = 00000000000000000000000000001111 (осн. 2) = 15 (осн. 10)
+</pre>
+
+<p>Побитовое OR любого числа x c нулем вернет x.</p>
+
+<p>Побитовое OR любого числа x с числом -1 вернет -1.</p>
+
+<h3 id=".5E_.28Bitwise_XOR.29" name=".5E_.28Bitwise_XOR.29">^ (Побитовое XOR)</h3>
+
+<p>Производит побитовое XOR над каждой парой битов. Операция <code>a</code> XOR <code>b</code> вернет 1 если <code>a</code>  и <code>b</code> различны. Таблица истинности для этой операции выглядит так:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">a</td>
+ <td class="header">b</td>
+ <td class="header">a XOR b</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>0</td>
+ <td>0</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Пример:</p>
+
+<pre class="eval"> 9 (осн. 10) = 00000000000000000000000000001001 (осн. 2)
+ 14 (осн. 10) = 00000000000000000000000000001110 (осн. 2)
+ --------------------------------
+14 ^ 9 (осн. 10) = 00000000000000000000000000000111 (осн. 2) = 7 (осн. 10)
+</pre>
+
+<p>Побитовое XOR любого числа x c нулем вернет x.</p>
+
+<p>Побитовое XOR любого числа x c числом -1 вернет ~x.</p>
+
+<h3 id=".7E_.28Bitwise_NOT.29" name=".7E_.28Bitwise_NOT.29">~ (Побитовое NOT)</h3>
+
+<p>Производит операцию NOT над каждым битом. NOT <code>a</code> вернет побитово инвертированное значение (обратный код) операнда. Таблица истинности для этой операции выглядит так:</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td class="header">a</td>
+ <td class="header">NOT a</td>
+ </tr>
+ <tr>
+ <td>0</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td>0</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Пример:</p>
+
+<pre class="eval"> 9 (осн. 10) = 00000000000000000000000000001001 (осн. 2)
+ --------------------------------
+~9 (осн. 10) = 11111111111111111111111111110110 (осн. 2) = -10 (осн. 10)
+</pre>
+
+<p>Побитовое NOT любого числа x вернет -(x + 1). Например, ~5 вернет -6.</p>
+
+<h2 id="Bitwise_shift_operators" name="Bitwise_shift_operators">Побитовые операции сдвига</h2>
+
+<p>Оператор побитового сдвига принимает в себя два операнда: первый - величина, которую сдвигают, второй - число позиций, на которое сдвигаются биты первого операнда. Направление сдвига зависит от используемого оператора.</p>
+
+<p>Операторы сдвига конвертируют операнды в 32-ух разрядные числа с порядком байтов от старшего к младшему, а результат возвращает того же типа, что и левый операнд.</p>
+
+<h3 id=".3C.3C_.28Left_shift.29" name=".3C.3C_.28Left_shift.29">&lt;&lt; (Сдвиг влево)</h3>
+
+<p>Оператор побитового сдвига влево сдвигает первый операнд на заданное число битов влево. Лишние биты отбрасываются.</p>
+
+<p>Например, <code>9 &lt;&lt; 2</code> в результате даст 36:</p>
+
+<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2)
+ --------------------------------
+9 &lt;&lt; 2 (осн. 10): 00000000000000000000000000100100 (осн. 2) = 36 (осн. 10)
+
+
+</pre>
+
+<p>Побитовй сдвиг любого числа <code>x</code> влево на <code>y</code> бит в результате дает  <code>x * 2 ** y</code>.</p>
+
+<h3 id=".3E.3E_.28Sign-propagating_right_shift.29" name=".3E.3E_.28Sign-propagating_right_shift.29">&gt;&gt; (Сдвиг вправо с сохранением знака)</h3>
+
+<p>Оператор побитового сдвига вправо сдвигает первый операнд на заданное число битов вправо. Лишние биты отбрасываются. Слева добавляется заданное число битов равных первому биту исходного числа. Поскольку значение первого бита, определяющего знак числа, останется неизменным, знак получившегося результата будет таким же как у первого аргумента. Отсюда "с сохранением знака" в названи.</p>
+
+<p>Например, <code>9 &gt;&gt; 2</code> в результате даст 2:</p>
+
+<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2)
+ --------------------------------
+9 &gt;&gt; 2 (осн. 10): 00000000000000000000000000000010 (осн. 2) = 2 (осн. 10)
+</pre>
+
+<p>Аналогично, <code>-9 &gt;&gt; 2</code> даст в результате  -3, так как знак сохранен:</p>
+
+<pre class="eval"> -9 (осн. 10): 11111111111111111111111111110111 (осн. 2)
+ --------------------------------
+-9 &gt;&gt; 2 (осн. 10): 11111111111111111111111111111101 (осн. 2) = -3 (осн. 10)
+</pre>
+
+<h3 id=".3E.3E_.28Sign-propagating_right_shift.29" name=".3E.3E_.28Sign-propagating_right_shift.29">&gt;&gt;&gt; (Сдвиг вправо с заполнением нулями)</h3>
+
+<p>Оператор побитового сдвига вправо сдвигает первый операнд на заданное число битов вправо. Лишние биты отбрасываются. Слева добавляется заданное число нулевых битов. Поскольку значение первого бита, определяющего знак числа, становится нулевым, результатом операции всегда будет положительное число.</p>
+
+<p>Для положительных чисел, сдвиг вправо с сохранением знака и сдвиг вправо с заполнением нулями эквивалентны.</p>
+
+<p>Например, <code>9 &gt;&gt;&gt; 2</code> дает в результате 2, как и <code>9 &gt;&gt; 2</code>:</p>
+
+<pre class="eval"> 9 (осн. 10): 00000000000000000000000000001001 (осн. 2)
+ --------------------------------
+9 &gt;&gt;&gt; 2 (осн. 10): 00000000000000000000000000000010 (осн. 2) = 2 (осн. 10)
+</pre>
+
+<p>Важно отметить, что для отрицательных результаты будут разными. Например, <code>-9 &gt;&gt;&gt; 2</code> дает в результате 1073741821, что отличается от результата <code>-9 &gt;&gt; 2</code> (равно -3):</p>
+
+<pre class="eval"> -9 (осн. 10): 11111111111111111111111111110111 (осн. 2)
+ --------------------------------
+-9 &gt;&gt;&gt; 2 (осн. 10): 00111111111111111111111111111101 (осн. 2) = 1073741821 (осн. 10)
+</pre>
+
+<h3 id="Examples" name="Examples">Примеры</h3>
+
+<h4 id="Example_Flags_and_bitmasks" name="Example:_Flags_and_bitmasks">Пример: флаги и битовые маски</h4>
+
+<p>Побитовые логические операторы часто используются для создания, обработки и чтения последовательности флагов, которые осуществляются также, как и двоичные переменные. Переменные могут быть использованы вместо этих последовательностей, но двоичные флаги занимают гораздо меньше памяти (в 32 разрядной ячейке памяти).</p>
+
+<p>Предположим, существует 4 флага:</p>
+
+<ul>
+ <li>флаг A: у нас есть проблема с муравьями</li>
+ <li>флаг B: у нас есть летучая мышь</li>
+ <li>флаг C: у нас есть кошка</li>
+ <li>флаг D: у нас есть утка</li>
+</ul>
+
+<p>Эти флаги представлены последовательностью битов: DCBA. Считается, что флаг <em>установлен (the flag is set)</em>, если его значение равно 1. Флаг <em>сброшен (the flag is cleared)</em>, если его значение равно 0. Предположим, что переменная <code>flags</code> содержит двоичное значение 0101:</p>
+
+<pre class="eval">var flags = 0x5; // двоичное 0101
+</pre>
+
+<p>Из этого значения следует:</p>
+
+<ul>
+ <li>флаг A установлен (у нас есть проблема с муравьями);</li>
+ <li>флаг B сброшен (у нас нет летучей мыши);</li>
+ <li>флаг C установлен  (у нас есть кошка);</li>
+ <li>флаг D сброшен (у нас нет утки);</li>
+</ul>
+
+<p>Так как битовые операторы 32-битные, то 0101 в действительности представлено значением 00000000000000000000000000000101, но ведущие нули могут быть опущены, потому, что не содержат значимой информации.</p>
+
+<p><em>Битовая маска, </em>это последовательность битов, которая позволяет манипулировать и/или считывать значения флагов. Обычно для каждого флага задаётся "примитивная" битовая маска:</p>
+
+<pre class="eval">var FLAG_A = 0x1; // 0001
+var FLAG_B = 0x2; // 0010
+var FLAG_C = 0x4; // 0100
+var FLAG_D = 0x8; // 1000
+</pre>
+
+<p>New bitmasks can be created by using the bitwise logical operators on these primitive bitmasks. For example, the bitmask 1011 can be created by ORing FLAG_A, FLAG_B, and FLAG_D:</p>
+
+<pre class="eval">var mask = FLAG_A | FLAG_B | FLAG_D; // 0001 | 0010 | 1000 =&gt; 1011
+</pre>
+
+<p>Individual flag values can be extracted by ANDing them with a bitmask, where each bit with the value of one will "extract" the corresponding flag. The bitmask <em>masks</em> out the non-relevant flags by ANDing with zeros (hence the term "bitmask"). For example, the bitmask 0100 can be used to see if flag C is set:</p>
+
+<pre class="eval">// if we own a cat
+if (flags &amp; FLAG_C) { // 0101 &amp; 0100 =&gt; 0100 =&gt; true
+ // do stuff
+}
+</pre>
+
+<p>A bitmask with multiple set flags acts like an "either/or". For example, the following two are equivalent:</p>
+
+<pre class="eval">// if we own a bat or we own a cat
+if ((flags &amp; FLAG_B) || (flags &amp; FLAG_C)) { // (0101 &amp; 0010) || (0101 &amp; 0100) =&gt; 0000 || 0100 =&gt; true
+ // do stuff
+}
+</pre>
+
+<pre class="eval">// if we own a bat or cat
+var mask = FLAG_B | FLAG_C; // 0010 | 0100 =&gt; 0110
+if (flags &amp; mask) { // 0101 &amp; 0110 =&gt; 0100 =&gt; true
+ // do stuff
+}
+</pre>
+
+<p>Flags can be set by ORing them with a bitmask, where each bit with the value one will set the corresponding flag, if that flag isn't already set. For example, the bitmask 1010 can be used to set flags C and D:</p>
+
+<pre class="eval">// yes, we own a cat and a duck
+var mask = FLAG_C | FLAG_D; // 0100 | 1000 =&gt; 1100
+flags |= mask; // 0101 | 1100 =&gt; 1101
+</pre>
+
+<p>Flags can be cleared by ANDing them with a bitmask, where each bit with the value zero will clear the corresponding flag, if it isn't already cleared. This bitmask can be created by NOTing primitive bitmasks. For example, the bitmask 1010 can be used to clear flags A and C:</p>
+
+<pre class="eval">// no, we don't neither have an ant problem nor own a cat
+var mask = ~(FLAG_A | FLAG_C); // ~0101 =&gt; 1010
+flags &amp;= mask; // 1101 &amp; 1010 =&gt; 1000
+</pre>
+
+<p>The mask could also have been created with <code>~FLAG_A &amp; ~FLAG_C</code> (De Morgan's law):</p>
+
+<pre class="eval">// no, we don't have an ant problem, and we don't own a cat
+var mask = ~FLAG_A &amp; ~FLAG_C;
+flags &amp;= mask; // 1101 &amp; 1010 =&gt; 1000
+</pre>
+
+<p>Flags can be toggled by XORing them with a bitmask, where each bit with the value one will toggle the corresponding flag. For example, the bitmask 0110 can be used to toggle flags B and C:</p>
+
+<pre class="eval">// if we didn't have a bat, we have one now, and if we did have one, bye-bye bat
+// same thing for cats
+var mask = FLAG_B | FLAG_C;
+flags = flags ^ mask; // 1100 ^ 0110 =&gt; 1010
+</pre>
+
+<p>Finally, the flags can all be flipped with the NOT operator:</p>
+
+<pre class="eval">// entering parallel universe...
+flags = ~flags; // ~1010 =&gt; 0101
+
+</pre>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_NOT">Битовый NOT (<code>~</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_AND">Битовый AND (<code>&amp;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_OR">Битовый OR (<code>|</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_XOR">Битовый XOR (<code>^</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Left_shift">Сдвиг влево (<code>&lt;&lt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Right_shift">Сдвиг вправо (<code>&gt;&gt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Unsigned_right_shift">Беззнаковый сдвиг вправо (<code>&gt;&gt;&gt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_NOT">Битовый NOT (<code>~</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_AND">Битовый AND (<code>&amp;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_OR">Битовый OR (<code>|</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Bitwise_XOR">Битовый XOR (<code>^</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Left_shift">Сдвиг влево (<code>&lt;&lt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Right_shift">Сдвиг вправо (<code>&gt;&gt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ <tr>
+ <td><a href="#Unsigned_right_shift">Беззнаковый сдвиг вправо (<code>&gt;&gt;&gt;</code>)</a></td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8" title="http://ru.wikipedia.org/wiki/Битовые_операции">Wikipedia Битовые операции</a></li>
+ <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)" title="http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа)">Wikipedia Дополнительный код</a></li>
+ <li><a class="external" href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4_(%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)" title="http://ru.wikipedia.org/wiki/Обратный_код_(представление_числа)">Wikipedia Обратный код</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators">Логические операции</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/class/index.html b/files/ru/web/javascript/reference/operators/class/index.html
new file mode 100644
index 0000000000..ad22c1abc1
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/class/index.html
@@ -0,0 +1,152 @@
+---
+title: class expression
+slug: Web/JavaScript/Reference/Operators/class
+translation_of: Web/JavaScript/Reference/Operators/class
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<div></div>
+
+<p><strong>Class expression</strong> это способ определения класса в ECMAScript 2015 (ES6). Схожий с <a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">function expressions</a>, class expressions может быть именованным либо не иметь имени. Если он именованный, то его имя доступно только внутри класса. JavaScript классы используют прототипно-ориентированние наследование.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">var MyClass = class <em>[className]</em> [extends] {
+  // тело класса
+};</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Class expression имеет схожий сиснтаксис с {{jsxref("Statements/class", "class declaration (statement)", "", "true")}}. Однако в class expression можно опустить имя класса ("binding identifier"), что не допустимо с {{jsxref("Statements/class", "class declaration", "", "true")}}. Также class expression позволяет повторно объявить уже существующий класс и это <strong>не приведёт к ошибке типа</strong>, как при использовании {{jsxref("Statements/class", "class declaration", "", "true")}}. Свойство конструктора является опциональным. Результатом вызова оператора {{jsxref("Operators/typeof", "typeof")}} на классах, сгенерированных при помощи class expression, всегда будет "function".</p>
+
+<p>Так же, как и при использовании class declaration, тело класса у class expression будет исполняться в {{jsxref("Strict_mode", "строгом режиме", "", 1)}}.</p>
+
+<pre class="brush: js notranslate">'use strict';
+var Foo = class {}; // свойство конструктора опционально
+var Foo = class {}; // повторное объявление разрешено
+
+typeof Foo; // возвращает "function"
+typeof class {}; // возвращает "function"
+
+Foo instanceof Object; // true
+Foo instanceof Function; // true
+class Foo {}; // Throws TypeError, doesn't allow re-declaration
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_class_expression">Простой class expression</h3>
+
+<p>Простой анонимный class expression, на который можно сослаться с помощью переменной "Foo".</p>
+
+<pre class="brush: js notranslate">var Foo = class {
+ constructor() {}
+ bar() {
+ return "Hello World!";
+ }
+};
+
+var instance = new Foo();
+instance.bar(); // "Hello World!"
+Foo.name; // "Foo"
+</pre>
+
+<h3 id="Именованный_class_expression">Именованный class expression</h3>
+
+<p>Если вы хотите сослаться на конкретный класс внутри тела класса, вы можете создать именованный class expression. Это имя будет доступно только внутри области видимости самого class expression.</p>
+
+<pre class="brush: js notranslate">var Foo = class NamedFoo {
+ constructor() {}
+ whoIsThere() {
+ return NamedFoo.name;
+ }
+}
+var bar = new Foo();
+bar.whoIsThere(); // "NamedFoo"
+NamedFoo.name; // ReferenceError: NamedFoo is not defined
+Foo.name; // "NamedFoo"
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первоначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_брузерами">Поддержка брузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoDesktop(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoMobile(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/function"><code>function</code> expression</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> statement</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/decrement/index.html b/files/ru/web/javascript/reference/operators/decrement/index.html
new file mode 100644
index 0000000000..722d4a5889
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/decrement/index.html
@@ -0,0 +1,80 @@
+---
+title: Декремент (--)
+slug: Web/JavaScript/Reference/Operators/Decrement
+tags:
+ - Декремент
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/Decrement
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор декремента (<code>--</code>) уменьшает (вычитает единицу) свой операнд и возвращает значение.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-decrement.html")}}</div>
+
+<div></div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><strong>Operator:</strong> <var>x</var>-- or --<var>x</var>
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Если используется постфикс, с оператором после операнда (например, x--), оператор декремента уменьшает и возвращает значение перед уменьшением.</p>
+
+<p>Если используется префикс, с оператором перед операндом (например, --x), оператор декремента уменьшает и возвращает значение после уменьшения.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Постфиксный_декремент">Постфиксный декремент</h3>
+
+<pre class="brush: js notranslate">let x = 3;
+y = x--;
+
+// y = 3
+// x = 2
+</pre>
+
+<h3 id="Префиксный_декремент">Префиксный декремент</h3>
+
+<pre class="brush: js notranslate">let a = 2;
+b = --a;
+
+// a = 1
+// b = 1
+</pre>
+
+<h2 id="Характеристики">Характеристики</h2>
+
+<p>Спецификация</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-postfix-decrement-operator', 'Decrement operator')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузером">Совместимость с браузером</h2>
+
+
+
+<p>{{Compat("javascript.operators.decrement")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Addition">Addition operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Subtraction">Subtraction operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Division">Division operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Multiplication">Multiplication operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Remainder">Remainder operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Exponentiation">Exponentiation operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Increment">Increment operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_negation">Unary negation operator</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus">Unary plus operator</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/delete/index.html b/files/ru/web/javascript/reference/operators/delete/index.html
new file mode 100644
index 0000000000..2edf33b67e
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/delete/index.html
@@ -0,0 +1,127 @@
+---
+title: delete
+slug: Web/JavaScript/Reference/Operators/delete
+translation_of: Web/JavaScript/Reference/Operators/delete
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<h2 id="Summary" name="Summary">Аннотация</h2>
+
+<p>Оператор <code>delete</code> удаляет свойство из объекта.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th class="header" colspan="2" scope="row">Оператор</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Реализован в:</td>
+ <td>JavaScript 1.2</td>
+ </tr>
+ <tr>
+ <td>Версия ECMAScript:</td>
+ <td>ECMA-262 1-ый выпуск</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<p><code>delete <em>выражение</em></code></p>
+
+<p>где результат вычисления <em>выражения</em> должен быть ссылкой на свойство (объекта), например:</p>
+
+<pre class="syntaxbox">delete <em>object.property</em>
+delete <em>object</em>['<em>property</em>']
+delete <em>object</em>[<em>index</em>]
+delete <em>property</em> // удаляет свойства глобального объекта, или,
+ // используя инструкцию <em>with</em>, свойства объекта, на который ссылается инструкция
+</pre>
+
+<p>Если результат вычисления <em>выражения</em> не является свойством (объекта), <code>delete</code> ничего не делает.</p>
+
+<h3 id="Parameters" name="Parameters">Параметры</h3>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>Имя объекта или выражение, результатом вычисления которого является объект.</dd>
+ <dt><code>property</code></dt>
+ <dd>Удаляемое свойство.</dd>
+ <dt><code>index</code></dt>
+ <dd>Целое число, представляющее собой индекс массива, который должен быть удален.</dd>
+</dl>
+
+<h3 id="Returns" name="Returns">Возвращаемое значение</h3>
+
+<p>Возвращает false, только если свойство существует в самом объекте, а не в его прототипах, и не может быть удалено. Во всех остальных случаях возвращает true.</p>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если оператор <code>delete</code> успешно выполняет удаление, он полностью удаляет свойство из объекта. Однако, если свойство с таким же именем существует в цепочке прототипов, объект унаследует это свойство из прототипа.</p>
+
+<p><code>delete</code> эффективен только применительно к свойствам объектов. Он не оказывает никакого влияния на имена переменных и функций.<br>
+ Присвоение значения свойству без указания объекта (без оператора var) иногда неверно характеризуется, как глобальная переменная, (например <code>x = 5</code>). На самом деле происходит присвоение значения свойству глобального объекта.</p>
+
+<p><code>delete</code> не может удалить определенные свойства встроенных объектов (таких как Object, Array, Math и так далее). В спецификации ECMA-262 они обозначены как <em>DontDelete.</em></p>
+
+<pre class="brush: js">x = 42; // создает свойство x в глобальном объекте
+var y = 43; // объявляет новую переменную, y
+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 (свойства, определенные пользователем могут быть удалены)
+
+with(myobj) {
+ delete k; // возвращает true (эквивалентно delete myobj.k)
+}
+
+delete myobj; // возвращает true (myobj это свойство глобального объекта, не переменная, поэтому может быть удалено)</pre>
+
+<p>Если объект наследует свойство от прототипа и не имеет собственного свойства с таким же именем, свойство не может быть удалено при обращении через этот объект. Однако можно удалить это свойство напрямую в прототипе.</p>
+
+<pre class="brush: js">function Foo(){}
+Foo.prototype.bar = 42;
+var foo = new Foo();
+delete foo.bar; // возвращает true, но безрезультатно, так как bar - наследуемое свойство
+alert(foo.bar); // выводит 42, свойство все еще наследуется
+delete Foo.prototype.bar; // удаляет свойство из прототипа
+alert(foo.bar); // выводит "undefined", свойство больше не наследуется</pre>
+
+<h3 id="Deleting_array_elements" name="Deleting_array_elements">Удаление элементов массива</h3>
+
+<p>Когда с помощью оператора delete удаляется элемент массива, длина массива не меняется. Например, если Вы удалите a{{ mediawiki.external(3) }}, a{{ mediawiki.external(4) }} по прежнему a{{ mediawiki.external(4) }}, а a{{ mediawiki.external(3) }} не определено. Так будет даже если Вы удалите последний элемент массива (<code>delete a{{ mediawiki.external('a.length-1') }}</code>).</p>
+
+<p>Когда оператор <code>delete</code> удаляет элемент массива, этот элемент больше не существует в массиве. В следующем примере, trees{{ mediawiki.external(3) }} удаляется с помощью <code>delete</code>.</p>
+
+<pre class="brush: js">var trees = ["redwood","bay","cedar","oak","maple"];
+
+delete trees[3];
+if (3 in trees) {
+ // этот участок кода не выполнится
+}</pre>
+
+<p>Если Вы хотите, чтобы элемент массива существовал, но имел значение undefined, используйте значение <code>undefined</code> вместо оператора <code>delete</code>. В следующем примере, trees{{ mediawiki.external(3) }} принимает значение undefined, но элемент массива все еще существует:</p>
+
+<pre class="brush: js">var trees = ["redwood","bay","cedar","oak","maple"];
+trees[3]=undefined;
+if (3 in trees) {
+ // этот участок кода выполнится
+}</pre>
+
+<h2 id="Проблема_кроссбраузерности">Проблема кроссбраузерности</h2>
+
+<p>Несмотря на то, что стандарт ECMAScript оставляет порядок итерации по свойствам объектов на усмотрение реализующей стороны, может оказаться так, что все основные браузеры поддерживают порядок итерации, основанный на принципе "свойство добавленное в объект раньше идет раньше" (по крайней мере для свойств не находящихся в прототипе). Однако, в случае с Internet Explorer, когда кто-нибудь использует <code>delete</code> с каким-либо свойством, это приводит к некоторым неожиданным результатам, заставляя другие браузеры отказаться от использования простых объектов, таких как литералы объектов, в качестве ассоциативных массивов. В Internet Explorer, когда значение свойства установлено в undefined, после удаления этого свойства, если кто-нибудь позже добавит свойство с таким же именем, оно окажется в своей <em>старой</em> позиции, а не в конце итерационной последовательности, как ожидается.</p>
+
+<p>Поэтому, если Вы хотите симулировать упорядоченный ассоциативный массив в кроссбраузерной среде, вам придется либо использовать два отдельных массива (один для ключей и один для значений), либо построить массив из объектов с одним свойством и так далее.</p>
+
+<h2 id="Specification" name="Specification">Внешние ссылки</h2>
+
+<ul>
+ <li>Глубокий <a href="http://perfectionkills.com/understanding-delete/">анализ оператора delete</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/destructuring_assignment/index.html b/files/ru/web/javascript/reference/operators/destructuring_assignment/index.html
new file mode 100644
index 0000000000..29cdd9cd7f
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/destructuring_assignment/index.html
@@ -0,0 +1,339 @@
+---
+title: Деструктурирующее присваивание
+slug: Web/JavaScript/Reference/Operators/Destructuring_assignment
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment
+---
+<p>Синтаксис <strong>деструктурирующего присваивания</strong> в выражениях JavaScript позволяет извлекать данные из массивов или объектов при помощи синтаксиса, подобного объявлению массива или литералов в объекте.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush:js">var a, b, rest;
+[a, b] = [1, 2];
+console.log(a); // 1
+console.log(b); // 2
+
+[a, b, ...rest] = [1, 2, 3, 4, 5];
+console.log(a); // 1
+console.log(b); // 2
+console.log(rest); // [3, 4, 5]
+
+({a, b} = {a:1, b:2});
+console.log(a); // 1
+console.log(b); // 2
+
+({a, b, ...rest} = {a:1, b:2, c:3, d:4});
+// ES2016 - ещё не реализовано Firefox 47a01
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Выражения объявления объектов или массивов предоставляют простой способ создания пакета однородных данных. При создании такого пакета вы получаете возможность использовать его любым доступным образом. Также вы можете возвращать его в функциях.</p>
+
+<p>Одной из ключевых возможностей использования деструктурирующего присваивания является чтение структуры данных одним оператором, хотя помимо этого вы можете найти множество других применений в приведённых ниже примерах.</p>
+
+<p>Данная возможность подобна таковой, присутствующей в языках Perl и Python.</p>
+
+<h2 id="Разбор_массивов">Разбор массивов</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: js">var foo = ["one", "two", "three"];
+
+// без деструктурирования
+var one = foo[0];
+var two = foo[1];
+var three = foo[2];
+
+// с деструктурированием
+var [one, two, three] = foo;</pre>
+
+<h3 id="Обмен_значений_переменных">Обмен значений переменных</h3>
+
+<p>После выполнения фрагмента кода, значение <var>b</var> будет 1, <var>a</var> будет 3. Без деструктурирующего присваивания, для обмена значений требуется дополнительная временная переменная (или что-то наподобие <a class="external" href="http://en.wikipedia.org/wiki/XOR_swap">XOR-обмена</a>).</p>
+
+<pre class="brush:js">var a = 1;
+var b = 3;
+
+[a, b] = [b, a];</pre>
+
+<h3 id="Возврат_нескольких_значений">Возврат нескольких значений</h3>
+
+<p>Благодаря деструктурирующему присваиванию, функции могут возвращать несколько значений. Хотя всегда можно было возвращать массивы в функциях, оно предоставляет гибкость:</p>
+
+<pre class="brush:js">function f() {
+ return [1, 2];
+}
+</pre>
+
+<p>Как вы видите, возвращаемые результаты имеют вид массива, значения которого заключены в квадратные скобки. Вы можете возвращать неограниченное количество результатов таким образом. В следующем примере, <code>f()</code> возвращает <code>[1, 2]</code> как результат:</p>
+
+<pre class="brush:js">var a, b;
+[a, b] = f();
+console.log("A is " + a + " B is " + b);
+</pre>
+
+<p>Оператор <code>[a, b] = f()</code> присваивает результаты функции переменным в квадратных скобках: <var>a</var> будет присвоено 1, <var>b</var> будет присвоено 2.</p>
+
+<p>Вы также можете использовать результат функции в виде массива:</p>
+
+<pre class="brush:js">var a = f();
+console.log("A is " + a);
+</pre>
+
+<p>В данном случае <var>a</var> будет массивом с элементами 1 и 2.</p>
+
+<h3 id="Игнорирование_некоторых_значений">Игнорирование некоторых значений</h3>
+
+<p>Вы также можете проигнорировать не нужные значения:</p>
+
+<pre class="brush:js">function f() {
+ return [1, 2, 3];
+}
+
+var [a, , b] = f();
+console.log("A is " + a + " B is " + b);
+</pre>
+
+<p>После выполнения кода, a будет 1, b будет 3. Значение 2 игнорируется. Таким же образом вы можете игнорировать любые (или все) значения. Например:</p>
+
+<pre class="brush:js">[,,] = f();
+</pre>
+
+<h3 id="Получение_значений_из_результата_регулярного_выражения">Получение значений из результата регулярного выражения</h3>
+
+<p>Когда метод <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec">exec()</a></code> регулярного выражения находит совпадение, он возвращает массив, содержащий первый совпадающий фрагмент строки и далее группы, определённые в регулярном выражении. Деструктурирующее присваивание упрощает получение данных из этих групп, игнорируя первый фрагмент:</p>
+
+<pre class="brush:js">var url = "https://developer.mozilla.org/en-US/Web/JavaScript";
+
+var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+var [, protocol, fullhost, fullpath] = parsedURL;
+
+console.log(protocol); // выведет "https"
+</pre>
+
+<h2 id="Разбор_объектов">Разбор объектов</h2>
+
+<h3 id="Простой_пример_2">Простой пример</h3>
+
+<pre class="brush: js">var o = {p: 42, q: true};
+var {p, q} = o;
+
+console.log(p); // 42
+console.log(q); // true
+
+// Объявление новых переменных
+var {p: foo, q: bar} = o;
+
+console.log(foo); // 42
+console.log(bar); // true
+</pre>
+
+<h3 id="Загрузка_модулей">Загрузка модулей</h3>
+
+<p>Деструктурирующее присваивание помогает загружать специфичные наборы модулей, как в <a href="/en-US/Add-ons/SDK">Add-on SDK</a>:</p>
+
+<pre class="brush: js">const { Loader, main } = require('toolkit/loader');
+</pre>
+
+<h3 id="Вложенный_объект_и_разбор_массива">Вложенный объект и разбор массива</h3>
+
+<pre class="brush:js">var metadata = {
+    title: "Scratchpad",
+    translations: [
+       {
+        locale: "de",
+        localization_tags: [ ],
+        last_edit: "2014-04-14T08:43:37",
+        url: "/de/docs/Tools/Scratchpad",
+        title: "JavaScript-Umgebung"
+       }
+    ],
+    url: "/en-US/docs/Tools/Scratchpad"
+};
+
+var { title: englishTitle, translations: [{ title: localeTitle }] } = metadata;
+
+console.log(englishTitle); // "Scratchpad"
+console.log(localeTitle);  // "JavaScript-Umgebung"</pre>
+
+<h3 id="Деструктурирование_во_время_обхода">Деструктурирование во время обхода</h3>
+
+<pre class="brush: js">var people = [
+  {
+    name: "Mike Smith",
+    family: {
+      mother: "Jane Smith",
+      father: "Harry Smith",
+      sister: "Samantha Smith"
+    },
+    age: 35
+  },
+  {
+    name: "Tom Jones",
+    family: {
+      mother: "Norah Jones",
+      father: "Richard Jones",
+      brother: "Howard Jones"
+    },
+    age: 25
+  }
+];
+
+for (var {name: n, family: { father: f } } of people) {
+ console.log("Name: " + n + ", Father: " + f);
+}
+
+// "Name: Mike Smith, Father: Harry Smith"
+// "Name: Tom Jones, Father: Richard Jones"</pre>
+
+<h3 id="Получение_полей_объекта-параметра_функции">Получение полей объекта-параметра функции</h3>
+
+<pre class="brush:js">function userId({id}) {
+ return id;
+}
+
+function whois({displayName, fullName: {firstName: name}}){
+ console.log(displayName + " is " + name);
+}
+
+var user = {
+ id: 42,
+ displayName: "jdoe",
+ fullName: {
+ firstName: "John",
+ lastName: "Doe"
+ }
+};
+
+console.log("userId: " + userId(user)); // "userId: 42"
+whois(user); // "jdoe is John"</pre>
+
+<p>В приведённом примере извлекаются поля <code>id</code>, <code>displayName</code> и<span class="Apple-converted-space"> </span><code>firstName</code><span class="Apple-converted-space"> </span>из объекта пользователь.</p>
+
+<h3 id="Деструктурирование_вычисляемых_имён_свойств">Деструктурирование вычисляемых имён свойств</h3>
+
+<p>Вычисляемые имена свойств, например, <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names">литералы объектов</a>, могут использоваться при деструктурирующем присваивании:</p>
+
+<pre class="brush: js">let key = "z";
+let { [key]: foo } = { z: "bar" };
+
+console.log(foo); // "bar"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-destructuring-assignment', 'Деструктурирующее присваивание')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Edge</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td>{{ CompatGeckoDesktop("1.8.1") }}</td>
+ <td>14</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>7.1</td>
+ </tr>
+ <tr>
+ <td>Вычисляемые имена свойств</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td>{{ CompatGeckoDesktop("34") }}</td>
+ <td>14</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ <tr>
+ <td>Оператор spread</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td>{{ CompatGeckoDesktop("34") }}</td>
+ <td>12<sup>[1]</sup></td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatGeckoMobile("1.0") }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>iOS 8</td>
+ </tr>
+ <tr>
+ <td>Вычисляемые имена свойств</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatGeckoMobile("34") }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ <td>{{ CompatNo() }}</td>
+ </tr>
+ <tr>
+ <td>Оператор spread</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatGeckoMobile("34") }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ <td>{{ CompatUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] Необходимо включить "Enable experimental Javascript features" в `about:flags`</p>
+
+<h3 id="See_also" name="See_also">Смотрите также</h3>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Операторы присваивания</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/expression_closures/index.html b/files/ru/web/javascript/reference/operators/expression_closures/index.html
new file mode 100644
index 0000000000..9c8f613699
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/expression_closures/index.html
@@ -0,0 +1,118 @@
+---
+title: Expression closures
+slug: Web/JavaScript/Reference/Operators/Expression_closures
+tags:
+ - Нестандартная
+ - Функции
+translation_of: Archive/Web/JavaScript/Expression_closures
+---
+<div class="warning"><strong>Не является стандартом. Не используйте данный синтаксис!</strong><br>
+Синтаксис замкнутого выражения является устаревшей возможностью SpiderMonkey и <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1083458">будет удален</a>. Используйте вместо него <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочные функции</a>.</div>
+
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Замкнутые выражения – это синтаксис для удобной записи коротких и простых функций.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]])
+ <em>expression</em>
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции. Может быть пропущено, в таком случае функция будет являться <em>анонимной</em>. Имя функции доступно только в теле функции.</dd>
+ <dt><code>paramN</code></dt>
+ <dd>Имя аргумента, передаваемого функции. Всего может быть передано вплоть до 255 аргументов.</dd>
+ <dt><code>expression</code></dt>
+ <dd>Выражение, содержащее тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот функционал – ничто иное как короткая нотация для записи простых функций. Он призван добавить в язык нечто похожее на <a class="external" href="https://ru.wikipedia.org/wiki/%D0%9B%D1%8F%D0%BC%D0%B1%D0%B4%D0%B0-%D0%B8%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5#.D0.92_.D1.8F.D0.B7.D1.8B.D0.BA.D0.B0.D1.85_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F">Лямбда-исчисления</a>.</p>
+
+<p>JavaScript 1.7 и старше:</p>
+
+<pre class="brush: js">function(x) { return x * x; }</pre>
+
+<p>JavaScript 1.8:</p>
+
+<pre class="brush: js">function(x) x * x</pre>
+
+<p>Такой синтаксис позволяет отбросить фигурные скобки и оператор <code>return</code>. Данный подход, кроме краткости записи, иных преимуществ не имеет.</p>
+
+<h2 id="Примеры_использования">Примеры использования</h2>
+
+<p>Короткая запись для привязки слушателей событий:</p>
+
+<pre class="brush: js"> document.addEventListener("click", function() false, true);
+</pre>
+
+<p>Использование такой записи для работы с функциями массивов из JavaScript 1.6:</p>
+
+<pre class="brush: js">elems.some(function(elem) elem.type == "text");
+</pre>
+
+<h2 id="Таблица_совместимости">Таблица совместимости</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="sect1"> </h2>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и области видимости")}}</li>
+ <li>{{jsxref("Function", "Функция")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/function/index.html b/files/ru/web/javascript/reference/operators/function/index.html
new file mode 100644
index 0000000000..aefe1d0c2b
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/function/index.html
@@ -0,0 +1,143 @@
+---
+title: Функциональное выражение
+slug: Web/JavaScript/Reference/Operators/function
+tags:
+ - JavaScript
+ - Оператор
+ - Функция
+translation_of: Web/JavaScript/Reference/Operators/function
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Ключевое слово <strong><code>function</code></strong> может использоваться для определения функции внутри выражения.</p>
+
+<p>Вы можете также определять функции используя конструктор {{jsxref("Function")}} и {{jsxref("Statements/function", "объявление функции")}}.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">var myFunction = function [<em>name</em>]([<em>param1</em>[, <em>param2[</em>, ..., <em>paramN</em>]]]) {
+ <em>statements</em>
+};</pre>
+
+<p>С версии ES2015 можно также использовать <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочные функции</a>.</p>
+
+<h3 id="Parameters" name="Parameters"><a id="Параметры" name="Параметры">Параметры</a></h3>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции. Может быть опущено, в таком случае функция является <em>анонимной</em>. Имя функции является локальным для её тела.</dd>
+ <dt><code>paramN</code></dt>
+ <dd>Имя аргумента, передаваемого в функцию.</dd>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции, составляющие тело функции.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Функциональное выражение и <a href="/ru/docs/Web/JavaScript/Reference/Statements/function">объявление функции</a> очень похожи и имеют почти одинаковый синтаксис. Главным отличием между ними является <em>имя функции,</em> которое в случае функциональных выражений может быть опущено для создания <em>анонимных</em> функций. Функциональное выражение может быть использовано для создания самовызывающейся функции {{Glossary("IIFE")}} (Immediately Invoked Function Expression), которая исполняется сразу же после того, как она была определена. Более подробная информация изложена в разделе о <a href="/ru/docs/Web/JavaScript/Reference/Functions">функциях</a>.</p>
+
+<h3 id="Поднятие_функциональных_выражений_2"><a id="Поднятие_функциональных_выражений" name="Поднятие_функциональных_выражений">Поднятие функциональных выражений</a></h3>
+
+<p>Функциональные выражения в JavaScript не {{Glossary("поднятие", "поднимаются (hoisting)")}}, в отличие от {{jsxref("Statements/function", "объявленных функций", "#Поднимание_объявленной_функции")}}. Вы не можете использовать функциональные выражения прежде, чем вы их определили.</p>
+
+<pre class="brush: js">console.log(notHoisted) // undefined
+//Хотя объявленная переменная и поднимается, определение переменной происходит позже
+notHoisted(); // TypeError: notHoisted is not a function
+
+var notHoisted = function() {
+ console.log('bar');
+};</pre>
+
+<h3 id="Именованное_функциональное_выражение"><a id="№Именованное функциональное выражение" name="№Именованное функциональное выражение">Именованное функциональное выражение</a></h3>
+
+<p>Если вы хотите сослаться на текущую функцию внутри тела этой функции, вам необходимо создать именованое функциональное выражение. Данное имя будет локальным только для тела функции (её области видимости). Кроме того, это позволяет избежать использования нестандартного свойства {{jsxref("arguments.callee")}}.</p>
+
+<pre class="brush: js">var math = {
+ 'factit': function factorial(n) {
+ console.log(n);
+ if (n &lt;= 1) {
+ return 1;
+ }
+ return n * factorial(n - 1);
+ }
+};
+
+math.factit(3) //3;2;1;
+</pre>
+
+<p>Переменная, которой присвоено функциональное выражение, будет иметь свойство <code>name</code>, содержащее имя функции. Оно не изменится при переприсваивании другой переменной. Для анонимной функции, значением свойства <code>name</code> будет имя переменной (неявное имя). Если же имя задано, то будет использовано имя функции (явное имя). Это же касается стрелочных функций (в их случае там будет записано имя переменной, т.к. они всегда анонимные).</p>
+
+<pre class="brush: js">var foo = function() {}
+foo.name // "foo"
+
+var foo2 = foo
+foo2.name // "foo"
+
+var bar = function baz() {}
+bar.name // "baz"
+
+console.log(foo === foo2); // true
+console.log(typeof baz); // undefined
+console.log(bar === baz); // false (errors because baz == undefined)</pre>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Следующий пример демонстрирует создание безымянной (анонимной) функции и присвоение её переменной <code>x</code>. Функция возвращает квадрат переданного значения:</p>
+
+<pre class="brush: js">var x = function (y) {
+ return y * y;
+};
+</pre>
+
+<p>Преимущественно анонимные функции используются как {{Glossary("функция обратного вызова", "функции обратного вызова", 1)}}.</p>
+
+<pre class="brush: js">button.addEventListener('click', function(event) {
+ console.log('button is clicked!')
+});</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-13', 'Function definition')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-13', 'Function definition')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.5.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.operators.function")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Functions_and_function_scope", "Functions and function scope")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Statements/function*", "function* statement")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/function_star_/index.html b/files/ru/web/javascript/reference/operators/function_star_/index.html
new file mode 100644
index 0000000000..c924d55dfe
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/function_star_/index.html
@@ -0,0 +1,149 @@
+---
+title: function* expression
+slug: Web/JavaScript/Reference/Operators/function*
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Итератор
+ - Оператор
+ - Функция
+translation_of: Web/JavaScript/Reference/Operators/function*
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Ключевое слово <strong><code>function*</code></strong> может использоваться для объявления функции-генератора внутри выражения.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">function* [<em>имя</em>]([параметр<em>1</em>[, <em>параметр2[</em>, ..., <em>параметрN</em>]]]) {
+ <em>инструкции</em>
+}</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>имя</code></dt>
+ <dd>Имя функции. Может быть опущено, в этом случае функция будет <em>анонимной</em>. Имя локально для тела функции.</dd>
+ <dt><code>параметрN</code></dt>
+ <dd>Имя аргумента, передаваемого в функцию. Фунция может иметь до 255 аргументов.</dd>
+ <dt><code>инструкции</code></dt>
+ <dd>Инструкции, составляющие тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Выражение<code> function*</code>  очень похоже на обявление {{jsxref('Statements/function*', 'function*')}}, и имеет почти такой же синтаксис. Основная разница между выражением <code>function*</code> и объявлением <code>function*</code> – в <em>имени функции,</em> которое может быть опущено в выражениях <code>function*</code> для создания <em>анонимных</em> функций. Смотрите главу о <a href="/ru/docs/Web/JavaScript/Reference/Functions">функциях</a> для получения более подробной информации.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>В следующем примере определяется безымянная функция-генератор и присваивается переменной <code>x</code>. Функция возвращает квадрат своего аргумента:</p>
+
+<pre class="brush: js">var x = function*(y) {
+ yield y * y;
+};
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#', 'function*')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#', 'function*')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Характеристика</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("26.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td><code>yield*</code></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("27.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Характеристика</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("26.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td><code>yield*</code></td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("27.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function*", "function* statement")}}</li>
+ <li>Объект {{jsxref("GeneratorFunction")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Iteration_protocols#Протокол_Итератор">Протоколы перебора: Итератор</a></li>
+ <li>{{jsxref("Operators/yield", "yield")}}</li>
+ <li>{{jsxref("Operators/yield*", "yield*")}}</li>
+ <li>Объект {{jsxref("Function")}}</li>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Functions", "Функции")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/generator_comprehensions/index.html b/files/ru/web/javascript/reference/operators/generator_comprehensions/index.html
new file mode 100644
index 0000000000..fb04526d8a
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/generator_comprehensions/index.html
@@ -0,0 +1,229 @@
+---
+title: Упрощенный синтаксис создания функций-генераторов
+slug: Web/JavaScript/Reference/Operators/Generator_comprehensions
+tags:
+ - Итераторы
+translation_of: Archive/Web/JavaScript/Generator_comprehensions
+---
+<div class="warning"><strong>Не в стандарте. Не используйте!</strong><br>
+Включения генераторов - нестандартная возможность, и вряд ли когда-либо появится в ECMAScript. В будущем попробуйте использовать {{jsxref("Statements/function*", "generator", "", 1)}}.</div>
+
+<div>{{jsSidebar("Operators")}}</div>
+
+<div>Синтаксис <strong>включений генераторов </strong>- это выражение, которое позволяет быстро создать новую функцию-генератор из существующего итератора. Включения присутствуют во множестве языков программирования.</div>
+
+<div> </div>
+
+<div><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Generator_comprehensions#Differences_to_the_older_JS1.7.2FJS1.8_comprehensions">Ниже</a> показаны отличия от старого синтаксиса генераторных выражений в SpiderMonkey, основанных на предложениях к стандарту ECMAScript 4.</div>
+
+<div> </div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">(for (x of iterable) x)
+(for (x of iterable) if (condition) x)
+(for (x of iterable) for (y of iterable) x + y)
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Внутри включений генераторов допустимы два типа компонентов:</p>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}} и</li>
+ <li>{{jsxref("Statements/if...else", "if")}}</li>
+</ul>
+
+<p>Конструкция <code>for-of</code> всегда идёт первой. Таких конструкций может быть несколько.</p>
+
+<p>Существенный недостаток {{jsxref("Operators/Array_comprehensions","включений массивов","","true")}} - это то, что они создают полносью новый массив в памяти. Даже когда исходный массив небольшой, накладные расходы получаются весьма заметными, а уж когда входные данные - это большой массив или дорогой (или бесконечный) генератор, создание нового массива может быть трудной задачей.</p>
+
+<p>Генераторы позволяют выполнять ленивые вычисления последовательностей, то есть рассчитывать данные только тогда, когда они нужны. Синтаксисы включений генераторов и включений массивов практически аналогичны — первые используют () вместо [] — но вместо массива они создают генератор, который может выполняться лениво. Включения генераторов можно считать просто более кратким способом создания генераторов.</p>
+
+<p>Предположим, у нас есть итератор <code>it</code>, который итерирует по длинной последовательности чисел. Мы хотим создать новый итератор, который будет итерировать по тем же числам, умноженным на два. Включение массивов создало бы в памяти новый массив с умноженными числами:</p>
+
+<pre class="brush: js">var doubles = [for (i in it) i * 2];
+</pre>
+
+<p>А включение генераторов создало бы новый итератор, который высчитывал бы  следующее умноженное значение, когда оно нужно:</p>
+
+<pre class="brush: js">var it2 = (for (i in it) i * 2);
+console.log(it2.next()); // Первое значение из it, умноженное на два
+console.log(it2.next()); // Второе значение из it, умноженное на два
+</pre>
+
+<p>Когда включение генераторов передаётся как аргумент функции, можно обойтись без скобок вокруг включения:</p>
+
+<pre class="brush: js">var result = doSomething(for (i in it) i * 2);
+</pre>
+
+<p>Эти два примера отличаются тем, что используя включения генераторов, нам нужно пройтись по структуре объекта только однажды, а используя включения массивов - дважды: сначала при создании включения, затем, при самой итерации.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простое_включение_генераторов">Простое включение генераторов</h3>
+
+<pre class="brush:js">(for (i of [ 1, 2, 3 ]) i*i );
+// Функция-генератор, которая отдаёт 1, 4, 9 и так далее
+
+[...(for (i of [ 1, 2, 3 ]) i*i )];
+// [1, 4, 9]
+
+var abc = [ "A", "B", "C" ];
+(for (letters of abc) letters.toLowerCase());
+// Функция-генератор, которая отдаёт 'a', 'b' и 'c'
+</pre>
+
+<h3 id="Включение_генераторов_с_условием">Включение генераторов с условием</h3>
+
+<pre class="brush: js">var years = [ 1954, 1974, 1990, 2006, 2010, 2014 ];
+
+(for (year of years) if (year &gt; 2000) year);
+// функция-генератор, которая отдаёт 2006, 2010 и 2014
+
+(for (year of years) if (year &gt; 2000) if(year &lt; 2010) year);
+// функция-генератор, которая отдаёт 2006, как и функция ниже:
+
+(for (year of years) if (year &gt; 2000 &amp;&amp; year &lt; 2010) year);
+// функция-генератор, которая отдаёт 2006
+</pre>
+
+<h3 id="Включение_генератора_в_сравнении_с_функцией-генератором">Включение генератора в сравнении с функцией-генератором</h3>
+
+<p>Будет проще понять синтаксис включений генераторов, если сравнить его с функцией-генератором.</p>
+
+<p>Пример 1: Простой генератор.</p>
+
+<pre class="brush: js">var numbers = [ 1, 2, 3 ];
+
+// Функция-генератор
+(function*() {
+ for (let i of numbers) {
+ yield i * i;
+ }
+})()
+
+// Включение генератора
+(for (i of numbers) i*i );
+
+// Результат: в обоих случаях получается генератор, который отдаёт [ 1, 4, 9 ]
+</pre>
+
+<p>Пример 2: Использование <code>if</code> в генераторе.</p>
+
+<pre class="brush: js">var numbers = [ 1, 2, 3 ];
+
+// Функция-генератор
+(function*() {
+ for (let i of numbers) {
+ if (i &lt; 3) {
+ yield i * 1;
+ }
+ }
+})()
+
+// Включение генератора
+(for (i of numbers) if (i &lt; 3) i);
+
+// Результат: в обоих случаях получается генератор, который отдаёт [ 1, 2 ]</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<p>Включения генераторов изначально входили в черновик ECMAScript 6, но их убрали в ревизии 27 (August 2014). Please see older revisions of ES6 for specification semantics.</p>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Начальная поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("30") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Начальная поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile("30") }}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Особенности_реализации_в_SpiderMonkey">Особенности реализации в SpiderMonkey</h2>
+
+<ul>
+ <li>Нельзя использовать {{jsxref("Statements/let", "let")}}, потому что она доступна только в JS версии 1.7 и тэгах XUL.</li>
+ <li>Деструктуризация во включениях пока не поддерживается ({{bug(980828)}}).</li>
+</ul>
+
+<h2 id="Отличия_от_старых_JS1.7JS1.8_включений">Отличия от старых JS1.7/JS1.8 включений</h2>
+
+<div class="warning">JS1.7/JS1.8 включения убраны из Gecko 46 ({{bug(1220564)}}).</div>
+
+<p><strong>Старый синтаксис включений (не используйте!):</strong></p>
+
+<pre class="brush: js example-bad">(X for (Y in Z))
+(X for each (Y in Z))
+(X for (Y of Z))
+</pre>
+
+<p>Отличия:</p>
+
+<ul>
+ <li>Включения в ES7 создают отдельную область видимость для каждой итерации <code>for</code>, вместо одной области для всего включения:
+
+ <ul>
+ <li>Старые: <code>[...(()=&gt;x for (x of [0, 1, 2]))][1]() // 2</code></li>
+ <li>Новые: <code>[...(for (x of [0, 1, 2]) ()=&gt;x)][1]() // 1, each iteration creates a fresh binding for x. </code></li>
+ </ul>
+ </li>
+ <li>Включения в ES7 начинаются с <code>for</code> вместо выражения присваивания:
+ <ul>
+ <li>Старые: <code>(i * 2 for (i of numbers))</code></li>
+ <li>Новые: <code>(for (i of numbers) i * 2)</code></li>
+ </ul>
+ </li>
+ <li>Включения в ES7 могут содержать несколько <code>if</code>  и  <code>for</code>.</li>
+ <li>Включения в ES7 работают только с итерациями <code>{{jsxref("Statements/for...of", "for...of")}}</code>, но не с <code>{{jsxref("Statements/for...in", "for...in")}}</code></li>
+</ul>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}}</li>
+ <li>{{jsxref("Operators/Array_comprehensions", "Array comprehensions")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/in/index.html b/files/ru/web/javascript/reference/operators/in/index.html
new file mode 100644
index 0000000000..35ee2c4620
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/in/index.html
@@ -0,0 +1,136 @@
+---
+title: in operator
+slug: Web/JavaScript/Reference/Operators/in
+tags:
+ - JavaScript
+ - Оператор
+ - Оператор отношения
+translation_of: Web/JavaScript/Reference/Operators/in
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Оператор <code>in</code></strong> возвращает <code>true</code>, если свойство содержится в указанном объекте или в его цепочке прототипов.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>prop</em> in <em>object</em></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>prop</code></dt>
+ <dd>Строка или symbol, представляющий название свойства или индекс массива (non-symbols будут конвертированы в строки).</dd>
+</dl>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>Объект, в котором нужно проверить содежание свойства с заданным именем.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В примере ниже показаны некоторые способы использования оператора <code>in</code>.</p>
+
+<pre class="brush:js">// Массивы
+var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+0 in trees // true
+3 in trees // true
+6 in trees // false
+"bay" in trees // false (вы должны указать индекс элемента в массиве, а не значение в этом индексе)
+"length" in trees // true (length является свойством Array)
+
+// Уже существующие объекты
+"PI" in Math // true
+
+// Пользовательские объекты
+var mycar = {make: "Honda", model: "Accord", year: 1998};
+"make" in mycar // true
+"model" in mycar // true
+</pre>
+
+<p>Вы должны указать объект справа от оператора <code>in</code>. Например, вы можете указать строку, созданную через конструктор объекта <code>String</code>, но вы не можете указать строковый литерал.</p>
+
+<pre class="brush:js">var color1 = new String("green");
+"length" in color1 // returns true
+
+var color2 = "coral";
+// сгенерирует ошибку (color2 is not a String object)
+"length" in color2
+</pre>
+
+<h3 id="Использование_оператора_in_с_неопределенными_или_с_уже_удаленными_свойствами">Использование оператора <code>in</code> с неопределенными или с уже удаленными свойствами</h3>
+
+<p>Если вы удалили свойство при помощи оператора <code style="font-style: normal;"><a href="/ru/docs/Web/JavaScript/Reference/Operators/delete" title="en-US/docs/JavaScript/Reference/Operators/Special/delete">delete</a></code>, то оператор <code>in</code> возвратит <code>false</code> для этого свойства.</p>
+
+<pre class="brush:js">var mycar = {make: "Honda", model: "Accord", year: 1998};
+delete mycar.make;
+"make" in mycar; // false
+
+var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+delete trees[3];
+3 in trees; // false
+</pre>
+
+<p>Если вы зададите свойству значение {{jsxref("Global_Objects/undefined", "undefined")}}, но не удалите его, то для этого свойства оператор <code>in</code> вернет значение <code>true</code>.</p>
+
+<pre class="brush:js">var mycar = {make: "Honda", model: "Accord", year: 1998};
+mycar.make = undefined;
+"make" in mycar; // true
+</pre>
+
+<pre class="brush:js">var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
+trees[3] = undefined;
+3 in trees; // returns true
+</pre>
+
+<h3 id="Наследуемые_свойства">Наследуемые свойства</h3>
+
+<p>Оператор <code>in</code> возвратит <code>true</code> для свойств, которые унаследованы по цепочке прототипов. (Если вы хотите проверить только не наследованные свойства, используйте {{jsxref("Object.prototype.hasOwnProperty()")}}.)</p>
+
+<pre class="brush:js">"toString" in {}; // true
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-relational-operators', 'Relational Operators')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.8.7', 'The in Operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-11.8.7', 'The in Operator')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Определено изначально. Реализовано в JavaScript 1.4</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.operators.in")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete" title="en-US/docs/JavaScript/Reference/Operators/Special/delete">delete</a></code></li>
+ <li>{{jsxref("Object.prototype.hasOwnProperty()")}}</li>
+ <li>{{jsxref("Reflect.has()")}}</li>
+ <li><a href="/en-US/docs/Enumerability_and_ownership_of_properties" title="/en-US/docs/Enumerability_and_ownership_of_properties">Enumerability and ownership of properties</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/index.html b/files/ru/web/javascript/reference/operators/index.html
new file mode 100644
index 0000000000..eff74ba579
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/index.html
@@ -0,0 +1,291 @@
+---
+title: Выражения и операторы
+slug: Web/JavaScript/Reference/Operators
+tags:
+ - JavaScript
+ - Operators
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Эта глава описывает все операторы, выражения и ключевые слова языка JavaScript.</p>
+
+<h2 id="Expressions_and_operators_by_category" name="Expressions_and_operators_by_category">Выражения и операторы по категориям</h2>
+
+<p>Алфавитный список смотрите в боковой панели слева.</p>
+
+<h3 id="Primary_expressions" name="Primary_expressions">Первичные выражения</h3>
+
+<p>Базовые ключевые слова и общие выражения в JavaScript.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/this", "this")}}</dt>
+ <dd>Ключевое слово <code>this</code> ссылается на контекст выполняемой функции.</dd>
+ <dt>{{jsxref("Operators/function", "function")}}</dt>
+ <dd>Ключевое слово <code>function</code> определяет выражение функции.</dd>
+ <dt>{{jsxref("Operators/class", "class")}}</dt>
+ <dd>Ключевое слово <code>class</code> определяет выражение класса.</dd>
+ <dt>{{jsxref("Operators/function*", "function*")}}</dt>
+ <dd>Ключевое слово <code>function*</code> (со звёздочкой) определяет функцию-генератор.</dd>
+ <dt>{{jsxref("Operators/yield", "yield")}}</dt>
+ <dd>Пауза или продолжение выполнения функции-генератора.</dd>
+ <dt>{{jsxref("Operators/yield*", "yield*")}}</dt>
+ <dd>Делегирует выполнение другому генератору итерируемому объекту.</dd>
+ <dt>{{experimental_inline}} {{jsxref("Operators/async_function", "async function*")}}</dt>
+ <dd><code>async function</code> определяет выражение асинхронной функции.</dd>
+ <dt>{{experimental_inline}} {{jsxref("Operators/await", "await")}}</dt>
+ <dd>Пауза и продолжение выполнения асинхронной функции и ожидание <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</a> (результата выполнения) с результатом разрешено/отклонено.</dd>
+ <dt>{{jsxref("Global_Objects/Array", "[]")}}</dt>
+ <dd>Синтаксис создания инициализатора/литерала массива.</dd>
+ <dt>{{jsxref("Operators/Object_initializer", "{}")}}</dt>
+ <dd>Синтаксис создания инициализатора/литерала объекта</dd>
+ <dt>{{jsxref("Global_Objects/RegExp", "/ab+c/i")}}</dt>
+ <dd>Синтаксис создания литерала регулярного выражения.</dd>
+ <dt>{{jsxref("Operators/Grouping", "( )")}}</dt>
+ <dd>Оператор группировки.</dd>
+</dl>
+
+<h3 id="Left-hand-side_expressions" name="Left-hand-side_expressions">Левосторонние выражения</h3>
+
+<p>Значения слева являются назначением присваивания.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Property_accessors", "Доступ к свойству", "", 1)}}</dt>
+ <dd>Операторы доступа к членам предоставляют доступ к свойству или методу объекта<br>
+ (<code>object.property</code> и <code>object['property']</code>).</dd>
+ <dt>{{jsxref("Operators/new", "new")}}</dt>
+ <dd>Оператор <code>new</code> создаёт экземпляр объекта с использованием конструктора.</dd>
+ <dt><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a></dt>
+ <dd>Свойство <code>new.target</code> ссылается на конструктор или функцию, который был вызван через оператор {{jsxref("Operators/new", "new")}}.</dd>
+ <dt>{{jsxref("Operators/super", "super")}}</dt>
+ <dd>Ключевое слово <code>super</code> вызывает конструктор родительского класса.</dd>
+ <dt>{{jsxref("Operators/Spread_operator", "...obj")}}</dt>
+ <dd>Оператор распространения позволяет развернуть выражение в местах, где ожидается несколько аргументов (при вызове функций) или несколько элементов (при создании литералов массива).</dd>
+</dl>
+
+<h3 id="Increment_and_decrement" name="Increment_and_decrement">Инкремент и декремент</h3>
+
+<p>Операторы постфиксного/префиксного инкремента и декремента.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "A++", "#Increment")}}</dt>
+ <dd>Оператор постфиксного инкремента.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "A--", "#Decrement")}}</dt>
+ <dd>Оператор постфиксного декремента.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "++A", "#Increment")}}</dt>
+ <dd>Оператор префиксного инкремента. <em>(Значение переменной, сначала, увеличивается на 1, а затем используется в выражении)</em></dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "--A", "#Decrement")}}</dt>
+ <dd>Оператор префиксного декремента.</dd>
+</dl>
+
+<h3 id="Unary_operators" name="Unary_operators">Унарные операторы</h3>
+
+<p>Унарные опарации — это операции с одним операндом.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/delete", "delete")}}</dt>
+ <dd>Оператор <code>delete</code> удаляет свойство из объекта.</dd>
+ <dt>{{jsxref("Operators/void", "void")}}</dt>
+ <dd>Оператор <code>void</code> отбрасывает возвращаемое значение выражения.</dd>
+ <dt>{{jsxref("Operators/typeof", "typeof")}}</dt>
+ <dd>Оператор <code>typeof</code> определяет тип переданного объекта.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "+", "#Unary_plus")}}</dt>
+ <dd>Оператор унарного плюса преобразует свой операнд в тип {{jsxref("Global_Objects/Number", "Number")}}.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "-", "#Unary_negation")}}</dt>
+ <dd>Оператор унарного минуса преобразует свой операнд в тип {{jsxref("Global_Objects/Number", "Number")}}, а затем меняет его знак.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "~", "#Bitwise_NOT")}}</dt>
+ <dd>Оператор побитового НЕ.</dd>
+ <dt>{{jsxref("Operators/Logical_Operators", "!", "#Logical_NOT")}}</dt>
+ <dd>Оператор логического НЕ.</dd>
+</dl>
+
+<h3 id="Arithmetic_operators" name="Arithmetic_operators">Арифметические операторы</h3>
+
+<p>Арифметические операторы своими операндами принимают числовые значения (литерали или переменные) и возвращают одно числовое значение.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "+", "#Addition")}}</dt>
+ <dd>Оператор сложения.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "-", "#Subtraction")}}</dt>
+ <dd>Оператор вычитания.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "/", "#Division")}}</dt>
+ <dd>Оператор деления.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "*", "#Multiplication")}}</dt>
+ <dd>Оператор умножения.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "%", "#Remainder")}}</dt>
+ <dd>Оператор взятия остатка от деления.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "**", "#Exponentiation")}}</dt>
+ <dd>Оператор возведения в степень.</dd>
+</dl>
+
+<h3 id="Relational_operators" name="Relational_operators">Реляционные операторы</h3>
+
+<p>Реляционные операторы (операторы отношения) сравнивают свои операнды и возвращают значение типа {{jsxref("Global_Objects/Boolean", "Boolean")}}, зависящее от того, был ли результат сравнения истинным или ложным.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/in", "in")}}</dt>
+ <dd>Оператор <code>in</code> определяет, содержит ли объект указанное свойство.</dd>
+ <dt>{{jsxref("Operators/instanceof", "instanceof")}}</dt>
+ <dd>Оператор <code>instanceof</code> определяет, является ли объект экземпляром потомком Prototype (или экземпляром) другого объекта.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&lt;", "#Less_than_operator")}}</dt>
+ <dd>Оператор меньше.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&gt;", "#Greater_than_operator")}}</dt>
+ <dd>Оператор больше.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&lt;=", "#Less_than_or_equal_operator")}}</dt>
+ <dd>Оператор меньше или равно.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&gt;=", "#Greater_than_or_equal_operator")}}</dt>
+ <dd>Оператор больше или равно.</dd>
+</dl>
+
+<div class="note">
+<p><strong>Заметьте: =&gt;</strong> это не оператор. Это нотация для <a href="/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Стрелочных функций</a>.</p>
+</div>
+
+<h3 id="Equality_operators" name="Equality_operators">Операторы равенства</h3>
+
+<p>Результат вычисления оператора равенства всегда имеет тип {{jsxref("Global_Objects/Boolean", "Boolean")}} и значение, зависящее от того, был ли результат проверки истинным или ложным.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}</dt>
+ <dd>Оператор проверки на равенство.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "!=", "#Inequality")}}</dt>
+ <dd>Оператор проверки на неравенство.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}</dt>
+ <dd>Оператор проверки на идентичность.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "!==", "#Nonidentity")}}</dt>
+ <dd>Оператор проверки на неидентичность.</dd>
+</dl>
+
+<h3 id="Bitwise_shift_operators" name="Bitwise_shift_operators">Операторы побитового сдвига</h3>
+
+<p>Операции для сдвига всех битов операнда.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&lt;&lt;", "#Left_shift")}}</dt>
+ <dd>Оператор побитового сдвига влево.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&gt;&gt;", "#Right_shift")}}</dt>
+ <dd>Оператор знакового побитового сдвига вправо.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&gt;&gt;&gt;", "#Unsigned_right_shift")}}</dt>
+ <dd>Оператор беззнакового побитового сдвига вправо.</dd>
+</dl>
+
+<h3 id="Binary_bitwise_operators" name="Binary_bitwise_operators">Бинарные побитовые операторы</h3>
+
+<p>Побитовые операторы трактуют свои операнды как набор из 32 битов (нулей и единиц) и возвращают стандартные числовые значения JavaScript.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&amp;", "#Bitwise_AND")}}</dt>
+ <dd>Оператор побитового И.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "|", "#Bitwise_OR")}}</dt>
+ <dd>Оператор побитового ИЛИ.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "^", "#Bitwise_XOR")}}</dt>
+ <dd>Оператор побитового ИСКЛЮЧАЮЩЕГО ИЛИ.</dd>
+</dl>
+
+<h3 id="Binary_logical_operators" name="Binary_logical_operators">Бинарные логические операторы</h3>
+
+<p>Логические операторы обычно используются вместе с булевыми (логическими) значениями и в сочетании с ними они возвращают булево значение.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Logical_Operators", "&amp;&amp;", "#Logical_AND")}}</dt>
+ <dd>Оператор логического И.</dd>
+ <dt>{{jsxref("Operators/Logical_Operators", "||", "#Logical_OR")}}</dt>
+ <dd>Оператор логического ИЛИ.</dd>
+</dl>
+
+<h3 id="Conditional_(ternary)_operator" name="Conditional_(ternary)_operator">Условный (тернарный) оператор</h3>
+
+<dl>
+ <dt>{{jsxref("Operators/Conditional_Operator", "(условие ? ifTrue : ifFalse)")}}</dt>
+ <dd>Условный оператор возвращает одно значение из двух данных в зависимости от логического значения условия.</dd>
+</dl>
+
+<h3 id="Assignment_operators" name="Assignment_operators">Операторы присваивания</h3>
+
+<p>Операторы присваивания присваивают значение своему левому операнду, зависящее от значения их правого операнда.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Assignment_Operators", "=", "#Assignment")}}</dt>
+ <dd>Оператор присваивания.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "*=", "#Multiplication_assignment")}}</dt>
+ <dd>Оператор присваивания с умножением.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "/=", "#Division_assignment")}}</dt>
+ <dd>Оператор присваивания с делением.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "%=", "#Remainder_assignment")}}</dt>
+ <dd>Оператор присваивания с взятием остатка от деления.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "+=", "#Addition_assignment")}}</dt>
+ <dd>Оператор присваивания со сложением.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "-=", "#Subtraction_assignment")}}</dt>
+ <dd>Оператор присваивания с вычитанием.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&lt;&lt;=", "#Left_shift_assignment")}}</dt>
+ <dd>Оператор присваивания со сдвигом влево.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&gt;&gt;=", "#Right_shift_assignment")}}</dt>
+ <dd>Оператор присваивания со знаковым сдвигом вправо.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&gt;&gt;&gt;=", "#Unsigned_right_shift_assignment")}}</dt>
+ <dd>Оператор присваивания с беззнаковым сдвигом вправо.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&amp;=", "#Bitwise_AND_assignment")}}</dt>
+ <dd>Оператор присваивания с побитовым И.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "^=", "#Bitwise_XOR_assignment")}}</dt>
+ <dd>Оператор присваивания с побитовым ИСКЛЮЧАЮЩИМ ИЛИ.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "|=", "#Bitwise_OR_assignment")}}</dt>
+ <dd>Оператор присваивания с побитовым ИЛИ.</dd>
+ <dt>{{jsxref("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}<br>
+ {{jsxref("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}</dt>
+ <dd>Деструктурирующее присваивание позволяет вам присваивать свойства массива или объекта переменным с использованием синтаксиса, очень похожего на объявление литералов массива или объекта.</dd>
+</dl>
+
+<h3 id="Comma_operator" name="Comma_operator">Оператор запятая</h3>
+
+<dl>
+ <dt>{{jsxref("Operators/Comma_Operator", ",")}}</dt>
+ <dd>Оператор запятая позволяет вычислять несколько выражений в одном операторе и возвращает результат вычисления последнего выражения.</dd>
+ <dt>
+ <h3 id="Нестандартные_особенности">Нестандартные особенности</h3>
+ </dt>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Legacy_generator_function", "Legacy generator function", "", 1)}}</dt>
+ <dd>Ключевое слово <code>function</code> может быть использовано для определения устаревших функций-генераторов в одном выражении. Для того, чтобы сделать такую функцию, её тело должно содержать хотя бы одно выражение {{jsxref("Operators/yield", "yield")}}.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Expression_closures", "Expression closures", "", 1)}}</dt>
+ <dd>Синтаксис закрытого выражения для сокращённого написания простейших функций.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}</dt>
+ <dd>Упрощённый синтаксис создания массива.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}</dt>
+ <dd>Упрощённый синтаксис создания генератора.</dd>
+</dl>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11', 'Expressions')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11', 'Expressions')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Новое: Оператор распространения, деструктурирующее присваивание, ключевое слово <code>super</code>.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Operators/Operator_Precedence", "Приоритеты операторов", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/instanceof/index.html b/files/ru/web/javascript/reference/operators/instanceof/index.html
new file mode 100644
index 0000000000..81676c6bf5
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/instanceof/index.html
@@ -0,0 +1,165 @@
+---
+title: instanceof
+slug: Web/JavaScript/Reference/Operators/instanceof
+tags:
+ - JavaScript
+ - Relational Operators
+ - instanceof
+ - Объект
+ - Оператор
+ - прототип
+translation_of: Web/JavaScript/Reference/Operators/instanceof
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор <strong><code>instanceof</code> </strong>проверяет, принадлежит ли объект к определённому классу. Другими словами, <code>object instanceof constructor</code><em> </em>проверяет, присутствует ли объект <code>constructor.prototype</code> в цепочке прототипов <code>object</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-instanceof.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>object</em> instanceof <em>constructor</em></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>Проверяемый объект.</dd>
+</dl>
+
+<dl>
+ <dt><code>constructor</code></dt>
+ <dd>Функция-конструктор, на которую идёт проверка.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Оператор <code>instanceof</code> проверяет, присутствует ли объект <code>constructor.prototype</code> в цепочке прототипов <code>object</code>.</p>
+
+<pre class="brush: js">// объявляем конструкторы
+function C() {}
+function D() {}
+
+var o = new C();
+
+// true, так как: Object.getPrototypeOf(o) === C.prototype
+o instanceof C;
+
+// false, так как D.prototype не присутствует в цепочке прототипов o
+o instanceof D;
+
+o instanceof Object; // true, так как:
+C.prototype instanceof Object // true
+
+C.prototype = {};
+var o2 = new C();
+
+o2 instanceof C; // true
+
+// false, так как C.prototype отсутствует в цепочке прототипов o
+o instanceof C;
+
+D.prototype = new C(); // add C to [[Prototype]] linkage of D
+var o3 = new D();
+o3 instanceof D; // true
+o3 instanceof C; // true, так как C.prototype теперь присутствует в цепочке прототипов o3
+</pre>
+
+<p>Обратите внимание: результат оператора <code>instanceof</code> зависит от свойства <code>constructor.prototype</code>, поэтому результат оператора может поменяться после изменения этого свойства. Также результат может поменяться после изменения прототипа <code>object</code> (или цепочки прототипов) с помощью <code>Object.setPrototypeOf</code> или нестандартного свойства <code>__proto__</code>.</p>
+
+<h3 id="instanceof_и_множественные_контексты_(например_фреймы_или_окна)"><code>instanceof</code> и множественные контексты (например, фреймы или окна)</h3>
+
+<p>Различные контексты имеют разные среды выполнения. Это означает, что они имеют различныые built-ins (разный глобальный объект, различные конструкторы и т.д.). Это может давать неожиданные результаты. Например, <code>[] instanceof window.frames[0].Array</code> вернёт <code>false</code>, потому что <code>Array.prototype !== </code><code>window.frames[0].Array</code> а массив наследуется от <code>Array</code>.</p>
+
+<p>Это может казаться несущественной проблемой сначала, но при работе с несколькими фреймами или окнами, и передачи объектов из одного контекста в другой с помощью функций, это может стать серьёзной проблемой. С другой стороны, безопасно проверить, является ли некоторый объект массивом можно используя <code>Array.isArray(myObj)</code>.</p>
+
+<p>Например, для проверки того, что <a href="/ru/docs/Web/API/Node">Node</a> является <a href="/ru/docs/Web/API/SVGElement">SVGElement</a> в разных контекстах можно использовать <code>myNode instanceof myNode.ownerDocument.defaultView.SVGElement</code>.</p>
+
+<div class="note"><strong>Замечания для разработчиков Mozilla:</strong><br>
+Использование XPCOM <code>instanceof</code> в коде имеет специальный эффект: <code>obj instanceof </code><em><code>xpcomInterface</code></em> (например <code>Components.interfaces.nsIFile</code>) вызывает <code>obj.QueryInterface(<em>xpcomInterface</em>)</code> и возвращает <code>true</code> если проверка на QueryInterface прошла успешно. Побочным эфектом этого вызова является то, что можно использовать свойства <em><code>xpcomInterface</code></em> на <code>obj</code> после успешной проверки с помощью <code>instanceof</code>. В отличии от стандартных глобальных JavaScript типов, проверка <code>obj instanceof xpcomInterface</code> работает как ожидается, даже если <code>obj</code> отнсится к другому контексту.</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Показывает_что_String_и_Date_имеют_тип_Object_и_граничные_случаи">Показывает, что <code>String</code> и <code>Date</code> имеют тип <code>Object</code> и граничные случаи</h3>
+
+<p>Следующий код использует <code>instanceof</code>, чтобы показать что объекты <code>String</code> и <code>Date</code> также имеют тип <code>Object</code> (они являются наследниками <code>Object</code>).</p>
+
+<p>Однако, объекты, созданные с помощью литералов, являются исключениями — хотя их prototype равен <code>undefined</code>, выражение <code>instanceof Object</code> возвращает <code>true</code>.</p>
+
+<pre class="brush: js">var simpleStr = 'Это обычная строка';
+var myString = new String();
+var newStr = new String('Строка, созданная с помощью конструктора');
+var myDate = new Date();
+var myObj = {};
+
+simpleStr instanceof String; // возвращает false, проверяет цепочку прототипов
+myString instanceof String; // возвращает true
+newStr instanceof String; // возвращает true
+myString instanceof Object; // возвращает true
+
+myObj instanceof Object; // возвращает true, несмотря на прототип, равный undefined
+({}) instanceof Object; // возвращает true, аналогично предыдущей строчке
+
+myString instanceof Date; // возвращает false
+
+myDate instanceof Date; // возвращает true
+myDate instanceof Object; // возвращает true
+myDate instanceof String; // возвращает false
+</pre>
+
+<h3 id="Показывает_что_mycar_имеет_тип_Car_и_тип_Object">Показывает, что <code>mycar</code> имеет тип <code>Car</code> и тип <code>Object</code></h3>
+
+<p>Следующий код создает тип <code>Car</code> и экземпляр этого типа, <code>mycar</code>. Оператор <code>instanceof</code> показывает, что объект <code>mycar</code> имеет тип <code>Car</code> и тип <code>Object</code>.</p>
+
+<pre class="brush: js">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+var mycar = new Car('Honda', 'Accord', 1998);
+var a = mycar instanceof Car; // возвращает true
+var b = mycar instanceof Object; // возвращает true
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-relational-operators', 'Relational Operators')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-relational-operators', 'Relational Operators')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.8.6', 'The instanceof operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-11.8.6', 'The instanceof operator')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.4.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{Compat("javascript.operators.instanceof")}}</p>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/typeof" title="/en-US/docs/JavaScript/Reference/Operators/typeof">typeof</a></code></li>
+ <li>{{jsxref("Symbol.hasInstance")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/new.target/index.html b/files/ru/web/javascript/reference/operators/new.target/index.html
new file mode 100644
index 0000000000..bab9b8e956
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/new.target/index.html
@@ -0,0 +1,137 @@
+---
+title: new.target
+slug: Web/JavaScript/Reference/Operators/new.target
+tags:
+ - ECMAScript6
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Operators/new.target
+---
+<div>{{JSSidebar("Operators")}}</div>
+
+<div>Свойство <strong><code>new.target</code></strong> позволяет определить была ли функция или конструктор вызваны с помощью оператора <a href="/ru/docs/Web/JavaScript/Reference/Operators/new">new</a>. В конструкторах и функциях инстанциированных с помощью оператора <a href="/ru/docs/Web/JavaScript/Reference/Operators/new">new</a>,  <code>new.target</code> возвращает ссылку на конструктор или функцию. При обычном вызове функции <code>new.target</code> имеет значение {{jsxref("undefined")}}.</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new.target</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Синтаксис <code>new.target</code> состоит из ключевого слова<code>"new</code>", точки, и свойства<code> "target"</code>. Обычно "<code>new."</code> служит контекстом для доступа к свойству, но здесь <code>"new."</code> не совсем объект. Однако при вызове конструктора, <code>new.target</code> ссылается на конструктор вызванный с помощью <code>new</code> и таким образом "<code>new.</code>" становится виртуальным контекстом.</p>
+
+<p>Свойство <code>new.target</code> это мета свойство которое доступно во всех функциях. В <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">стрелочных функция</a>, <code>new.target</code> ссылается на <code>new.target</code> внешней функции.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="new.target_в_вызове_функции">new.target в вызове функции</h3>
+
+<p>При обычном вызове функции (в противоположность вызову в качестве конструктора), <code>new.target</code> имеет значение {{jsxref("undefined")}}. Это позволяет определить была ли вызвана функция как конструктор через <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a> или нет.</p>
+
+<pre class="brush: js">function Foo() {
+ if (!new.target) throw "Foo() must be called with new";
+ console.log("Foo instantiated with new");
+}
+
+new Foo(); // выведет "Foo instantiated with new"
+Foo(); // ошибка "Foo() must be called with new"
+</pre>
+
+<h3 id="new.target_в_конструкторе">new.target в конструкторе</h3>
+
+<p>В конструкторе класса, <code>new.target</code> ссылается на конструктор, который был непосредственно вызван <code>new</code>. Это верно и для случая, когда <code>new.target</code> находится в конструкторе родительского класса, а тот в свою очередь вызывается из конструктора дочернего класса.</p>
+
+<pre class="brush: js">class A {
+ constructor() {
+ console.log(new.target.name);
+ }
+}
+
+class B extends A { constructor() { super(); } }
+
+var a = new A(); // вернет "A"
+var b = new B(); // вернет "B"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-built-in-function-objects', 'Built-in Function Objects')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-built-in-function-objects', 'Built-in Function Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatChrome(46.0)}}</td>
+ <td>{{CompatGeckoDesktop(41)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(46.0)}}</td>
+ <td>{{CompatGeckoMobile(41)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(46.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Functions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a></code></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/new/index.html b/files/ru/web/javascript/reference/operators/new/index.html
new file mode 100644
index 0000000000..ce21bd41c1
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/new/index.html
@@ -0,0 +1,217 @@
+---
+title: Оператор new
+slug: Web/JavaScript/Reference/Operators/new
+tags:
+ - JavaScript
+ - Левосторонние выражения
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/new
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Оператор </strong>(операторная функция)<strong> <code>new</code></strong> создает экземпляр объекта, встроенного или определенного пользователем, имеющего конструктор.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">new <em>constructor</em>[([<em>arguments</em>])]</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>constructor</code></dt>
+ <dd>Функция, задающая тип объекта.</dd>
+</dl>
+
+<dl>
+ <dt><code>arguments</code></dt>
+ <dd>Список параметров, с которыми будет вызван конструктор.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Создание объекта, определенного пользователем, требует два шага:</p>
+
+<ol>
+ <li>Написать функцию, которая задаст тип объекта.</li>
+ <li>Создать экземпляр объекта, используя  <code>new</code>.</li>
+</ol>
+
+<p>Чтобы определить новый тип объекта, создайте функцию, которая задаст его и имя и свойства. Свойство объекта также может быть объектом. Примеры приведены ниже.</p>
+
+<p>Когда исполняется <code>new <em>Foo</em>(...)</code> , происходит следующее:</p>
+
+<ol>
+ <li>Создается новый объект, наследующий <code><em>Foo</em>.prototype.</code></li>
+ <li>Вызывается конструктор — функция <code><em>Foo</em></code> с указанными аргументами и <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a>, привязанным к только что созданному объекту</code>. <code>new F<em>oo</em></code> эквивалентно <code>new </code><em>F<code>oo</code></em><code>()</code>, то есть если аргументы не указаны, Foo вызывается без аргументов.</li>
+ <li>Результатом выражения new становится объект, возвращенный конструктором. Если конструктор не возвращет объект явно, используется объект из п. 1. (Обычно конструкторы не возвращают значение, но они могут делать это, если нужно переопределить обычный процесс создания объектов.)</li>
+</ol>
+
+<p>Всегда можно добавить свойство к уже созданному объекту. Например, <code>car1.color = "black"</code> добавляет свойство <code>color</code> к объекту <code>car1</code>, и присваивает ему значение "<code>black</code>". Это не затрагивает другие объекты. Чтобы добавить свойство ко всем объектам типа, нужно добавлять его в определение типа Car.</p>
+
+<p>Добавить свойство к ранее определенному типу можно используя свойство <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype">Function.prototype</a></code>. Это определит свойство для всех объектов, созданных этой функцией, а не только у какого-либо экземпляра. Следующий пример добавляет свойство color со значениеи <code>null</code> всем объектам типа <code>car</code>, а потом меняет его на  "<code>black</code>" только у экземпляра <code>car1</code>. Больше информации в статье <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype">prototype</a>.</p>
+
+<pre class="brush: js">function Car() {}
+car1 = new Car();
+
+console.log(car1.color); // undefined
+
+Car.prototype.color = null;
+console.log(car1.color); // null
+
+car1.color = "black";
+console.log(car1.color); // black
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Тип_объекта_и_экземпляры_объекта">Тип объекта и экземпляры объекта</h3>
+
+<p>Предположим, нам нужен тип объекта для автомобилей. Этот тип должен называться <code>car</code>, и иметь свойства: марка, модель и год.</p>
+
+<pre class="brush: js">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+</pre>
+
+<p>Теперь можно создать экземпляр типа car:</p>
+
+<pre class="brush: js">var mycar = new Car("Eagle", "Talon TSi", 1993);
+</pre>
+
+<p>Это выражение создает экземпляр <code>mycar</code> и присваевает его свойствам указанные значения. Таким образом, <code>mycar.make</code> принимает значение "Eagle", <code>mycar.year</code> принимает значение 1993, и так далее.</p>
+
+<p>Можно создать любое количество экземпляров <code>car</code> с помощью оператора <code>new</code>. Например:</p>
+
+<pre class="brush: js">var kenscar = new Car("Nissan", "300ZX", 1992);
+</pre>
+
+<h3 id="Объект_в_качестве_свойства">Объект в качестве свойства</h3>
+
+<p>Предположим, есть объект <code>person</code>:</p>
+
+<pre class="brush: js">function Person(name, age, sex) {
+ this.name = name;
+ this.age = age;
+ this.sex = sex;
+}
+</pre>
+
+<p>Создадим два экземпляра:</p>
+
+<pre class="brush: js">var rand = new Person("Rand McNally", 33, "M");
+var ken = new Person("Ken Jones", 39, "M");
+</pre>
+
+<p>Изменим определение <code>car</code>, добавив свойство, указывающее владельца — <code>owner</code>:</p>
+
+<pre class="brush: js">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+}
+</pre>
+
+<p>Создадим экземпляры car:</p>
+
+<pre class="brush: js">var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
+var car2 = new Car("Nissan", "300ZX", 1992, ken);
+</pre>
+
+<p>Вместо строковых или численных значений можно передать обект как параметр. Чтобы узнать имя владельца <code>car2</code>, получим доступ к свойству:</p>
+
+<pre class="brush: js">car2.owner.name
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-new-operator', 'The new Operator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.2.2', 'The new Operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-11.2.2', 'The new Operator')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.2.2', 'The new Operator')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализовано JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Reflect.construct()")}}</li>
+</ul>
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
new file mode 100644
index 0000000000..71484f05a1
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/nullish_coalescing_operator/index.html
@@ -0,0 +1,144 @@
+---
+title: Оператор нулевого слияния
+slug: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
+translation_of: Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
+---
+<p>{{JSSidebar("Operators")}}</p>
+
+<p><strong>Оператор нулевого слияния (<code>??</code>)</strong> это логический оператор, который возвращает значение правого операнда когда значение левого операнда равно {{jsxref("null")}} или {{jsxref("undefined")}}, в противном случае будет возвращено значение левого операнда.</p>
+
+<p>В отличие от <a href="https://wiki.developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B#%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%98%D0%9B%D0%98">логического ИЛИ (<code>||</code>)</a>, левая часть оператора вычисляется и возвращается даже если его результат после приведения к логическому типу оказывается<em> <a href="https://wiki.developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5">ложным</a></em>, но не является <code>null</code> или <code>undefined</code>. Другими словами, если вы используете <code>||</code> чтобы установить значение по умолчанию, вы можете столкнуться с неожиданным поведением если считаете некоторые <em>ложные</em> значения пригодными для использования (например, "" или 0). Ниже приведены примеры.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-nullishcoalescingoperator.html")}}</div>
+
+<p class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.<br>
+ See <a href="https://github.com/mdn/interactive-examples/pull/1482#issuecomment-553841750">PR #1482</a> regarding the addition of this example.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>leftExpr</var> ?? <var>rightExpr</var>
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_оператора_нулевого_слияния">Использование оператора нулевого слияния</h3>
+
+<p>В этом примере показано как устанавливать значения по умолчанию, оставив в покое значения отличные от <code>null</code> или <code>undefined</code>.</p>
+
+<pre class="brush: js notranslate">const nullValue = null;
+const emptyText = ""; // falsy
+const someNumber = 42;
+
+const valA = nullValue ?? "default for A";
+const valB = emptyText ?? "default for B";
+const valC = someNumber ?? 0;
+
+console.log(valA); // "default for A"
+console.log(valB); // "" (так как пустая строка не null или undefined)
+console.log(valC); // 42</pre>
+
+<h3 id="Значение_по_умолчанию_в_присваивании_переменной">Значение по умолчанию в присваивании переменной</h3>
+
+<p>Ранее, для присваивания значения по умолчанию переменной использовался оператор логического ИЛИ (<code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR_2">||</a></code>):</p>
+
+<pre class="brush: js notranslate">let foo;
+
+// переменной foo никогда не присваивалось значение, поэтому она undefined
+let someDummyText = foo || 'Hello!';</pre>
+
+<p>Однако, оператор <code>||</code> это логический оператор, левый операнд которого при сравнении неявно приводится к булевому значению, поэтому любое <em>ложное</em> значение (<code>0</code>, <code>''</code>, <code>NaN</code>, <code>null</code>, <code>undefined</code>) не возвращается. Данное поведение может быть нежелательным если вы рассматриваете <code>0</code>, <code>''</code>, или <code>NaN</code> как корректные значения.</p>
+
+<pre class="brush: js notranslate">let count = 0;
+let text = "";
+
+let qty = count || 42;
+let message = text || "hi!";
+console.log(qty); // 42 and not 0
+console.log(message); // "hi!" and not ""
+</pre>
+
+<p>Оператор нулевого слияния предотвращает попадание в такую ловушку, возвращая второй операнд если первый оказывается <code>null</code> or <code>undefined</code> (но не любым другим <em>ложным</em> значением):</p>
+
+<pre class="brush: js notranslate">let myText = ''; // Пустая строка (тоже является ложным значением при приведении к логическому типу)
+
+let notFalsyText = myText || 'Hello world';
+console.log(notFalsyText); // Hello world
+
+let preservingFalsy = myText ?? 'Hi neighborhood';
+console.log(preservingFalsy); // '' (так как myText не undefined и не null)
+</pre>
+
+<h3 id="Синтаксическое_сокращение">Синтаксическое сокращение</h3>
+
+<p>Так же как при использовании логического И и ИЛИ, правое выражение не вычисляется если найдено подходящее значение в левом.</p>
+
+<pre class="brush: js notranslate">function A() { console.log('A was called'); return undefined;}
+function B() { console.log('B was called'); return false;}
+function C() { console.log('C was called'); return "foo";}
+
+console.log( A() ?? C() );
+// выводит "A was called", затем "C was called", и затем "foo"
+// так как A() возвращает undefined, поэтому оба выражения вычисляются
+
+console.log( B() ?? C() );
+// выводит "B was called", затем "false"
+// так как B() возвращает false (но не null или undefined), правое
+// выражение не вычисляется
+</pre>
+
+<h3 id="Не_объединяется_с_И_или_ИЛИ_операторами">Не объединяется с И или ИЛИ операторами</h3>
+
+<p>Нельзя напрямую объединять И (<code>&amp;&amp;</code>) и ИЛИ (<code>||</code>) операторы с <code>??</code>. При таком выражении будет выброшен <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError">SyntaxError</a></code>.</p>
+
+<pre class="brush: js example-bad notranslate">null || undefined ?? "foo"; // выбрасывает SyntaxError
+true || undefined ?? "foo"; // выбрасывает SyntaxError</pre>
+
+<p>Однако, при заключении в скобки выражение является корректным:</p>
+
+<pre class="brush: js example-good notranslate">(null || undefined) ?? "foo"; // returns "foo"
+</pre>
+
+<h3 id="Отношение_к_оператору_опциональной_последовательности_.">Отношение к оператору опциональной последовательности (<code>?.</code>)</h3>
+
+<p>Оператор нулевого слияния определяет <code>undefined</code> и <code>null</code> как специальные значения так же как и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Optional_chaining">оператор опциональной последовательности (<code>?.</code>)</a>, который используется для доступа к свойствам объекта, значение которого может быть <code>null</code> или <code>undefined</code>.</p>
+
+<pre class="brush: js notranslate">let foo = { someFooProp: "hi" };
+
+console.log(foo.someFooProp?.toUpperCase()); // "HI"
+console.log(foo.someBarProp?.toUpperCase()); // undefined
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#prod-Nulli', 'nullish coalescing expression')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.operators.nullish_coalescing")}}</p>
+
+<h3 id="Прогресс_реализации">Прогресс реализации</h3>
+
+<p>В следующей таблице приведено ежедневное состояние реализации этой функции, поскольку эта функция еще не достигла стабильности в разных браузерах. Данные генерируются путем запуска соответствующих тестов функциональности в <a href="https://github.com/tc39/test262">Test262</a>, стандартном наборе тестов JavaScript, в ночной сборке или в последней версии движка JavaScript каждого браузера.</p>
+
+<div>{{EmbedTest262ReportResultsTable("coalesce-expression")}}</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://wiki.developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Optional_chaining">Оператор опциональной последовательности</a></li>
+ <li><a href="https://wiki.developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%BE%D1%80%D1%8B#%D0%9B%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%98%D0%9B%D0%98">Логическое ИЛИ (<code>||</code>)</a></li>
+ <li><a href="https://wiki.developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Default_parameters">Параметры по умолчанию</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/object_initializer/index.html b/files/ru/web/javascript/reference/operators/object_initializer/index.html
new file mode 100644
index 0000000000..c7172a0c03
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/object_initializer/index.html
@@ -0,0 +1,431 @@
+---
+title: Инициализация объектов
+slug: Web/JavaScript/Reference/Operators/Object_initializer
+translation_of: Web/JavaScript/Reference/Operators/Object_initializer
+---
+<div>{{JsSidebar("Операторы")}}</div>
+
+<p>Объекты могут быть инициализированы с помощью <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object"><code>new Object()</code></a>,<code> <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create">Object.create()</a> </code>или <em>литеральной</em> (<em>инициирующей</em>) нотации. Инициализатор объекта это разделенный запятыми список ноль или более пар имен свойств и ассоциируемых с ними значений, заключенных в фигурные скобки (<code>{}</code>).</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js">var o = {};
+var o = {a: 'foo', b: 42, c: {}};
+
+var a = 'foo', b = 42, c = {};
+var o = {a: a, b: b, c: c};
+
+var o = {
+ <var>property: function </var>([<var>parameters</var>]) {},
+ get <var>property</var>() {},
+ set <var>property</var>(<var>value</var>) {}
+};
+</pre>
+
+<h3 id="Новая_нотация_в_ECMAScript_2015">Новая нотация в ECMAScript 2015</h3>
+
+<p>Пожалуйста, просмотрите таблицу поддержки этих нотаций. В неподдерживаемом окружении, эти нотации приведут к синтаксической ошибке.</p>
+
+<pre class="brush: js">// Сокращение имен свойств (ES2015)
+var a = 'foo', b = 42, c = {};
+var o = {a, b, c};
+
+// Сокращение имен методов (ES2015)
+var o = {
+ <var>property</var>([<var>parameters</var>]) {}
+};
+
+// Вычисление имен свойств (ES2015)
+var prop = 'foo';
+var o = {
+ [prop]: 'hey',
+ ['b' + 'ar']: 'there'
+};</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Инициализатор объекта это выражение, которое описывает инициализацию {{jsxref("Object")}}. Объекты состоят из <em>свойств</em>, которые используются для описания объекта. Значения свойств объектов могут содержать как {{Glossary("примитивные")}} типы данных, так и другие объекты.</p>
+
+<h3 id="Создание_объектов">Создание объектов</h3>
+
+<p>Пустой объект без свойств может быть создан следующим образом:</p>
+
+<pre class="brush: js">var object = {};</pre>
+
+<p>Однако, преимущество <em>литеральной</em> или <em>инициирующей</em> нотации это возможность быстро создавать объекты со свойствами внутри фигурных скобок. Создается простой список пар <code>ключ: значение</code>, разделенных запятой. Следующий код создает объект с тремя парами значений и ключи это <code>"foo"</code>, <code>"age"</code> и <code>"baz"</code>. Значения этих ключей строка <code>"bar"</code>, число <code>42</code> и другой объект.</p>
+
+<pre class="brush: js">var object = {
+ foo: 'bar',
+ age: 42,
+ baz: {myProp: 12}
+}</pre>
+
+<h3 id="Доступность_свойств">Доступность свойств</h3>
+
+<p>После того, как создали объект, вы, вероятно, захотите прочитать или изменить его. Свойства объектов могут быть получены при помощи точечной нотации или квадратных скобок. Смотрите <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessors</a> для детальной информации.</p>
+
+<pre class="brush: js">object.foo; // "bar"
+object['age']; // 42
+
+object.foo = 'baz';
+</pre>
+
+<h3 id="Определение_свойств">Определение свойств</h3>
+
+<p>Мы уже рассмотрели, как объявить свойства, используя синтаксис инициализации. Зачастую, в коде появляются свойства, которые вы захотите поместить в объект. Вы увидете следующий код:</p>
+
+<pre class="brush: js">var a = 'foo',
+ b = 42,
+ c = {};
+
+var o = {
+ a: a,
+ b: b,
+ c: c
+};</pre>
+
+<p>С ECMAScript 2015 появилась короткая нотация, способная достичь того же:</p>
+
+<pre class="brush: js">var a = 'foo',
+ b = 42,
+ c = {};
+
+// Сокращение имен свойств (ES2015)
+var o = {a, b, c};
+
+// Иначе говоря,
+console.log((o.a === {a}.a)); // true
+</pre>
+
+<h4 id="Повторение_имен_свойств">Повторение имен свойств</h4>
+
+<p>Когда используются одинаковые имена свойств, второе свойство перезапишет первое.</p>
+
+<pre class="brush: js">var a = {x: 1, x: 2};
+console.log(a); // {x: 2}
+</pre>
+
+<p>В строгом режиме ECMAScript 5, повторение имен свойств будет воспринято как {{jsxref("SyntaxError")}}.  С введением вычисляемых имен свойств и появлением возможности создавать дубликаты во время выполнения кода, ECMAScript 2015 убрал это ограничение.</p>
+
+<pre class="brush: js">function haveES2015DuplicatePropertySemantics() {
+ 'use strict';
+ try {
+ ({prop: 1, prop: 2});
+
+ // Не будет ошибки, повторение имен доступно в строгом режиме
+ return true;
+ } catch(e) {
+ // Будет ошибка, дубликаты запрещены в строгом режиме
+ return false;
+ }
+}</pre>
+
+<h3 id="Описание_методов">Описание методов</h3>
+
+<p>Свойство объекта также может ссылаться на <a href="/en-US/docs/Web/JavaScript/Reference/Functions">function</a>, <a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> или <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a>.</p>
+
+<pre class="brush: js">var o = {
+ <var>property: function </var>([<var>parameters</var>]) {},
+ get <var>property</var>() {},
+ set <var>property</var>(<var>value</var>) {}
+};</pre>
+
+<p>В ECMAScript 2015, доступна короткая нотация, поэтому слово "function" более не обязательно.</p>
+
+<pre class="brush: js">// Сокращение имен методов (ES2015)
+var o = {
+ <var>property</var>([<var>parameters</var>]) {},
+ *<var>generator</var>() {}
+};</pre>
+
+<p>В ECMAScript 2015 есть способ кратко объявить свойства, чьими значениями являются генераторы функций:</p>
+
+<pre class="brush: js">var o = {
+ *<var>generator</var>() {
+ ...........
+ }
+};</pre>
+
+<p>Что эквивалентно следующей ES5-подобной нотации (но отметьте, что  ECMAScript 5 не содержит генераторов):</p>
+
+<pre class="brush: js">var o = {
+ generator<var>: function* </var>() {
+ ...........
+ }
+};</pre>
+
+<p>Для большей информации и примеров смотри <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a>.</p>
+
+<h3 id="Вычисляемые_имена_свойств">Вычисляемые имена свойств</h3>
+
+<p>Начиная с ECMAScript 2015, синтаксис объявления объектов также поддерживает вычисляемые имена свойств. Это позволяет добавлять в скобки <code>[] </code>выражение, которое будет вычислено, как имя свойства. Это похоже на скобочную нотацию синтаксиса <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessor</a>, которую вы, вероятно, уже использовали, чтобы прочитать и задать свойство. Теперь можно использовать аналогичный способ с литеральными объектами:</p>
+
+<pre class="brush: js">// Вычисляемое имя свойства (ES2015)
+var i = 0;
+var a = {
+ ['foo' + ++i]: i,
+ ['foo' + ++i]: i,
+ ['foo' + ++i]: i
+};
+
+console.log(a.foo1); // 1
+console.log(a.foo2); // 2
+console.log(a.foo3); // 3
+
+var param = 'size';
+var config = {
+ [param]: 12,
+ ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
+};
+
+console.log(config); // {size: 12, mobileSize: 4}</pre>
+
+<h3 id="Spread-свойства">Spread-свойства</h3>
+
+<p><a href="https://github.com/tc39/proposal-object-rest-spread">Rest/Spread свойство ECMAScript</a> предлагает (stage 3) добавлять <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">spread</a> свойства в литеральную нотацию. Оно копирует собственные перечисляемые свойства из представленного объекта в новый.</p>
+
+<p>Поверхностное копирование (исключая prototype) или слияние объектов теперь возможно с помощью более короткого синтаксиса, чем  {{jsxref("Object.assign()")}}.</p>
+
+<pre class="brush: js">var obj1 = { foo: 'bar', x: 42 };
+var obj2 = { foo: 'baz', y: 13 };
+
+var clonedObj = { ...obj1 };
+// Объект { foo: "bar", x: 42 }
+
+var mergedObj = { ...obj1, ...obj2 };
+// Объект { foo: "baz", x: 42, y: 13 }</pre>
+
+<p>Заметьте, что {{jsxref("Object.assign()")}} вызывает <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setters</a>, тогда как оператор spread нет.</p>
+
+<h3 id="Изменение_Prototype">Изменение Prototype</h3>
+
+<p>Объявление свойства в виде <code>__proto__: value</code> или <code>"__proto__": value</code> не создаст свойства с именем <code>__proto__</code>.  Вместо этого, если предоставляемое значение объект или <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/null"><code>null</code></a>, оно заменит <code>[[Prototype]]</code> создаваемого объекта на это значение.  (Если значение не объект или null, объект не изменится.)</p>
+
+<pre class="brush: js">var obj1 = {};
+assert(Object.getPrototypeOf(obj1) === Object.prototype);
+
+var obj2 = {__proto__: null};
+assert(Object.getPrototypeOf(obj2) === null);
+
+var protoObj = {};
+var obj3 = {'__proto__': protoObj};
+assert(Object.getPrototypeOf(obj3) === protoObj);
+
+var obj4 = {__proto__: 'not an object or null'};
+assert(Object.getPrototypeOf(obj4) === Object.prototype);
+assert(!obj4.hasOwnProperty('__proto__'));
+</pre>
+
+<p>Только одно изменение prototype разрешено через литеральное объявление объекта: несколько изменений prototype вызовут синтаксическую ошибку.</p>
+
+<p>Объявление свойства не через "двоеточие" не изменит знаения prototype: это описание будет выглядеть идентично такому же объявлению свойства с использованием любого другого имени.</p>
+
+<pre class="brush: js">var __proto__ = 'variable';
+
+var obj1 = {__proto__};
+assert(Object.getPrototypeOf(obj1) === Object.prototype);
+assert(obj1.hasOwnProperty('__proto__'));
+assert(obj1.__proto__ === 'variable');
+
+var obj2 = {__proto__() { return 'hello'; }};
+assert(obj2.__proto__() === 'hello');
+
+var obj3 = {['__prot' + 'o__']: 17};
+assert(obj3.__proto__ === 17);
+</pre>
+
+<h2 id="Литеральная_нотация_vs_JSON">Литеральная нотация vs JSON</h2>
+
+<p>Литеральная нотация не то же самое, что и  <strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation (<a href="/en-US/docs/Glossary/JSON">JSON</a>). Хотя они и выглядят аналогично, существует разница между ними:</p>
+
+<ul>
+ <li>JSON позволяет объявление свойств <em>только</em> с помощью синтаксиса <code>"property": value</code>.  Имя свойства должно быть заключено в двойные кавычки и объявление не может быть сокращено.</li>
+ <li>В JSON значения могут быть только строками, числами, массивами, <code>true</code>, <code>false</code>, <code>null</code> или другими (JSON) объектами.</li>
+ <li>Значения-функции (смотри "Методы" выше) не могут быть присвоены свойствам в JSON.</li>
+ <li>Объект вида {{jsxref("Date")}} будет строкой после {{jsxref("JSON.parse()")}}.</li>
+ <li>{{jsxref("JSON.parse()")}} отклонит вычисляемые имена свойств и вернет ошибку.</li>
+</ul>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> and <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a> added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-object-initializer', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Shorthand method/property names and computed property names added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object-initializer', 'Object Initializer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><a href="https://github.com/tc39/proposal-object-rest-spread">Rest/Spread Properties for ECMAScript </a></td>
+ <td>Draft</td>
+ <td>Stage 3 draft.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(1.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>Computed property names</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>7.1</td>
+ </tr>
+ <tr>
+ <td>Shorthand property names</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("33")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>Shorthand method names</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>Spread properties</td>
+ <td>{{CompatChrome(60)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("55")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ <td>{{CompatChrome(1.0)}}</td>
+ </tr>
+ <tr>
+ <td>Computed property names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>7.1</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Shorthand property names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("33")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Shorthand method names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ </tr>
+ <tr>
+ <td>Spread properties</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("55")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></code> / <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">Method definitions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/operator_precedence/index.html b/files/ru/web/javascript/reference/operators/operator_precedence/index.html
new file mode 100644
index 0000000000..2362cdc038
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/operator_precedence/index.html
@@ -0,0 +1,322 @@
+---
+title: Приоритет операторов
+slug: Web/JavaScript/Reference/Operators/Operator_Precedence
+tags:
+ - JavaScript
+ - Операторы
+ - подробности об операторах
+ - приоритет операторов
+translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Приоритет операторов</strong> определяет порядок, в котором операторы выполняются. Операторы с более высоким приоритетом выполняются первыми.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}</div>
+
+
+
+<h2 id="Associativity" name="Associativity">Ассоциативность</h2>
+
+<p>Ассоциативность определяет порядок, в котором обрабатываются операторы с одинаковым приоритетом. Например, рассмотрим выражение:</p>
+
+<pre class="syntaxbox notranslate">a OP b OP c
+</pre>
+
+<p>Левая ассоциативность (слева направо) означает, что оно обрабатывается как <code>(a OP b) OP c</code>, в то время как правая ассоциативность (справа налево) означает, что они интерпретируются как <code>a OP (b OP c)</code>. Операторы присваивания являются право-ассоциативными, так что вы можете написать:</p>
+
+<pre class="brush: js notranslate">a = b = 5;
+</pre>
+
+<p>с ожидаемым результатом, что <code>a</code> и <code>b</code> будут равны 5. Это происходит, потому что оператор присваивания возвращает тот результат, который присваивает. Сначала <code>b</code> становится равным 5, затем <code>a</code> принимает значение <code>b</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush: js notranslate"><code>3 &gt; 2 &amp;&amp; 2 &gt; 1
+// вернёт true
+
+3 &gt; 2 &gt; 1
+// вернёт false, потому что 3 &gt; 2 возвращает true, в свою очередь true &gt; 1 вернёт false
+// Добавление скобок значительно повышает читаемость выражения: (3 &gt; 2) &gt; 1</code></pre>
+
+<h2 id="Table" name="Table">Таблица</h2>
+
+<p>Данная таблица упорядочена с самого высокого приоритета (20) до самого низкого (1).</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <th>Приоритет</th>
+ <th>Тип оператора</th>
+ <th>Ассоциативность</th>
+ <th>Конкретные операторы</th>
+ </tr>
+ <tr>
+ <td>20</td>
+ <td>{{jsxref("Operators/Grouping", "Группировка")}}</td>
+ <td>не определено</td>
+ <td><code>( … )</code></td>
+ </tr>
+ <tr>
+ <td rowspan="4">19</td>
+ <td>{{jsxref("Operators/Property_Accessors", "Доступ к свойствам", "#Dot_notation")}}</td>
+ <td>слева направо</td>
+ <td><code>… . …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/Property_Accessors", "Доступ к свойствам с возможностью вычисления","#Bracket_notation")}}</td>
+ <td>слева направо</td>
+ <td><code>… [ … ]</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/new","new")}} (со списком аргументов)</td>
+ <td>не определено</td>
+ <td><code>new … ( … )</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Guide/Functions">Вызов функции</a></td>
+ <td>слева направо</td>
+ <td><code>… ( <var>… </var>)</code></td>
+ </tr>
+ <tr>
+ <td>18</td>
+ <td>{{jsxref("Operators/new","new")}} (без списка аргументов)</td>
+ <td>справа налево</td>
+ <td><code>new …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">17</td>
+ <td>{{jsxref("Operators/Arithmetic_Operators","Постфиксный инкремент","#Increment")}}</td>
+ <td rowspan="2">не определено</td>
+ <td><code>… ++</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/Arithmetic_Operators","Постфиксный декремент","#Decrement")}}</td>
+ <td><code>… --</code></td>
+ </tr>
+ <tr>
+ <td rowspan="10">16</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_NOT">Логическое отрицание</a></td>
+ <td rowspan="10">справа налево</td>
+ <td><code>! …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT">Побитовое отрицание</a></td>
+ <td><code>~ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus">Унарный плюс</a></td>
+ <td><code>+ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_negation">Унарный минус</a></td>
+ <td><code>- …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment">Префиксный инкремент</a></td>
+ <td><code>++ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement">Префиксный декремент</a></td>
+ <td><code>-- …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a></td>
+ <td><code>typeof …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/void">void</a></td>
+ <td><code>void …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/delete">delete</a></td>
+ <td><code>delete …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/await">await</a></td>
+ <td><code>await …</code></td>
+ </tr>
+ <tr>
+ <td>15</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation">Возведение в степень</a></td>
+ <td>справа налево</td>
+ <td><code>… ** …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">14</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Multiplication">Умножение</a></td>
+ <td rowspan="3">слева направо</td>
+ <td><code>… * …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Division">Деление</a></td>
+ <td><code>… / …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder">Остаток</a></td>
+ <td><code>… % …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">13</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Addition">Сложение</a></td>
+ <td rowspan="2">слева направо</td>
+ <td><code>… + …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Subtraction">Вычитание</a></td>
+ <td><code>… - …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">12</td>
+ <td><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Побитовый сдвиг влево</a></td>
+ <td rowspan="3">слева направо</td>
+ <td><code>… &lt;&lt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Побитовый сдвиг вправо</a></td>
+ <td><code>… &gt;&gt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Сдвиг вправо с заполнением нулей</a></td>
+ <td><code>… &gt;&gt;&gt; …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="6">11</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than_operator">Меньше</a></td>
+ <td rowspan="6">слева направо</td>
+ <td><code>… &lt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than__or_equal_operator">Меньше или равно</a></td>
+ <td><code>… &lt;= …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_operator">Больше</a></td>
+ <td><code>… &gt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_or_equal_operator">Больше или равно</a></td>
+ <td><code>… &gt;= …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/in">in</a></td>
+ <td><code>… in …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/instanceof">instanceof</a></td>
+ <td><code>… instanceof …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="4">10</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality">Равно</a></td>
+ <td rowspan="4">слева направо</td>
+ <td><code>… == …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Inequality">Не равно</a></td>
+ <td><code>… != …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity">Строго равно</a></td>
+ <td><code>… === …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Nonidentity">Строго не равно</a></td>
+ <td><code>… !== …</code></td>
+ </tr>
+ <tr>
+ <td>9</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_AND">Побитовое «И»</a></td>
+ <td>слева направо</td>
+ <td><code>… &amp; …</code></td>
+ </tr>
+ <tr>
+ <td>8</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR">Побитовое исключающее «ИЛИ»</a></td>
+ <td>слева направо</td>
+ <td><code>… ^ …</code></td>
+ </tr>
+ <tr>
+ <td>7</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_OR">Побитовое «ИЛИ»</a></td>
+ <td>слева направо</td>
+ <td><code>… | …</code></td>
+ </tr>
+ <tr>
+ <td>6</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_AND">Логическое «И»</a></td>
+ <td>слева направо</td>
+ <td><code>… &amp;&amp; …</code></td>
+ </tr>
+ <tr>
+ <td>5</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR">Логическое «ИЛИ»</a></td>
+ <td>слева направо</td>
+ <td><code>… || …</code></td>
+ </tr>
+ <tr>
+ <td>4</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Conditional_Operator">Условный</a></td>
+ <td>справа налево</td>
+ <td><code>… ? … : …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="13">3</td>
+ <td rowspan="13"><a href="/ru/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Присваивание</a></td>
+ <td rowspan="13">справа налево</td>
+ <td><code>… = …</code></td>
+ </tr>
+ <tr>
+ <td><code>… += …</code></td>
+ </tr>
+ <tr>
+ <td><code>… -= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… **= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… *= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… /= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… %= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &lt;&lt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &gt;&gt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &gt;&gt;&gt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &amp;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… ^= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… |= …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">2</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/yield">yield</a></td>
+ <td rowspan="2">справа налево</td>
+ <td><code>yield …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/yield*">yield*</a></td>
+ <td><code>yield* …</code></td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td><a href="/ru/docs/Web/JavaScript/Reference/Operators/Comma_Operator">Запятая / Последовательность</a></td>
+ <td>слева направо</td>
+ <td><code>… , …</code></td>
+ </tr>
+ </tbody>
+</table>
diff --git a/files/ru/web/javascript/reference/operators/optional_chaining/index.html b/files/ru/web/javascript/reference/operators/optional_chaining/index.html
new file mode 100644
index 0000000000..30fd29e3c0
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/optional_chaining/index.html
@@ -0,0 +1,176 @@
+---
+title: "Оператор\_опциональной последовательности"
+slug: Web/JavaScript/Reference/Operators/Optional_chaining
+translation_of: Web/JavaScript/Reference/Operators/Optional_chaining
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор <strong>опциональной последовательности</strong> <strong><code>?.</code></strong> позволяет получить значение свойства, находящегося на любом уровне вложенности в цепочке связанных между собой объектов, без необходимости проверять каждое из промежуточных свойств в ней на существование. <span class="seoSummary"> <code>?.</code> работает подобно оператору <code>.</code>, за исключением того, что не выбрасывает исключение, если объект, к свойству или методу которого идёт обращение, равен {{jsxref("null")}} или {{jsxref("undefined")}}. В этих случаях он возвращает <code>undefined</code>.</span></p>
+
+<p>Таким образом, мы получаем более короткий и понятный код при обращении к вложенным по цепочке свойствам объекта, когда есть вероятность, что какое-то из них отсутствует.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-optionalchainingoperator.html", "taller")}}</div>
+
+<div></div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><var>obj</var>?.<var>prop</var>
+<var>obj</var>?.[<var>expr</var>]
+arr?.[index]
+<var>func</var>?.(<var>args</var>)
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Оператор опциональной последовательности предоставляет способ упростить доступ к значениям в цепочке обьектов, когда возможно, что какое-то свойство (или метод) в ней равно <code>undefined</code> или <code>null</code>.</p>
+
+<p>Для примера, создадим обьект <code>obj</code>, имеющий вложенную структуру. Без оператора опциональной последовательности поиск глубоко расположенных подсвойств требует проверки всех промежуточных свойств на существование, например:</p>
+
+<pre class="brush: js">let nestedProp = obj.first &amp;&amp; obj.first.second;</pre>
+
+<p>Если обращаться к <code>obj.first.second</code> без проверки <code>obj.first</code>, то, если свойство <code>obj.first</code> равно <code>null</code> или <code>undefined</code>, выбросится исключение {{jsxref("TypeError")}}.</p>
+
+<p>Однако, с оператором опциональной последовательности (<code>?.</code>) не требуется явно проверять ссылку на <code>obj.first</code> перед обращением к <code>obj.first.second</code>:</p>
+
+<pre class="brush: js">let nestedProp = obj.first?.second;</pre>
+
+<p>Если используется оператор <code>?.</code> вместо <code>.</code>, JavaScript знает о необходимости проверки <code>obj.first</code> перед обращением к <code>obj.first.second</code>. Если значение <code>obj.first</code> равно <code>null</code> или <code>undefined</code>, выполнение выражения автоматически прекращается и возвращается <code>undefined</code>.</p>
+
+<p>Это эквивалентно следующему (кроме создания временной переменной):</p>
+
+<pre>let temp = obj.first;
+let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);</pre>
+
+<h3 id="Опциональная_последовательность_с_вызовом_функции">Опциональная последовательность с вызовом функции</h3>
+
+<p>Вы можете использовать <code>?.</code><strong>, </strong>когда необходимо вызвать метод, которого может не существовать. Это может быть полезно, например, при использовании API, в котором метод может быть недоступен из-за устаревания или неподдерживаемости устройством пользователя.</p>
+
+<p>Использование <code>?.</code><strong> </strong>с вызовом функции значит, что выполнение автоматически вернет <code>undefined</code>, а не выбросит исключение, если метод не найден:</p>
+
+<pre class="brush: js">let result = someInterface.customMethod?.();</pre>
+
+<div class="blockIndicator note">
+<p><strong>Обратите внимание:</strong> Для существующего свойства, не являющегося функцией, использование конструкции <code>x.y?.()</code> всё равно выбросит {{jsxref("TypeError")}} исключение (<code>x.y не является функцией</code>).</p>
+</div>
+
+<h3 id="Работа_с_функциями_обратного_вызова_и_обработчиками_событий">Работа с функциями обратного вызова и обработчиками событий</h3>
+
+<p>Если Вы используете функции обратного вызова или извлекаете методы обьекта <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Разбор_объектов">деструктурирующим присваиванием</a>, Вы можете получить несуществующие значения, которые нельзя вызывать как функции до проверки на их существование. Используя оператор <code>?.</code>, Вы можете избежать лишних проверок:</p>
+
+<pre class="brush: js">// С использованием ES2019
+function doSomething(onContent, onError) {
+ try {
+ // ... делаем что-то с данными
+ }
+ catch (err) {
+ if (onError) { // проверяем, существует ли onError
+ onError(err.message);
+ }
+ }
+}</pre>
+
+<pre class="brush: js">// С использованием оператора опциональной последовательности
+function doSomething(onContent, onError) {
+ try {
+ // ... делаем что-то с данными
+ }
+ catch (err) {
+ onError?.(err.message); // не выбросит исключение, если onError равен undefined
+ }
+}
+</pre>
+
+<h3 id="Опциональные_последовательности_в_выражениях">Опциональные последовательности в выражениях</h3>
+
+<p>Вы также можете использовать оператор опциональной последовательности, когда обращаетесь к свойству с помощью <a href="/ru/docs/Web/JavaScript/Reference/Operators/Property_Accessors#Скобочная_нотация">скобочной нотации</a>:</p>
+
+<pre class="brush: js">let nestedProp = obj?.['prop' + 'Name'];
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Базовый_пример">Базовый пример</h3>
+
+<p>В этом примере производится обращение к свойству <code>name</code> элемента с ключом <code>bar</code> объекта <code>Map</code>. Элемент с таким ключом отсутствует, но исключение выброшено не будет; <code>nameBar</code> равен <code>undefined</code>.</p>
+
+<pre class="brush: js">let myMap = new Map();
+myMap.set("foo", {name: "baz", desc: "inga"});
+
+let nameBar = myMap.get("bar")?.name;</pre>
+
+<h3 id="Сокращенное_выполнение">Сокращенное выполнение</h3>
+
+<p>При использовании оператора опциональной последовательности в выражениях, где левая часть операнда равна <code>null</code> или <code>undefined</code>, выражение не будет выполнено. Например:</p>
+
+<pre class="brush: js">let potentiallyNullObj = null;
+let x = 0;
+let prop = potentiallyNullObj?.[x++];
+
+console.log(x); // 0, т.к. x не был инкрементирован
+</pre>
+
+<h3 id="Совместное_использование_операторов_опциональной_последовательности">Совместное использование операторов опциональной последовательности</h3>
+
+<p>Во вложенных объектах возможно использование оператора опциональной последовательности неограниченное количество раз:</p>
+
+<pre class="brush: js">let customer = {
+ name: "Carl",
+ details: {
+ age: 82,
+ location: "Paradise Falls" // точный адрес неизвестен
+ }
+};
+let customerCity = customer.details?.address?.city;
+
+// … это также работает с вызовами функций
+let duration = vacations.trip?.getTime?.();
+</pre>
+
+<h3 id="Использование_с_оператором">Использование с оператором ??</h3>
+
+<p>Оператор {{JSxRef("Operators/Nullish_Coalescing_Operator", "??", '', 1)}} может использоваться после опциональной последовательности для установления значения по умолчанию:</p>
+
+<pre>let customer = {
+ name: "Carl",
+ details: { age: 82 }
+};
+const customerCity = customer?.city ?? "Unknown city";
+console.log(customerCity); // Unknown city</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Примечание</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="https://tc39.es/proposal-optional-chaining/">Proposal for the "optional chaining" operator</a></td>
+ <td>Stage 4</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.operators.optional_chaining")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://github.com/tc39/proposal-pipeline-operator">Github - Proposal-pipeline-operator</a></li>
+ <li><a href="https://github.com/tc39/proposals">TC39 proposals</a></li>
+ <li>{{JSxRef("Operators/Nullish_Coalescing_Operator", "Nullish Coalescing Operator", '', 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/property_accessors/index.html b/files/ru/web/javascript/reference/operators/property_accessors/index.html
new file mode 100644
index 0000000000..84ba61f9fd
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/property_accessors/index.html
@@ -0,0 +1,203 @@
+---
+title: Property accessors
+slug: Web/JavaScript/Reference/Operators/Property_Accessors
+translation_of: Web/JavaScript/Reference/Operators/Property_Accessors
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Доступ к свойствам объекта можно получить, используя точечную и скобочную записи.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/expressions-propertyaccessors.html", "taller")}}</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">object.property
+object["property"]
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Можно думать об объекте как об ассоциативном массиве (или <em>карте, словаре, хэш-таблице, таблице поиска</em>). <em>Ключи</em> в таком массиве - это имена свойств объекта.</p>
+
+<p>Когда речь идёт о свойствах объекта, обычно различают собственно свойства и методы. Однако разделение свойство/метод это не более чем условность. Метод - это просто свойство, которое можно вызвать (например, если оно содержит ссылку на {{jsxref("Function", "функцию")}} в качестве значения.</p>
+
+<p>Есть два способа доступа к свойствам: точечная и скобочная записи.</p>
+
+<h3 id="Точечная_запись">Точечная запись</h3>
+
+<p class="brush: js">В записи <code>object.property</code>, <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">property</span></font> должно быть действительным <a href="https://wiki.developer.mozilla.org/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Identifier">идентификатором</a>. (В стандарте ECMAScript, имена своств технически называются "IdentifierNames", а не "Identifiers", поэтому зарезервированные слова могут быть использованы в их качестве, но это не рекомендуется). Например, <code>object.$1</code> является верной записью, а <code>object.1</code> - нет.</p>
+
+<pre class="brush: js notranslate">const variable = <var>object</var>.<var>property_name;</var>
+
+<var>object</var>.<var>property_name</var> = value;
+</pre>
+
+<pre class="brush: js notranslate">const object = {};
+
+object.$1 = 'foo';
+console.log(object.$1); // 'foo'
+
+object.1 = 'bar'; // SyntaxError
+console.log(object.1); // SyntaxError</pre>
+
+<p>Здесь метод с именем <code>createElement</code> считывается с объекта <code>document</code> и вызывается.</p>
+
+<pre class="brush: js notranslate">document.createElement('pre')</pre>
+
+<p>Если вы хотите вызвать метод на численном литерале, не имеющий части с экспонентой или точки, отделающей дробную часть, нужно ставить пробел перед точкой, являющейся частью обращения к этому методу, чтобы интерпретатор не посчитал, что это точка отделяет дробную часть числа (или использовать другие способы этого избежать).</p>
+
+<pre class="brush: js notranslate">// SyntaxError, здесь считается, что 77. это число,
+// поэтому такая запись эквивалентна (77.)toExponentional()
+// что является ошибкой
+77.toExponentional()
+// Рабочие варианты:
+77.toExponential()
+77
+.toExponential()
+;(77).toExponential()
+// Здесь первая точка относится к числу, вторая вызывает метод
+// то есть эта запись равносильна (77.).toExponential()
+77..toExponential()
+// Эквивалентно (77.0).toExponential()
+77.0.toExponential()</pre>
+
+<h3 id="Скобочная_запись">Скобочная запись</h3>
+
+<p class="brush: js">В записи <code>object[property_name]</code>, <em><code>property_name</code> - </em>это выражение, вычисляющееся в строку или <a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Symbol">символ</a>. Это может быть любая строка, не обязательно действительный идентификатор, например <code>'1foo'</code>, '<code>!bar!'</code> или даже <code>' '</code> (пробел).</p>
+
+<pre class="brush: js notranslate">const variable = object[property_name]
+object[property_name] = value</pre>
+
+<p>Пример, аналогичный примеру в предыдущем пункте:</p>
+
+<pre class="brush: js notranslate">document['createElement']('pre');
+</pre>
+
+<p>Пробел перед скобкой допускается:</p>
+
+<pre class="brush: js notranslate">document ['createElement']('pre')</pre>
+
+<h3 id="Имена_свойств">Имена свойств</h3>
+
+<p>Имена свойств могут быть строками или <a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Symbol">символами</a>. Любое другое значение приводится к строке. Следующий код выводит <code>'value'</code>, поскольку число <code>1</code> приводится к строке <code>'1'</code>.</p>
+
+<pre class="brush: js notranslate">const object = {}
+object['1'] = 'value'
+console.log(object[1])</pre>
+
+<p>Этот пример также выводит <code>'value',</code> так как и <code>foo</code>, и <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">bar</span></font> приводятся к одной и той же строке.</p>
+
+<pre class="brush: js notranslate">const foo = {unique_prop: 1}
+const bar = {unique_prop: 2}
+const object = {}
+
+object[foo] = 'value';
+console.log(object[bar]);
+</pre>
+
+<p>В движке <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> JavaScript это строка <code>'[object Object]'</code>.</p>
+
+<h3 id="Привязка_методов">Привязка методов</h3>
+
+<p>Метод не привязан к содержащему его объекту. Это значит, что значение <code>this</code> в методах объекта не всегда указывает на него. Вместо этого, <code>this</code> "передаётся" при вызове метода. Смотрите подробнее <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this#Method_binding">this</a></code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Скобочная_запись_или_eval">Скобочная запись или <code>eval</code></h3>
+
+<p>Новички JavaScript часто делают ошибку, используя <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval</a> там, где можно просто использовать скобочную запись.</p>
+
+<p>Например, следующий синтаксис можно часто увидеть в скриптах.</p>
+
+<pre class="brush: js notranslate">x = eval('document.forms.form_name.elements.' + strFormControl + '.value');
+</pre>
+
+<p>Функция <code>eval()</code> очень медленная и её использования следует избегать, когда это возможно. Кроме того, строка <code>strFormControl</code> при таком использовании обязаны содержать действительный идентификатор, что не является обязательным для <code>id</code> полей формы, то есть, например, поле с id <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">1</span></font> не получится получить такой записмью. Лучше вместо этого использовать скобочную запись:</p>
+
+<pre class="brush: js notranslate">x = document.forms["form_name"].elements[strFormControl].value;
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-property-accessors', 'Property Accessors')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.2.1', 'Property Accessors')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.2.1', 'Property Accessors')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/spread_syntax/index.html b/files/ru/web/javascript/reference/operators/spread_syntax/index.html
new file mode 100644
index 0000000000..c96be61337
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/spread_syntax/index.html
@@ -0,0 +1,249 @@
+---
+title: Spread syntax
+slug: Web/JavaScript/Reference/Operators/Spread_syntax
+translation_of: Web/JavaScript/Reference/Operators/Spread_syntax
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<div><strong>Spread syntax</strong> позволяет расширить доступные для итерации элементы (например, массивы или строки) в местах</div>
+
+<ul>
+ <li>для функций: где ожидаемое количество аргументов для вызовов функций равно нулю или больше нуля</li>
+ <li>для элементов (литералов массива)</li>
+ <li>для выражений объектов: в местах, где количество пар "ключ-значение" должно быть равно нулю или больше (для объектных литералов)</li>
+</ul>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-spreadsyntax.html")}}</div>
+
+<p class="hidden">Источник для этого интерактивного примера находится в репозитории на GitHub. Если вы желаете внести свой вклад в этот проект, то, пожалуйста, склонируйте  себе <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и пришлите нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<p>Для вызовов функций:</p>
+
+<pre class="syntaxbox notranslate">myFunction(...iterableObj);
+</pre>
+
+<p>Для литералов массива или строк:</p>
+
+<pre class="syntaxbox notranslate">[...iterableObj, '4', 'five', 6];</pre>
+
+<p>Для литералов объекта (новое в ECMAScript 2018):</p>
+
+<pre class="syntaxbox notranslate">let objClone = { ...obj };</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Spread_в_вызовах_функций">Spread в вызовах функций</h3>
+
+<h4 id="Замена_apply">Замена apply</h4>
+
+<p>Обычно используют {{jsxref( "Function.prototype.apply")}} в случаях, когда хотят использовать элементы массива в качестве аргументов функции.</p>
+
+<pre class="brush: js notranslate">function myFunction(x, y, z) { }
+var args = [0, 1, 2];
+myFunction.apply(null, args);</pre>
+
+<p>С <strong>spread syntax</strong> вышеприведенное можно записать как:</p>
+
+<pre class="brush: js notranslate">function myFunction(x, y, z) { }
+var args = [0, 1, 2];
+myFunction(...args);</pre>
+
+<p>Любой аргумент в списке аргументов может использовать <strong>spread syntax</strong>, и его можно использовать несколько раз.</p>
+
+<pre class="brush: js notranslate">function myFunction(v, w, x, y, z) { }
+var args = [0, 1];
+myFunction(-1, ...args, 2, ...[3]);</pre>
+
+<h4 id="Apply_для_new">Apply для new</h4>
+
+<p>Вызывая конструктор через ключевое слово <code>new</code>, невозможно использовать массив и <code>apply</code> <strong>напрямую </strong>(<code>apply</code> выполняет <code>[[Call]]</code>, а не <code>[[Construct]]</code>).Однако благодаря spread syntax, массив может быть с легкостью использован со словом <code>new:</code></p>
+
+<pre class="brush: js notranslate">var dateFields = [1970, 0, 1]; // 1 Jan 1970
+var d = new Date(...dateFields);
+</pre>
+
+<p>Чтобы использовать <code>new</code> с массивом параметров без spread syntax, вам потребуется использование частичного применения:</p>
+
+<pre class="brush: js notranslate">function applyAndNew(constructor, args) {
+   function partial () {
+    return constructor.apply(this, args);
+   };
+   if (typeof constructor.prototype === "object") {
+    partial.prototype = Object.create(constructor.prototype);
+  }
+  return partial;
+}
+
+
+function myConstructor () {
+   console.log("arguments.length: " + arguments.length);
+   console.log(arguments);
+   this.prop1="val1";
+   this.prop2="val2";
+};
+
+var myArguments = ["hi", "how", "are", "you", "mr", null];
+var myConstructorWithArguments = applyAndNew(myConstructor, myArguments);
+
+console.log(new myConstructorWithArguments);
+// (internal log of myConstructor): arguments.length: 6
+// (internal log of myConstructor): ["hi", "how", "are", "you", "mr", null]
+// (log of "new myConstructorWithArguments"): {prop1: "val1", prop2: "val2"}</pre>
+
+<h3 id="Spread_в_литералах_массива">Spread в литералах массива</h3>
+
+<h4 id="Более_мощный_литерал_массива">Более мощный литерал массива</h4>
+
+<p>Без spread syntax, применение синтаксиса литерала массива для создания нового массива на основе существующего недостаточно и требуется императивный код вместо комбинации методов <code>push</code>, <code>splice</code>, <code>concat</code> и т.д. С spread syntax реализация становится гораздо более лаконичной:</p>
+
+<pre class="brush: js notranslate">var parts = ['shoulders', 'knees'];
+var lyrics = ['head', ...parts, 'and', 'toes'];
+// ["head", "shoulders", "knees", "and", "toes"]
+</pre>
+
+<p>Аналогично развертыванию в массиве аргументов, <code>...</code> может быть использован повсеместно и многократно в литерале массива.</p>
+
+<h4 id="Копирование_массива">Копирование массива</h4>
+
+<pre class="brush: js notranslate">var arr = [1, 2, 3];
+var arr2 = [...arr]; // like arr.slice()
+arr2.push(4);
+
+// arr2 becomes [1, 2, 3, 4]
+// arr remains unaffected
+</pre>
+
+<p><strong>Примечание:</strong> Spread syntax на самом деле переходит лишь на один уровень глубже при копировании массива. Таким образом, он может не подходить для копирования многоразмерных массивов, как показывает следующий пример: (также как и c {{jsxref("Object.assign()")}}) и синтаксис spred </p>
+
+<pre class="brush: js notranslate">const a = [[1], [2], [3]];
+const b = [...a];
+b.shift().shift(); // 1
+// О нет. Теперь на массив "а" относятся также: а
+//[[], [2], [3]]
+</pre>
+
+<h4 id="Лучший_способ_конкатенации_массивов">Лучший способ конкатенации массивов</h4>
+
+<p>Для конкатенации массива часто используется {{jsxref("Array.concat")}}:</p>
+
+<pre class="brush: js notranslate">var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+// Append all items from arr2 onto arr1
+arr1 = arr1.concat(arr2);</pre>
+
+<p>С использованием spread syntax:</p>
+
+<pre class="brush: js notranslate">var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1 = [...arr1, ...arr2];
+</pre>
+
+<p>{{jsxref("Array.unshift")}} часто используется для вставки массива значений в начало существующего массива. Без spread syntax:</p>
+
+<pre class="brush: js notranslate">var arr1 = [0, 1, 2];
+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]</pre>
+
+<p>С использованием spread syntax [Следует отметить, что такой способ создает новый массив <code>arr1</code>. В отличие от {{jsxref("Array.unshift")}}, исходный массив не мутируется]:</p>
+
+<pre class="brush: js notranslate">var arr1 = [0, 1, 2];
+var arr2 = [3, 4, 5];
+arr1 = [...arr2, ...arr1]; // arr1 is now [3, 4, 5, 0, 1, 2]
+</pre>
+
+<h3 id="Spread_в_литералах_объекта">Spread в литералах объекта</h3>
+
+<p>Предложение <a href="https://github.com/tc39/proposal-object-rest-spread">Rest/Spread Properties for ECMAScript</a> (стадия 4) добавляет свойства spread в <a href="/ru/docs/Web/JavaScript/Reference/Operators/Object_initializer">литералы объекта</a>. Оно копирует собственные перечисляемые свойства данного объекта в новый объект.</p>
+
+<p>Поверхностное копирование (без прототипа) или объединение объектов теперь возможно с использованием более короткого, чем {{jsxref("Object.assign()")}}, синтаксиса.</p>
+
+<pre class="brush: js notranslate">var obj1 = { foo: 'bar', x: 42 };
+var obj2 = { foo: 'baz', y: 13 };
+
+var clonedObj = { ...obj1 };
+// Object { foo: "bar", x: 42 }
+
+var mergedObj = { ...obj1, ...obj2 };
+// Object { foo: "baz", x: 42, y: 13 }</pre>
+
+<p>Обратите внимание, что {{jsxref("Object.assign()")}} запускает <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setters</a>, а <strong>spread syntax</strong> нет.</p>
+
+<p>Обратите внимание, что вы не можете заменить или имитировать функцию {{jsxref("Object.assign()")}}:</p>
+
+<pre class="brush: js notranslate">var obj1 = { foo: 'bar', x: 42 };
+var obj2 = { foo: 'baz', y: 13 };
+const merge = ( ...objects ) =&gt; ( { ...objects } );
+
+var mergedObj = merge ( obj1, obj2);
+// Object { 0: { foo: 'bar', x: 42 }, 1: { foo: 'baz', y: 13 } }
+
+var mergedObj = merge ( {}, obj1, obj2);
+// Object { 0: {}, 1: { foo: 'bar', x: 42 }, 2: { foo: 'baz', y: 13 } }</pre>
+
+<p>В приведенном выше примере оператор распространения не работает так, как можно было бы ожидать: он распространяет <em>массив</em> аргументов в литерал <em>объекта</em> благодаря параметру rest.</p>
+
+<h3 id="Только_для_итерируемых_объектов">Только для итерируемых объектов</h3>
+
+<p>Spread syntax ( кроме случаев spread properties) может быть применен только к итерируемым объектам (<a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator">iterable</a> objects) :</p>
+
+<pre class="brush: js notranslate">var obj = {'key1': 'value1'};
+var array = [...obj]; // TypeError: obj is not iterable
+</pre>
+
+<h3 id="Spread_с_большим_количеством_значений">Spread с большим количеством значений</h3>
+
+<p>При использовании spread оператора в вызовах функций необходимо быть внимательным к возможному переполнению в ядре JavaScript. Существует ограничение по максимально возможному количеству аргументов функции. См. <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="The apply() method calls a function with a given this value, and arguments provided as an array (or an array-like object)."><code>apply()</code></a> для уточнения.</p>
+
+<h2 id="Rest_синтаксис_параметры">Rest синтаксис (параметры)</h2>
+
+<p>Синтаксис для rest оператора выглядит таким же как и для spread оператора, однако он используется для деструктуризации массивов и объектов. Фактически, rest оператор противоположен spread оператору: последний раскладывает массив на элементы, тогда как первый собирает много элементов в один. См. <a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">rest parameters.</a></p>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array-initializer')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Defined in several sections of the specification: <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-array-initializer">Array Initializer</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-argument-lists">Argument Lists</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2018', '#sec-object-initializer')}}</td>
+ <td>{{Spec2('ES2018')}}</td>
+ <td>Defined in <a href="http://www.ecma-international.org/ecma-262/9.0/#sec-object-initializer">Object Initializer</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array-initializer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Без изменений.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object-initializer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Без изменений.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.operators.spread")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">Rest parameters</a> (also ‘<code>...</code>’)</li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">fn.apply</a> (also ‘<code>...</code>’)</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/super/index.html b/files/ru/web/javascript/reference/operators/super/index.html
new file mode 100644
index 0000000000..4f3b525185
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/super/index.html
@@ -0,0 +1,186 @@
+---
+title: super
+slug: Web/JavaScript/Reference/Operators/super
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - Классы
+translation_of: Web/JavaScript/Reference/Operators/super
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Ключевое слово <strong>super</strong> используется для вызова функций, принадлежащих родителю объекта.</p>
+
+<p>Выражения: <code>super.prop</code> и <code>super[expr]</code> - действительны в любом методе определения в обоих классах и в литералах объекта.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">super([arguments]); // вызов родительского конструктора.
+super.functionOnParent([arguments]);
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В конструкторе ключевое слово <code>super()</code> используется как функция, вызывающая родительский конструктор. Её необходимо вызвать до первого обращения к ключевому слову <code>this</code> в теле конструктора. Ключевое слово <code>super</code> также может быть использовано для вызова функций родительского объекта.</p>
+
+<h2 id="Пример">Пример</h2>
+
+<h3 id="Использование_super_в_классах">Использование super в классах</h3>
+
+<p>Этот фрагмент кода взят из <a href="https://github.com/GoogleChrome/samples/blob/gh-pages/classes-es6/index.html">classes sample</a> (<a href="https://googlechrome.github.io/samples/classes-es6/index.html">live demo</a>). В этом примере <code>super()</code> вызывается , чтобы предотвратить использования одинакового для классов <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">Rectangle</span></font> and <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">Square</span></font> определения тела конструктора.</p>
+
+<pre class="brush: js notranslate">class Polygon {
+ constructor(height, width) {
+ this.name = 'Polygon';
+ this.height = height;
+ this.width = width;
+ }
+ sayName() {
+ console.log('Hi, I am a ', this.name + '.');
+ }
+}
+
+class Square extends Polygon {
+ constructor(length) {
+ this.height; // ReferenceError, super должен быть вызыван первым!
+
+ // Здесь, вызывается метод конструктора родительского класса с длинами,
+ // указанными для ширины и высоты класса Polygon
+ super(length, length);
+
+ // Примечание: в производных классах, super() необходимо вызывать прежде чем
+ // использывать 'this'. Если этого не сделать будет сообщение об ошибке ссылки.
+ this.name = 'Square';
+ }
+
+ get area() {
+ return this.height * this.width;
+ }
+
+ set area(value) {
+ this.area = value;
+ }
+}</pre>
+
+<h3 id="Супер-вызовы_статических_методов">Супер-вызовы статических методов</h3>
+
+<p>Вы так же можете вызывать super на <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes/static">статических</a> методах.</p>
+
+<pre class="notranslate">class Rectangle {
+ constructor() {}
+ static logNbSides() {
+ return 'У меня 4 стороны,';
+ }
+}
+
+class Square extends Rectangle {
+ constructor() {}
+ static logDescription() {
+ return super.logNbSides() + ' которые все равны';
+ }
+}
+Square.logDescription(); // 'У меня 4 стороны, которые все равны'</pre>
+
+<h3 id="Удаление_свойств_super_вызывает_ошибку">Удаление свойств super вызывает ошибку</h3>
+
+<p>Вы не можете использовать <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete operator</a> и <code>super.prop</code> или <code>super[expr]</code> при удалении родительского класса он выдаст:{{jsxref("ReferenceError")}}.</p>
+
+<pre class="brush: js notranslate">class Base {
+ constructor() {}
+ foo() {}
+}
+class Derived extends Base {
+ constructor() {}
+ delete() {
+ delete super.foo; // это плохо
+ }
+}
+
+new Derived().delete(); // ReferenceError: invalid delete involving 'super'. </pre>
+
+<h3 id="super.prop_не_может_переопределять_свойства_защищённые_от_записи"><code>super.prop</code> не может переопределять свойства, защищённые от записи</h3>
+
+<p>При определении незаписываемых свойств с помощью, например, {{jsxref("Object.defineProperty")}}, <code>super</code> не может перезаписать значение свойства.</p>
+
+<pre class="notranslate">class X {
+ constructor() {
+ Object.defineProperty(this, 'prop', {
+ configurable: true,
+ writable: false,
+ value: 1
+ });
+ }
+}
+
+class Y extends X {
+ constructor() {
+ super();
+ }
+ foo() {
+ super.prop = 2; // Не возможно перезаписать значение.
+ }
+}
+
+var y = new Y();
+y.foo(); // TypeError: "prop" доступен только для чтения
+console.log(y.prop); // 1</pre>
+
+<h3 id="Использование_super.prop_в_объектных_литералах">Использование <code>super.prop</code> в объектных литералах</h3>
+
+<p>Super также можно использовать в <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">объекте инициализатора / литерала</a>. В этом примере, два объекта определяют метод. Во втором объекте, <code>super</code> вызывает первый метод объекта. Это работает с помощью {{jsxref("Object.setPrototypeOf()")}}, с которой мы можем установить прототип для <code>obj2</code> в <code>obj1</code>, так что <code>super</code> может найти <code>method1</code> в <code>obj1</code>.</p>
+
+<pre class="brush: js notranslate">var obj1 = {
+ method1() {
+ console.log("method 1");
+ }
+}
+
+var obj2 = {
+ method2() {
+ super.method1();
+ }
+}
+
+Object.setPrototypeOf(obj2, obj1);
+obj2.method2(); // logs "method 1"
+</pre>
+
+<h2 id="Характеристики">Характеристики</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Характеристики</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-super-keyword', 'super')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-super-keyword', 'super')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_в_браузерах">Совместимость в браузерах</h2>
+
+<p>{{Compat("javascript.operators.super")}}</p>
+
+<div id="compat-mobile"></div>
+
+<h2 id="Gecko_specific_notes">Gecko specific notes</h2>
+
+<ul>
+ <li><code>super()</code> does not yet work as expected for built-in prototypes.</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Классы</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/this/index.html b/files/ru/web/javascript/reference/operators/this/index.html
new file mode 100644
index 0000000000..cfd5ae4385
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/this/index.html
@@ -0,0 +1,412 @@
+---
+title: this
+slug: Web/JavaScript/Reference/Operators/this
+tags:
+ - JavaScript
+ - Operator
+ - Reference
+ - this
+ - свойства языка
+translation_of: Web/JavaScript/Reference/Operators/this
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Поведение ключевого слова <code>this</code> в JavaScript несколько отличается по сравнению с остальными языками. Имеются также различия при использовании <code>this</code> в <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode">строгом</a> и нестрогом режиме.</p>
+
+<p>В большинстве случаев значение <code>this</code> определяется тем, каким образом вызвана функция. Значение <code>this</code> не может быть установлено путем присваивания во время исполнения кода и может иметь разное значение при каждом вызове функции. В ES5 представлен метод {{jsxref('Function.prototype.bind()', 'bind()')}}, который используется для {{jsxref('Operators/this','привязки значения ключевого слова this независимо от того, как вызвана функция','Метод_bind')}}. Также в ES2015 представлены {{jsxref('Functions/Arrow_functions', 'стрелочные функции')}}, которые не создают собственные привязки к <code>this</code> (они сохраняют значение <code>this</code> лексического окружения, в котором были созданы).</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-this.html")}}</div>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории на GitHub. Если вы хотите поучаствовать в создании этого интерактивного примера, склонируйте репозиторий про адресу <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и присылайте пулл-реквест.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">this</pre>
+
+<h3 id="Значение">Значение</h3>
+
+<p>Свойство контекста выполнения кода (global, function или eval), которое в нестрогом режиме всегда является ссылкой на объект, а в строгом режиме может иметь любое значение.</p>
+
+<h2 id="Global_контекст">Global контекст</h2>
+
+<p>В глобальном контексте выполнения (за пределами каких-либо функций) <code>this</code> ссылается на глобальный объект вне зависимости от режима (строгий или нестрогий).</p>
+
+<pre class="brush:js">// В браузерах, объект window также является объектом global:
+console.log(this === window); // true
+
+a = 37;
+console.log(window.a); // 37
+
+this.b = "MDN";
+console.log(window.b) // "MDN"
+console.log(b) // "MDN"
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Note:</strong> Вы всегда можете легко получить объект global, используя глобальное свойство {{jsxref ("globalThis")}}, независимо от текущего контекста, в котором выполняется ваш код.</p>
+</div>
+
+<h2 id="Function_контекст">Function контекст</h2>
+
+<p>В пределах функции значение <code>this</code> зависит от того, каким образом вызвана функция.</p>
+
+<h3 id="Простой_вызов">Простой вызов</h3>
+
+<p>Поскольку следующий код не в {{jsxref('Strict_mode', 'строгом режиме')}}, и значение <code>this</code> не устанавливается вызовом, по умолчанию будет использоваться объект global, которым в браузере является <code>{{domxref('window')}}</code>.</p>
+
+<pre class="brush:js">function f1(){
+ return this;
+}
+
+// В браузере:
+f1() === window; // window - глобальный объект в браузере
+
+// В Node:
+f1() === global; // global - глобальный объект в Node
+</pre>
+
+<p>В строгом режиме, если значение <code>this</code> не установлено в контексте выполнения, оно остается <code>undefined</code>, как показано в следующем примере:</p>
+
+<pre class="brush:js">function f2(){
+ "use strict"; // см. strict mode
+ return this;
+}
+
+f2() === undefined; // true
+</pre>
+
+<div class="note">Во втором примере <code>this</code> должно иметь значение <code>{{jsxref("undefined")}}</code>, потому что функция <code>f2</code> была вызвана напрямую, а не как метод или свойство объекта (например, <code>window.f2()</code>). Реализация этой особенности не поддерживалась в некоторых браузерах, когда они впервые начали поддерживать {{jsxref('Strict_mode', 'строгий режим')}}. В результате они некорректно возвращали объект <code>window</code>.</div>
+
+<p>Для того, чтобы при вызове функции установить <code>this</code> в определенное значение, используйте {{jsxref('Function.prototype.call()', 'call()')}} или {{jsxref('Function.prototype.apply()', 'apply()')}}, как в следующих примерах.</p>
+
+<p><strong>Пример 1</strong></p>
+
+<pre dir="rtl"><code>// </code>В качестве первого аргумента методов<code> call или apply</code> может быть передан объект<code>,
+// на который будет указывать this.</code><code>
+var obj = {a: 'Custom'};
+
+// Это свойство принадлежит глобальному объекту
+var a = 'Global';
+
+function whatsThis() {
+ return this.a; //значение this зависит от контекста вызова функции</code>
+
+<code>}
+
+whatsThis(); // 'Global'
+whatsThis.call(obj); // 'Custom'
+whatsThis.apply(obj); // 'Custom'</code></pre>
+
+<p><strong>Пример 2</strong></p>
+
+<pre>function add(c, d) {
+ return this.a + this.b + c + d;
+}
+
+var o = {a: 1, b: 3};
+
+// Первый параметр - это объект для использования в качестве
+// 'this', последующие параметры передаются как
+// аргументы функции call
+add.call(o, 5, 7); // 16
+
+// Первый параметр - это объект для использования в качестве
+// 'this', второй - массив, чьи члены используются
+// в качестве аргументов функции call
+add.apply(o, [10, 20]); // 34
+</pre>
+
+<p>Обратите внимание, что в нестрогом режиме, если значение, переданное в <code>call</code> или <code>apply как</code> <code>this</code>, не является объектом, будет сделана попытка преобразовать его в объект с помощью внутренней операции <code>ToObject</code>. Таким образом, если переданное значение является примитивом, таким как <code>7</code> или <code>'foo'</code>, оно будет преобразовано в <code>Object</code> с использованием связанного конструктора, так что примитивное число <code>7</code> будет преобразовано в объект так, как будто с помощью <code>new Number(7)</code>, а строка <code>'foo'</code> - как будто с помощью <code>new String('foo')</code>, например</p>
+
+<pre>function bar() {
+ console.log(Object.prototype.toString.call(this));
+}
+
+bar.call(7); // [object Number]
+bar.call('foo'); // [object String]
+</pre>
+
+<h3 id="Метод_bind">Метод <code>bind</code></h3>
+
+<p>ECMAScript 5 представил {{jsxref("Function.prototype.bind()")}}. Вызов <code>f.bind(someObject)</code> создает новую функцию с тем же телом и областью действия, что и <code>f</code>, но там, где в исходной функции используется <code>this</code>, в новой функции оно постоянно будет связано с первым аргументом <code>bind</code>, независимо от того, как функция используется.</p>
+
+<pre>function f() {
+ return this.a;
+}
+
+var g = f.bind({a: 'azerty'});
+console.log(g()); // azerty
+
+var h = g.bind({a: 'yoo'}); // bind only works once!
+console.log(h()); // azerty
+
+var o = {a: 37, f: f, g: g, h: h};
+console.log(o.a, o.f(), o.g(), o.h()); // 37,37, azerty, azerty</pre>
+
+<h3 id="Стрелочные_функции">Стрелочные функции</h3>
+
+<p>В {{jsxref('Functions/Arrow_functions', 'стрелочных функциях')}}, <code>this</code> привязан к окружению, в котором была создана функция. В глобальной области видимости <code>this</code> будет указывать на глобальный объект.</p>
+
+<pre><code>var globalObject = this;
+var foo = (() =&gt; this);
+console.log(foo() === globalObject); // true</code></pre>
+
+<div class="note">
+<p>Note: если аргумент this передаётся в call, bind или apply при вызове стрелочной функции, он будет проигнорирован. Вы всё ещё можете добавить аргументы к вызову, но первый аргумент (thisArg) должен быть установлен в null.</p>
+</div>
+
+<p>Неважно, как стрелочная функция <code>foo()</code> будет вызвана, её значение this будет указывать на глобальный объект. <code>this</code> будет сохранять свое значение, даже если функция <code>foo()</code> будет вызвана как метод объекта (что в обычных функциях связывает <code>this</code> с объектом вызова) или с использованием методов <code>call</code>, <code>apply</code> или <code>bind</code>:</p>
+
+<pre><code>// Вызов функции как метода объекта
+var obj = {foo: foo};
+console.log(obj.foo() === globalObject); // true
+
+// Попытка установить this с помощью call
+console.log(foo.call(obj) === globalObject); // true
+
+// Попытка установить this с помощью bind
+foo = foo.bind(obj);
+console.log(foo() === globalObject); // true</code></pre>
+
+<p>Несмотря ни на что, <code>this</code> стрелочной функции <code>foo()</code> имеет то же значение, что и при создании функции (глобальный объект в примере выше). То же самое касается стрелочных функций, созданных внутри других функций: их <code>this</code> будет привязан к окружению.</p>
+
+<pre><code>// Создаем объект obj, содержащий метод bar, который возвращает функцию,
+// которая возвращает свой this. Возвращаемая функция создана
+// как стрелочная функция, таким образом её this постоянно замкнут
+// на this функции, в которой она создана. </code>Значение bar может быть установлено
+<code>//</code> в вызове, который, в свою очередь, устанавливает значение возвращаемой функции.<code>
+var obj = { bar : function() {
+ var x = (() =&gt; this);
+ return x;
+ }
+ };
+
+// Вызываем bar как метод объекта obj, устанавливая его this на obj
+// Присваиваем ссылку возвращаемой функции переменной fn
+var fn = obj.bar();
+
+// Вызываем fn без установки this, что в обычных функциях указывало бы
+// на глобальный объект или undefined в строгом режиме.
+console.log(fn() === obj); // true</code>
+
+// Но будьте осторожны, если вы ссылаетесь на метод obj, не вызывая его
+var fn2 = obj.bar;
+// Вызов this стрелочной функции изнутри метода bar вернёт теперь window,
+// потому что он следует за this из fn2.
+console.log(fn2()() == window); // true</pre>
+
+<p>В примере выше, функция (назовем её анонимной функцией A), присвоенная методу <code>obj.bar</code>, возвращает другую функцию (назовем её анонимной функцией B) которая создана как стрелочная функция. В результате, <code>this функции B при вызове замкнут на</code> <code>this,</code> принадлежащий <code>obj.bar</code> (функции A). <code>this</code> функции B всегда будет иметь то значение, которое он получил при создании. В примере выше, <code>this функции B</code> указывает на <code>this функции A,которым является</code> obj, таким образом this будет равен <code>obj</code> даже тогда, когда будет вызван методом, который в нормальных условиях устанавливал бы значение this равным <code>undefined</code> или глобальному обьекту (или любым другим методом, как в предыдущем примере в глобальном контексте выполнения).</p>
+
+<h3 id="В_методе_объекта">В методе объекта</h3>
+
+<p>Когда функция вызывается как метод объекта, используемое в этой функции ключевое слово <code>this </code>принимает значение объекта, по отношению к которому вызван метод.</p>
+
+<p>В следующем примере, когда вызвано свойство <code>o.f()</code> , внутри функции <code>this</code> привязано к объекту <code>o.</code></p>
+
+<pre class="brush:js">var o = {
+ prop: 37,
+ f: function() {
+ return this.prop;
+ }
+};
+
+console.log(o.f()); // logs 37
+</pre>
+
+<p>Необходимо отметить, что на поведение <code>this</code> совсем не влияет то, как или где была определена функция. В предыдущем примере мы определили функцию внутри свойства <code>f</code> во время определения объекта <code>o</code>. Однако, мы могли бы также просто определить сначала функцию, а затем закрепить ее за за свойством <code>o.f</code>. В этом случае поведение <code>this</code> не изменится:</p>
+
+<pre class="brush:js">var o = {prop: 37};
+
+function independent() {
+ return this.prop;
+}
+
+o.f = independent;
+
+console.log(o.f()); // logs 37
+</pre>
+
+<p>Эти примеры показывают, что имеет значение только то, что функция была вызвана из свойства <code>f</code> объекта <code>o</code>.</p>
+
+<p>Аналогично, привязывание <code>this</code> обуславливается наличием ближайшей ссылки на объект или свойство. В следующем примере, когда мы вызываем функцию, мы обращаемся к ней как к методу <code>g</code> объекта <code>o.b</code>. На этот раз во время выполнения, <code>this, </code>что находится внутри функции, будет ссылаться на<code> </code> <code>o.b</code>. Тот факт, что объект является членом объекта <code>o</code>, не имеет значения; важна только ближайшая ссылка.</p>
+
+<pre class="brush:js">o.b = {g: independent, prop: 42};
+console.log(o.b.g()); // logs 42
+</pre>
+
+<h4 id="this_в_цепочке_objects_prototype"><code>this</code> в цепочке object's prototype</h4>
+
+<p>Это же представление справедливо и для методов, определенных где-либо в цепочке object's prototype. Если метод находится в цепочке прототипов, то <code>this</code> ссылается на объект, на котором был вызван метод, т.е. так, словно метод является методом самого объекта, а не прототипа.</p>
+
+<pre class="brush:js">var o = {f:function(){ return this.a + this.b; }};
+var p = Object.create(o);
+p.a = 1;
+p.b = 4;
+
+console.log(p.f()); // 5
+</pre>
+
+<p>В этом примере объект, которому присвоена переменная <code>p,</code> не имеет собственного свойства <code>f</code>, а наследует это свойство от своего прототипа. Однако, совершенно неважно, что поиск свойства f в конце концов обнаружит его на объекте <code>o</code>. Поскольку поиск начался с <code>p.f</code>, то и свойство <code>this</code> внутри функции <code>f</code> будет ссылаться на объект <code>p</code>. Таким образом, если <code>f</code> вызывается как метод <code>p</code>, то и <code>this</code> относится к <code>p</code>. Это полезная особенность прототипного наследования JS.</p>
+
+<h4 id="this_с_геттерамисеттерами"><code>this</code> с геттерами/сеттерами</h4>
+
+<p>Все те же утверждения справедливы, если функция вызывается из геттера или сеттера. Для функции, которая используется как геттер или сеттер <code>this</code> привязан к объекту, свойство которого необходимо извлечь через геттер/сеттер.</p>
+
+<pre class="brush:js">function modulus(){
+ return Math.sqrt(this.re * this.re + this.im * this.im);
+}
+
+var o = {
+ re: 1,
+ im: -1,
+ get phase(){
+ return Math.atan2(this.im, this.re);
+ }
+};
+
+Object.defineProperty(o, 'modulus', {
+ get: modulus, enumerable:true, configurable:true});
+
+console.log(o.phase, o.modulus); // logs -0.78 1.4142
+</pre>
+
+<h3 id="В_конструкторе">В конструкторе</h3>
+
+<p>Когда функция используется как конструктор (с ключевым словом <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a></code> ), <code>this</code> связано с создаваемым новым объектом.</p>
+
+<p>Примечание: по умолчанию конструктор возвращает объект, на который ссылается <code>this</code>, но он может вернуть и другой объект (если возвращаемое значение не является объектом, тогда будет возвращен объект с <code>this</code>).</p>
+
+<pre class="brush:js">/*
+ * Конструктор работает таким образом:
+ *
+ * function MyConstructor(){
+ * // фактический код, составляющий тело функции.
+ * // создание свойств с |this| по
+ * // желанию, определяя их значения; например,
+ * this.fum = "nom";
+ * // и т.д.
+ *
+ * // Если функция возвращает выражение,
+ * // возвращающее объект, этот объект будет
+ * // результатом выражения |new|. В обратном случае,
+ * // результат выражения - объект,
+ * // в данный момент привязанный к |this|
+ * // (т.е. наиболее часто встречающийся случай).
+ * }
+ */
+
+function C() {
+ this.a = 37;
+}
+
+var o = new C();
+console.log(o.a); // logs 37
+
+
+function C2() {
+ this.a = 37;
+ return {a: 38};
+}
+
+o = new C2();
+console.log(o.a); // logs 38
+</pre>
+
+<p>В последнем примере (<code>C2</code>), из-за того, что конструктор вернул объект, новый объект, к которому было привязано <code>this</code>, был просто отброшен. (Это фактически делает выражение "<code>this.a = 37;</code>" "мертвым" кодом. Он не является буквально нерабочим, так как он выполняется, но он может быть изъят без каких-либо внешних эффектов.)</p>
+
+<h3 id="call_и_apply"><code>call</code> и <code>apply</code></h3>
+
+<p>Когда в теле функции используется ключевое слово <code>this</code>, его значение может быть привязано к конкретному объекту в вызове при помощи методов <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call">call</a></code> или <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply">apply</a></code>, которые наследуются всеми функциями от <code>Function.prototype</code>.</p>
+
+<pre class="brush:js">function add(c, d) {
+ return this.a + this.b + c + d;
+}
+
+var o = {a: 1, b: 3};
+
+// Первый параметр - это объект, который следует использовать как
+// 'this', последующие параметры передаются
+// как аргументы при вызове функции
+add.call(o, 5, 7); // 1 + 3 + 5 + 7 = 16
+
+// Первый параметр - объект, который следует использовать как
+// 'this', второй параметр - массив,
+// элементы которого используются как аргументы при вызове функции
+add.apply(o, [10, 20]); // 1 + 3 + 10 + 20 = 34
+</pre>
+
+<p>Необходимо отметить, что если методам <code>call</code> и <code>apply</code> передается значение с <code>this</code>, которое не является при этом объектом, будет предпринята попытка конвертировать значение в объект, используя внутреннюю операцию <code>ToObject</code>. Если переданное значение является примитивным типом, например <code>7</code> или <code>'foo'</code>, оно будет преобразовано в объект с использованием родственного конструктора, так примитив <code>7</code> преобразовывается в объект через <code>new Number(7),</code> а строка <code>'foo'</code> в объект через <code>new String('foo'),</code> и т.д.</p>
+
+<pre class="brush:js">function bar() {
+ console.log(Object.prototype.toString.call(this));
+}
+
+bar.call(7); // [object Number]
+</pre>
+
+<h3 id="Как_обработчик_событий_DOM">Как обработчик событий DOM</h3>
+
+<p>Когда функция используется как обработчик событий, <code>this</code> присваивается элементу с которого начинается событие (некоторые браузеры не следуют этому соглашению для слушателей, добавленных динамически с помощью всех методов, кроме <code>addEventListener</code>).</p>
+
+<pre class="brush:js">// Когда вызывается как слушатель, связанный элемент становится синим
+function bluify(e) {
+ // Всегда true
+ console.log(this === e.currentTarget);
+ // true, когда currentTarget и target один объект
+ console.log(this === e.target);
+ this.style.backgroundColor = '#A5D9F3';
+}
+
+// Получить список каждого элемента в документе
+var elements = document.getElementsByTagName('*');
+
+// Добавить bluify как слушателя кликов, чтобы при
+// нажатии на элемент он становился синим
+for (var i = 0; i &lt; elements.length; i++) {
+ elements[i].addEventListener('click', bluify, false);
+}</pre>
+
+<h3 id="В_инлайновом_обработчике_событий">В инлайновом обработчике событий</h3>
+
+<p>Когда код вызван из инлайнового обработчика, <code>this</code> указывает на DOM элемент, в котором расположен код события:</p>
+
+<pre class="brush:js">&lt;button onclick="alert(this.tagName.toLowerCase());"&gt;
+ Показать this
+&lt;/button&gt;
+</pre>
+
+<p>Код выше выведет '<code>button</code>'. Следует отметить, что <code>this</code> будет указывать на DOM элемент только во внешних (не вложенных) функциях:</p>
+
+<pre class="brush:js">&lt;button onclick="alert((function() {return this;} ()));"&gt;
+ Показать вложенный this
+&lt;/button&gt;
+</pre>
+
+<p>В этом случае <code>this</code> вложенной функции не будет установлен, так что будет возвращен global/window объект.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table>
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-this-keyword', 'The this keyword')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+
+
+<p>{{Compat("javascript.operators.this")}}</p>
+
+<h2 id="See_also" name="See_also">Смотри также</h2>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode">Строгий режим</a></li>
+ <li><a href="http://bjorn.tipling.com/all-this">All this</a>, статья о <code>this</code> в разном контексте</li>
+ <li><a href="https://rainsoft.io/gentle-explanation-of-this-in-javascript/">Краткое объяснение ключевого слова 'this' в JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/typeof/index.html b/files/ru/web/javascript/reference/operators/typeof/index.html
new file mode 100644
index 0000000000..f3a5ca27a3
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/typeof/index.html
@@ -0,0 +1,242 @@
+---
+title: typeof
+slug: Web/JavaScript/Reference/Operators/typeof
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/typeof
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор <strong><code>typeof</code></strong> возвращает строку, указывающую тип операнда.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-typeof.html")}}</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<p>Операнд следует за оператором <code>typeof</code>:</p>
+
+<pre class="syntaxbox">typeof <em>operand</em></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<p><code><em>operand</em></code> является выражением, представляющим объект или {{Glossary("Primitive", "примитив")}}, тип которого должен быть возвращен.</p>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В следующей таблице приведены возможные возвращаемые значения <code>typeof</code>. Дополнительная информация о типах и примитивах находится на странице <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Data_structures">структуры данных JavaScript</a>.</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Type</th>
+ <th scope="col">Result</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Undefined</td>
+ <td><code>"undefined"</code></td>
+ </tr>
+ <tr>
+ <td>Null</td>
+ <td><code>"object" </code>(смотрите ниже)</td>
+ </tr>
+ <tr>
+ <td>Boolean</td>
+ <td><code>"boolean"</code></td>
+ </tr>
+ <tr>
+ <td>Number</td>
+ <td><code>"number"</code></td>
+ </tr>
+ <tr>
+ <td>String</td>
+ <td><code>"string"</code></td>
+ </tr>
+ <tr>
+ <td>Symbol (новый тип из ECMAScript 2015)</td>
+ <td><code>"symbol"</code></td>
+ </tr>
+ <tr>
+ <td>Host object (определено JS окружением)</td>
+ <td><em>Зависит от реализации</em></td>
+ </tr>
+ <tr>
+ <td>Function object (реализует [[Call]] в терминах ECMA-262)</td>
+ <td><code>"function"</code></td>
+ </tr>
+ <tr>
+ <td>Любой другой тип</td>
+ <td><code>"object"</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Примеры">Примеры</h2>
+
+<pre class="brush:js">// Числа
+typeof 37 === 'number';
+typeof 3.14 === 'number';
+typeof(42) === 'number';
+typeof Math.LN2 === 'number';
+typeof Infinity === 'number';
+typeof NaN === 'number'; // несмотря на то, что это "Not-A-Number" (не число)
+typeof Number(1) === 'number'; // никогда не используйте эту запись!
+
+
+// Строки
+typeof '' === 'string';
+typeof 'bla' === 'string';
+typeof '1' === 'string'; // обратите внимание, что число внутри строки всё равно имеет тип строки
+typeof (typeof 1) === 'string'; // typeof всегда вернёт в этом случае строку
+typeof String('abc') === 'string'; // никогда не используйте эту запись!
+
+
+// Booleans
+typeof true === 'boolean';
+typeof false === 'boolean';
+typeof Boolean(true) === 'boolean'; // никогда не используйте эту запись!
+
+
+// Символы
+typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
+
+
+// Undefined
+typeof undefined === 'undefined';
+typeof declaredButUndefinedVariable === 'undefined';
+typeof undeclaredVariable === 'undefined';
+
+
+// Объекты
+typeof {a: 1} === 'object';
+
+// используйте <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray">Array.isArray</a> или Object.prototype.toString.call
+// чтобы различить обычные объекты и массивы
+typeof [1, 2, 4] === 'object';
+
+typeof new Date() === 'object';
+
+
+// То что ниже приводит к ошибкам и проблемам. Не используйте!
+typeof new Boolean(true) === 'object';
+typeof new Number(1) === 'object';
+typeof new String('abc') === 'object';
+
+
+// Функции
+typeof function() {} === 'function';
+typeof class C {} === 'function';
+typeof Math.sin === 'function';
+</pre>
+
+<h3 id="null"><code>null</code></h3>
+
+<pre class="brush:js">// Это было определено с рождения JavaScript
+typeof null === 'object';
+</pre>
+
+<p> </p>
+
+<p>В первой реализации JavaScript значения были представлены парой тип тега и значение. Тип тега для объектов равнялся 0. <code>null</code> был представлен как нулевой указатель (0x00 в большинстве платформ). Следовательно, тип тега для <code>null</code> равнялся нулю, поэтому возвращаемое значение <code>typeof</code> является фиктивным. (<a href="http://www.2ality.com/2013/10/typeof-null.html">подробнее</a>)</p>
+
+<p>Исправление было предложено в ECMAScript (через отключение), но <a href="http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null">было отклонено</a>. Это привело бы к тому, что <code>typeof null === 'null'</code>.</p>
+
+<h3 id="Использование_оператора_new">Использование оператора <code>new</code></h3>
+
+<pre class="brush:js">// Все функции-конструкторы, созданные с помощью 'new', будут иметь тип 'object'
+var str = new String('String');
+var num = new Number(100);
+
+typeof str; // Вернёт 'object'
+typeof num; // Вернёт 'object'
+
+// Но существует исключение для конструктора Function
+
+var func = new Function();
+
+typeof func; // Вернёт 'function'
+</pre>
+
+<h3 id="Регулярные_выражения">Регулярные выражения</h3>
+
+<p>Вызываемые регулярные выражения были нестандартным дополнением в некоторых браузерах.</p>
+
+<pre class="brush:js">typeof /s/ === 'function'; // Chrome 1-12 Не соответствует ECMAScript 5.1
+typeof /s/ === 'object'; // Firefox 5+ Соответствует ECMAScript 5.1
+</pre>
+
+<h3 id="Ошибки_связанные_с_временными_мёртвыми_зонами">Ошибки, связанные с временными мёртвыми зонами</h3>
+
+<p>До ECMAScript 2015, гарантировалось, что оператор <code>typeof</code> вернёт строку для любого операнда, с которым он был вызван. Это изменилось после добавления неподнимающихся объявлений <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code> and <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/const">const</a></code> с блочной областью  видимости. Теперь, если переменные объявлены с помощью <code>let</code> и <code>const</code>, и для них вызывается <code>typeof</code> в блоке объявления переменных, но до объявления, то выбрасывается <code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError">ReferenceError</a></code>. Поведение отличается от необъявленных переменных, для которых <code>typeof</code> вернёт 'undefined'. Переменные с блочной областью видимости находятся в "<a href="/ru/docs/Web/JavaScript/Reference/Statements/let#Temporal_Dead_Zone_and_errors_with_let">временной мёртвой зоне</a>", которая длится от начала блока до момента объявления переменных. В этой зоне попытка доступа к переменным выбрасывает исключение.</p>
+
+<pre class="brush: js">typeof undeclaredVariable === 'undefined';
+typeof newLetVariable; let newLetVariable; // ReferenceError
+typeof newConstVariable; const newConstVariable = 'hello'; // ReferenceError
+</pre>
+
+<h3 id="Исключения">Исключения</h3>
+
+<p>Во всех текущих браузерах существует нестандартный host-объект {{domxref("document.all")}}, который имеет тип Undefined.</p>
+
+<pre class="brush:js">typeof document.all === 'undefined';
+</pre>
+
+<p>Хотя спецификация разрешает собственные имена типов для нестандартных экзотических объектов, требуется чтобы эти имена отличались от предопределённых. Ситуация, когда <code>document.all</code> имеет тип <code>undefined</code> должна рассматриваться как исключительное нарушение правил.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-typeof-operator', 'The typeof Operator')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-typeof-operator', 'The typeof Operator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.4.3', 'The typeof Operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-11.4.3', 'The typeof Operator')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.4.3', 'The typeof Operator')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.1</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.operators.typeof")}}</p>
+
+<h2 id="IE-специфичные_замечания">IE-специфичные замечания</h2>
+
+<p>В IE 6, 7 и 8 многие host-объекты являются объектами, но не функциями. Например:</p>
+
+<pre class="brush: js">typeof alert === 'object'</pre>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Operators/instanceof">instanceof</a></code></li>
+ <li><a href="http://es-discourse.com/t/why-typeof-is-no-longer-safe/15">Why typeof is no longer "safe"</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/void/index.html b/files/ru/web/javascript/reference/operators/void/index.html
new file mode 100644
index 0000000000..e415aacae7
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/void/index.html
@@ -0,0 +1,150 @@
+---
+title: void operator
+slug: Web/JavaScript/Reference/Operators/void
+tags:
+ - JavaScript
+ - Операторы
+ - Унарные
+translation_of: Web/JavaScript/Reference/Operators/void
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Оператор <code>void</code></strong> вычисляет переданное <em>выражение</em> и возвращает {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">void <em>expression</em></pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Этот оператор позволяет вставлять выражения, которые производят дополнительные действия, в места, где ожидается {{jsxref("Global_Objects/undefined", "undefined")}}.</p>
+
+<p>Оператор <code>void</code> часто используется для получения примитивного значения <code>undefined</code>, используя <code>"void(0)"</code> (что эквивалентно <code>"void 0"</code>). В подобных случаях можно просто использовать глобальную переменную {{jsxref("Global_Objects/undefined", "undefined")}} (предполагая, что её значение по умолчанию не было изменено).</p>
+
+<h2 id="Самовызывающаяся_функция_(IIFE)">Самовызывающаяся функция (IIFE)</h2>
+
+<p>С оператором void можно использовать самовызывающиеся функции.</p>
+
+<pre class="brush: js">void function iife() {
+ var bar = function () {};
+ var baz = function () {};
+ var foo = function () {
+ bar();
+ baz();
+ };
+ var biz = function () {};
+
+ foo();
+ biz();
+}();
+</pre>
+
+<h2 id="JavaScript_URIs">JavaScript URIs</h2>
+
+<p>Когда браузер переходит по <code>javascript: URI</code>, он вычисляет код в <code>URI</code> и заменяет содержание страницы возвращенным значением, если оно не равно {{jsxref("Global_Objects/undefined", "undefined")}}. Можно воспользоваться оператором <code>void</code> для возврата {{jsxref("Global_Objects/undefined", "undefined")}}. Например:</p>
+
+<pre class="brush: html">&lt;a href="javascript:void(0);"&gt;
+ Click here to do nothing
+&lt;/a&gt;
+
+&lt;a href="javascript:void(document.body.style.backgroundColor='green');"&gt;
+ Click here for green background
+&lt;/a&gt;
+</pre>
+
+<p>Однако заметим, что не рекомендуется использовать псевдо-протокол <code>javascript:</code>.  Лучше прибегнуть к другим альтернативам, таким, как обработчики событий.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-void-operator', 'The void Operator')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-void-operator', 'The void Operator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.4.2', 'The void Operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-11.4.2', 'The void Operator')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.4.2', 'The void Operator')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/undefined">undefined</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/yield/index.html b/files/ru/web/javascript/reference/operators/yield/index.html
new file mode 100644
index 0000000000..04552374c8
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/yield/index.html
@@ -0,0 +1,94 @@
+---
+title: yield
+slug: Web/JavaScript/Reference/Operators/yield
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Генераторы
+ - Итераторы
+ - Оператор
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Operators/yield
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Ключевое слово <code>yield</code> используется для остановки и возобновления функций-генераторов ({{jsxref("Statements/function*", "function*")}} или <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/Legacy_generator_function">legacy generator function</a>).</p>
+
+<p>{{EmbedInteractiveExample("pages/js/expressions-yield.html")}}</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox language-html notranslate"> [<em>rv</em>] = <strong>yield</strong> [[выражение]];</pre>
+
+<dl>
+ <dt><code>выражение</code></dt>
+ <dd>Возвращаемое выражение. Если не указано, то возвращается значение <code>undefined</code>.</dd>
+ <dt><code>rv</code></dt>
+ <dd>Возвращает необязательное значение, которое передаётся в <code>next()</code> генератора, чтобы возобновить его выполнение.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Ключевое слово <code>yield</code> вызывает остановку функции-генератора и возвращает текущее значение выражения, указанного после ключевого слова <code>yield</code>. Его можно рассматривать как аналог ключевого слова <code>return</code> в функции-генераторе.</p>
+
+<p>На самом деле ключевое слово <code>yield</code>  возвращает объект с двумя параметрами, <code>value</code> и <code>done</code>. При этом, <code>value</code> является результатом вычисления выражения после <code>yield</code>, а <code>done</code> указывает, была ли завершена функция-генератор.</p>
+
+<p>Во время остановки на операторе <code>yield</code>, выполнение кода в функции-генераторе не возобновится, пока не будет вызван метод <code>next()</code> возвращаемого функцией <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Generator">объекта-генератора</a>. Это предоставляет непосредственный контроль за выполнением генератора и возвратом его значений.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Следующий фрагмент кода содержит определение функции-генератора и вспомогательной функции:</p>
+
+<pre class="brush: js notranslate">function* foo(){
+ var index = 0;
+ while(index &lt;= 2) // при достижении 2, done в yield станет true, а value undefined;
+ yield index++;
+}</pre>
+
+<p>После того как тело функции-генератора определено, оно может использоваться для получения итератора:</p>
+
+<pre class="brush: js notranslate">var iterator = foo();
+console.log(iterator.next()); // { value:0, done:false }
+console.log(iterator.next()); // { value:1, done:false }
+console.log(iterator.next()); // { value:2, done:false }
+console.log(iterator.next()); // { value:undefined, done:true }
+</pre>
+
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES2015', '#prod-YieldExpression', 'Yield')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#prod-YieldExpression', 'Yield')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.operators.yield")}}</p>
+
+<h2 id="See_also" name="See_also">Cмотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/The_Iterator_protocol">Итераторы</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/function*">Генераторы</a> </li>
+</ul>
+
+<div id="gtx-trans" style="position: absolute; left: 113px; top: 1785px;">
+<div class="gtx-trans-icon"></div>
+</div>
diff --git a/files/ru/web/javascript/reference/operators/yield_star_/index.html b/files/ru/web/javascript/reference/operators/yield_star_/index.html
new file mode 100644
index 0000000000..c20f6969e6
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/yield_star_/index.html
@@ -0,0 +1,227 @@
+---
+title: yield*
+slug: Web/JavaScript/Reference/Operators/yield*
+translation_of: Web/JavaScript/Reference/Operators/yield*
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Выражение <code>yield*</code> </strong>используется для того, чтобы "передать упраевление" функцией-генератором другому {{jsxref("Statements/function*", "генератору")}} или итерируемому объекту.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"> yield* [[expression]];</pre>
+
+<dl>
+ <dt><code>expression</code></dt>
+ <dd>Итерируемый объект</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Выражение <code>yield*</code> в функции-генераторе принимает итерируемый объект и возвращает его значения по очереди, как если бы эта функция-генератор возвращала иъ сама.</p>
+
+<p>Значение выражения <code>yield*</code> само по себе равно посленему значению итурируемого объекта (т.е., того когда <code>done</code> равно true).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Передача_другому_генератору">Передача другому генератору</h3>
+
+<p>В следующем примере, значения полученные из <code>g1()</code> возвращаются из <code>g2</code> вызовами <code>next</code>, как будто бы она вычислила их сама.</p>
+
+<pre class="brush: js notranslate">function* g1() {
+ yield 2;
+ yield 3;
+ yield 4;
+}
+
+function* g2() {
+ yield 1;
+ yield* g1();
+ yield 5;
+}
+
+var iterator = g2();
+
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: 3, done: false }
+console.log(iterator.next()); // { value: 4, done: false }
+console.log(iterator.next()); // { value: 5, done: false }
+console.log(iterator.next()); // { value: undefined, done: true }
+</pre>
+
+<h3 id="Другие_итерируемые_объекты">Другие итерируемые объекты</h3>
+
+<p>Помимо объектов генераторов, <code>yield*</code> может перебирать другие виды итерируемых объектов, т.е. массивы, строки, объекты аргументов и др.</p>
+
+<pre class="brush: js notranslate">function* g3() {
+ yield* [1, 2];
+ yield* "34";
+ yield* Array.from(arguments);
+  // Определение этого итератора ниже
+  yield* new PowesOfTwo(4)
+}
+
+var iterator = g3(5, 6);
+
+// Значения из массива
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+// Из строки
+console.log(iterator.next()); // { value: "3", done: false }
+console.log(iterator.next()); // { value: "4", done: false }
+// Из аргументов
+console.log(iterator.next()); // { value: 5, done: false }
+console.log(iterator.next()); // { value: 6, done: false }
+// Из специального итератора
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: 4, done: false }
+
+console.log(iterator.next()); // { value: undefined, done: true }
+
+// Итератор, который возвращает все степени двойки
+// до maximum включительно
+class PowersOfTwo {
+  constructor(maximum) {
+    this.maximum = maximum
+    this.value = 1
+  }
+  [Symbol.iterator]() {
+    const self = this
+    return {
+      next() {
+        if(self.value &gt; self.maximum) return { done: true }
+
+        const value = self.value
+        self.value *= 2
+        return { done: false, value }
+      }
+    }
+  }
+}
+</pre>
+
+<h3 id="Собственное_значение_выражения_yield*">Собственное значение выражения <code>yield*</code></h3>
+
+<p><code>yield*</code> - это выражение, а не оператор, поэтому оно имеет значение, равное последнему значению итератора </p>
+
+<pre class="brush: js notranslate">function* g4() {
+ yield* [1, 2, 3];
+ return "foo";
+}
+
+var result;
+
+function* g5() {
+ result = yield* g4();
+}
+
+var iterator = g5();
+
+console.log(iterator.next()); // { value: 1, done: false }
+console.log(iterator.next()); // { value: 2, done: false }
+console.log(iterator.next()); // { value: 3, done: false }
+console.log(iterator.next()); // { value: undefined, done: true },
+  // g4() в этой точке вернёт { value: "foo", done: true }
+
+console.log(result); // "foo"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES6', '#', 'Yield')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#', 'Yield')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("27.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("27.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Специфичные_для_Firefox_примечания">Специфичные для Firefox примечания</h2>
+
+<ul>
+ <li>Начиная с Gecko 33 {{geckoRelease(33)}}, разбор выражений yield было приведено к соответствию с последними спецификациями ES6 ({{bug(981599)}}):
+ <ul>
+ <li>Реализована корректная обработка разрыва строки. Разрыва строки между "yield" и "*" быть не может. Такой код вызовет {{jsxref("SyntaxError")}}:
+ <pre class="brush: js notranslate">function* foo() {
+ yield
+ *[];
+}</pre>
+ </li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol">The Iterator protocol</a></li>
+ <li>{{jsxref("Statements/function*", "function*")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("Operators/yield", "yield")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/группировка/index.html b/files/ru/web/javascript/reference/operators/группировка/index.html
new file mode 100644
index 0000000000..ecc180ab21
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/группировка/index.html
@@ -0,0 +1,91 @@
+---
+title: Оператор группировки
+slug: Web/JavaScript/Reference/Operators/Группировка
+tags:
+ - JavaScript
+ - Оператор
+ - Основные выражения
+translation_of: Web/JavaScript/Reference/Operators/Grouping
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Оператор группировки <code>( )</code> контролирует порядок выполнения в выражениях.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-groupingoperator.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"> ( )</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Оператор группировки из пары круглых скобок вокруг выражения или подвыражения, переопределяющего нормальный <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">приоритет операторов</a>, так что выражения с меньшим приоритетом выполняются раньше выражений с большим.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Переопределяем порядок, когда сначала выполняется умножение и деление, а потом сложение и вычитание, чтобы сначала выполнить сложение.</p>
+
+<pre class="brush:js">let a = 1;
+let b = 2;
+let c = 3;
+
+// обычный порядок
+a + b * c // 7
+// выполнится так
+a + (b * c) // 7
+
+// теперь переопределим порядок
+// сложение будет до умножения
+(a + b) * c // 9
+
+// что эквивалентно следующему
+a * c + b * c // 9
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-grouping-operator', 'The Grouping Operator')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-grouping-operator', 'The Grouping Operator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.1.6', 'The Grouping Operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.1.4', 'The Grouping Operator')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<p>{{Compat("javascript.operators.grouping")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">Приоритет операторов</a></li>
+ <li>{{jsxref("Operators/delete", "delete")}}</li>
+ <li>{{jsxref("Operators/typeof", "typeof")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html b/files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html
new file mode 100644
index 0000000000..fa43c6d346
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/конвейерный_оператор/index.html
@@ -0,0 +1,77 @@
+---
+title: Конвейерный оператор
+slug: Web/JavaScript/Reference/Operators/Конвейерный_оператор
+tags:
+ - Experimental
+ - JavaScript
+ - Operator
+ - Оператор
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Operators/Pipeline_operator
+---
+<div>{{jsSidebar("Operators")}} {{SeeCompatTable}}</div>
+
+<p>Экспериментальный конвейерный оператор <code>|&gt;</code> (в настоящее время на этапе 1) позволяет создавать читаемые цепочки вызовов функций. В основном, конвейерный оператор предоставляет возможность вызова функции с одним аргументом, и позволяет написать:</p>
+
+<pre class="brush: js"><code>let url = "%21" |&gt; decodeURI;</code>
+</pre>
+
+<p>Эквивалентный вызов в традиционном синтаксисе выглядит следующим образом:</p>
+
+<pre class="brush: js"><code>let url = decodeURI("%21");</code>
+</pre>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>выражение</em> |&gt; <em>функция</em></pre>
+
+<p>Значение указанного <code>выражения</code> передаётся в <code>функцию</code> в качестве единственного параметра.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Цепочки_вызовов_функций">Цепочки вызовов функций</h3>
+
+<p>Конвейерный оператор позволяет улучшить читаемость кода, в случае когда встречается цепочка из нескольких функций.</p>
+
+<pre class="brush: js">const double = (n) =&gt; n * 2;
+const increment = (n) =&gt; n + 1;
+
+// без конвейерного оператора
+double(increment(double(double(5)))); // 42
+
+// с конвейерным оператором
+5 |&gt; double |&gt; double |&gt; increment |&gt; double; // 42
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a href="http://tc39.github.io/proposal-pipeline-operator/">Pipeline operator draft</a></td>
+ <td>Этап 1</td>
+ <td>Еще не включен в спецификацию ECMAScript.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.operators.pipeline")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="https://github.com/tc39/proposals">TC39 proposals</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/логические_операторы/index.html b/files/ru/web/javascript/reference/operators/логические_операторы/index.html
new file mode 100644
index 0000000000..43878ea58c
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/логические_операторы/index.html
@@ -0,0 +1,299 @@
+---
+title: Логические операторы
+slug: Web/JavaScript/Reference/Operators/Логические_операторы
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<div>Логические операторы используются, как правило, с примитивами {{jsxref("Boolean")}} (логического) типа. В этом случае результатом работы оператора является значение типа Boolean. Между тем операторы &amp;&amp; и || возвращают, вообще говоря, значение одного из операнда, потому при использовании в качестве аргументов этих операторов величин, тип которых отличен от Boolean, тип возвращаемого значения может быть отличным от Boolean.</div>
+
+<div></div>
+
+<h2 id="Описание">Описание</h2>
+
+<p>В таблице приведены описания логических операторов:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <th>Оператор</th>
+ <th>Использование</th>
+ <th>Описание</th>
+ </tr>
+ <tr>
+ <td>Логическое И (&amp;&amp;)</td>
+ <td><code><em>expr1</em> &amp;&amp; <em>expr2</em></code></td>
+ <td>Возвращает значение <code>expr1</code>, если оно может быть преобразовано в false; иначе возвращает значение <code>expr2</code>. Таким образом, при использовании с величинами типа Boolean оператор &amp;&amp; вернет true, если оба операнда могут быть преобразованы в true; иначе оператор &amp;&amp; вернет false. </td>
+ </tr>
+ <tr>
+ <td>Логическое ИЛИ (<code>||</code>)</td>
+ <td><code><em>expr1</em> || <em>expr2</em></code></td>
+ <td>
+ <p>Возвращает значение <code>expr1</code>, если оно может быть преобразовано в true; иначе возвращает значение <code>expr2.</code> Таким образом, при использовании с величинами типа Boolean оператор <code>||</code> вернет <code>true</code> если хоть один из них равен <code>true</code>; в других случаях вернет <code>false</code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td>Логическое НЕ (<code>!</code>)</td>
+ <td><code>!<em>expr</em></code></td>
+ <td>Возвращает false если значение <code>expr </code>можно<font face="Consolas, Liberation Mono, Courier, monospace"> </font>привести к <code>true</code>;  в противоположном случае возвращает <code>true</code>.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Примеры значений выражений, которые могут быть преобразованы в <code>false</code>:</p>
+
+<ul>
+ <li><code>null</code>;</li>
+ <li><code>NaN;</code></li>
+ <li><code>0</code>;</li>
+ <li>пустая строка (<code>""</code>); </li>
+ <li><code>undefined</code>.</li>
+</ul>
+
+<p>Хоть операторы <code>&amp;&amp;</code> и <code>||</code> могут использовать операнды с не булевыми значениями, но они всёравно рассматриваются, как булевы операторы, т.к. их возвращаемые ими значения всегда могут быть сконвертированы в булевы значения.</p>
+
+<h3 id="Короткая_схема_вычислений">Короткая схема вычислений</h3>
+
+<p>Так как логические операторы выполняются слева направо, они проверяются на "короткие вычисления" по следующим правилам:</p>
+
+<ul>
+ <li><code>false &amp;&amp; (<em>anything)</em></code> короткое вычисление дающее false.</li>
+ <li><code>true || (<em>anything)</em></code> короткое замыкание дающее true.</li>
+</ul>
+
+<p>Часть выражения <code>(<em>anything)</em></code> не вычисляется. Если в ней есть вызов функции, то эта функция не будет вызвана.</p>
+
+<p>Например, следующие две функции делают одно и тоже:</p>
+
+<pre class="brush: js">function shortCircuitEvaluation() {
+  doSomething() || doSomethingElse()
+}
+
+function equivalentEvaluation() {
+  var flag = doSomething();
+  if (!flag) {
+    doSomethingElse();
+  }
+}
+</pre>
+
+<p>Однако, следующие выражения дают разный результат в связи с <a href="/ru/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">приоритетом операторов</a>.</p>
+
+<pre class="brush: js">false &amp;&amp; true || true // вернёт true
+false &amp;&amp; (true || true) // вернёт false</pre>
+
+<h3 id="Логическое_И"><a name="Logical_AND">Логическое И (<code>&amp;&amp;</code>)</a></h3>
+
+<p>Следующий код показывает пример оператора <code>&amp;&amp;</code> (логическое И).</p>
+
+<pre class="brush: js">a1 = true &amp;&amp; true // t &amp;&amp; t вернёт true
+a2 = true &amp;&amp; false // t &amp;&amp; f вернёт false
+a3 = false &amp;&amp; true // f &amp;&amp; t вернёт false
+a4 = false &amp;&amp; (3 == 4) // f &amp;&amp; f вернёт false
+a5 = "Cat" &amp;&amp; "Dog" // t &amp;&amp; t вернёт "Dog"
+a6 = false &amp;&amp; "Cat" // f &amp;&amp; t вернёт false
+a7 = "Cat" &amp;&amp; false // t &amp;&amp; f вернёт false
+</pre>
+
+<h3 id="Логическое_ИЛИ"><a name="Logical_OR">Логическое ИЛИ (<code>||</code>)</a></h3>
+
+<p>Это код представляет собой пример оператора <code>||</code> (логическое ИЛИ).</p>
+
+<pre class="brush: js">o1 = true || true // t || t вернёт true
+o2 = false || true // f || t вернёт true
+o3 = true || false // t || f вернёт true
+o4 = false || (3 == 4) // f || f вернёт false
+o5 = "Cat" || "Dog" // t || t вернёт "Cat"
+o6 = false || "Cat" // f || t вернёт "Cat"
+o7 = "Cat" || false // t || f вернёт "Cat"
+</pre>
+
+<h3 id="Логическое_НЕ_!"><a name="Logical_NOT">Логическое НЕ (<code>!</code>)</a></h3>
+
+<p>Следующий код является примером оператора <code>!</code> (логическое НЕ).</p>
+
+<pre class="brush: js">n1 = !true // !t вернёт false
+n2 = !false // !f вернёт true
+n3 = !"Cat" // !t вернёт false
+</pre>
+
+<h3 id="Правила_преобразования">Правила преобразования</h3>
+
+<h4 id="Конвертирование_И_в_ИЛИ">Конвертирование И в ИЛИ</h4>
+
+<p>следующая операция использует булев тип:</p>
+
+<pre class="brush: js">bCondition1 &amp;&amp; bCondition2</pre>
+
+<p>это всегда равно:</p>
+
+<pre class="brush: js">!(!bCondition1 || !bCondition2)</pre>
+
+<h4 id="Конвертирование_ИЛИ_в_И">Конвертирование ИЛИ в И</h4>
+
+<p>эта операция использует булев тип:</p>
+
+<pre class="brush: js">bCondition1 || bCondition2</pre>
+
+<p>что эквивалентно:</p>
+
+<pre class="brush: js">!(!bCondition1 &amp;&amp; !bCondition2)</pre>
+
+<h4 id="Конвертирование_многих_НЕ">Конвертирование многих НЕ</h4>
+
+<p>следующая операция использует булев тип:</p>
+
+<pre class="brush: js">!!bCondition</pre>
+
+<p>что равно:</p>
+
+<pre class="brush: js">bCondition</pre>
+
+<h3 id="Удаление_вложенных_скобок">Удаление вложенных скобок</h3>
+
+<p>Так как логические выражения выполняются слева направо, становится возможным удалить круглые скобки из комплексного выражения, следуя следующим правилам.</p>
+
+<h4 id="Удаление_вложенных_И">Удаление вложенных И</h4>
+
+<p>Это составное выражение использует булев тип:</p>
+
+<pre class="brush: js">bCondition1 || (bCondition2 &amp;&amp; bCondition3)</pre>
+
+<p>что будет равным:</p>
+
+<pre class="brush: js">bCondition1 || bCondition2 &amp;&amp; bCondition3</pre>
+
+<h4 id="Удаление_вложенного_ИЛИ">Удаление вложенного ИЛИ</h4>
+
+<p>Следующее составное выражение использует булев тип:</p>
+
+<pre class="brush: js">bCondition1 &amp;&amp; (bCondition2 || bCondition3)</pre>
+
+<p>всегда равно:</p>
+
+<pre class="brush: js">!(!bCondition1 || !bCondition2 &amp;&amp; !bCondition3)</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.11')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.9">Логический оператор НЕ</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.11">Бинарные логические операторы</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-binary-logical-operators')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.4.9">Логический оператор НЕ</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.11">Бинарные логические операторы</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-binary-logical-operators')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://tc39.github.io/ecma262/#sec-logical-not-operator">Логический оператор НЕ</a>, <a href="http://tc39.github.io/ecma262/#sec-binary-logical-operators">Бинарные логические операторы</a></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td><a href="#Logical_AND">Логическое И (<code>&amp;&amp;</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td><a href="#Logical_OR">Логическое ИЛИ (<code>||</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td><a href="#Logical_NOT">Логическое НЕ (<code>!</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td><a href="#Logical_AND">Логическое И (<code>&amp;&amp;</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td><a href="#Logical_OR">Логическое ИЛИ (<code>||</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td><a href="#Logical_NOT">Логическое НЕ (<code>!</code>)</a></td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Битовые операторы</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/оператор_запятая/index.html b/files/ru/web/javascript/reference/operators/оператор_запятая/index.html
new file mode 100644
index 0000000000..471c81ba88
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/оператор_запятая/index.html
@@ -0,0 +1,103 @@
+---
+title: Оператор Запятая
+slug: Web/JavaScript/Reference/Operators/Оператор_Запятая
+tags:
+ - Оператор запятая
+translation_of: Web/JavaScript/Reference/Operators/Comma_Operator
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Оператор запятая</strong> выполняет каждый из его операндов (слева направо) и возвращает значение последнего операнда.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-commaoperators.html")}}</div>
+
+
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>expr1</em>, <em>expr2, expr3...</em></pre>
+
+<h2 id="Параметры">Параметры</h2>
+
+<dl>
+ <dt><code>expr1</code>, <code>expr2, expr3...</code></dt>
+ <dd>Любые выражения.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Вы можете использовать оператор запятая, когда необходимо включить несколько выражений в место, которое принимает только одно выражение. Наиболее частый пример использования этого оператора - это передача нескольких параметров в цикл <code>for</code>.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Если <code>a</code> это двумерный массив элементов размерностью 10 х 10, то приведенный ниже код использует оператор запятая для одновременного изменения двух переменных за раз.</p>
+
+<p>Следующий код выводит в консоль значения диагональных элементов массива:</p>
+<pre class="brush:js;highlight:[1]">for (let i = 0, j = 9; i &lt;= 9; i++, j--)
+ console.log("a[" + i + "][" + j + "] = " + a[i][j]);</pre>
+
+<p>Заметьте, что запятая при объявлении переменной <code>var</code>, <code>let</code> или <code>const</code> <strong>не</strong> является оператором запятая, так как в данном случае она находится не в выражении. Скорее, это спец символ в объявлении переменных, комбинирующий их множество в одно выражение. Практически, эта запятая ведет себя почти так же, как и запятая.</p>
+
+<pre class="brush: js"> // подобное объявление запрещено в строгом режиме(strict mode)
+
+a = b = 3, c = 4; // возвращает 4 в консоль
+console.log(a); // 3
+x = (y = 5, z = 6); // возвращает 6 в консоль
+console.log(x); // 6
+</pre>
+
+<p>Оператор запятая полностью отличается от запятой в массивах, объектах, аргументах и параметрах функции.</p>
+
+<h3 id="Вычисления_и_возврат_значения">Вычисления и возврат значения</h3>
+
+<p>Другой пример использования оператора запятой – вычисления перед возвратом значения. Как было указано ранее, будет возвращён только последний элемент, но все предыдущие также будут вычислены. Таким образом можно сделать:</p>
+
+<pre class="brush: js">function myFunc () {
+ let x = 0;
+
+ return (x += 1, x); // то же самое, что return ++x;
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-comma-operator', 'Comma operator')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-comma-operator', 'Comma operator')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.14', 'Comma operator')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.14', 'Comma operator')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition</td>
+ </tr>
+ </tbody>
+ </table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+
+
+<p>{{Compat("javascript.operators.comma")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/for">for loop</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html b/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html
new file mode 100644
index 0000000000..f565d7d293
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/операторы_сравнения/index.html
@@ -0,0 +1,285 @@
+---
+title: Операторы сравнения
+slug: Web/JavaScript/Reference/Operators/Операторы_сравнения
+tags:
+ - JavaScript
+ - Операторы
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>В JavaScript имеются как строгие сравнения, так и сравнения с преобразованием типа операндов. Строгие сравнения (к примеру, ===) истинны только в том случае, если типы сравниваемых значений являются одинаковыми (к примеру: string-string, number-number). Однако, чаще используются сравнения с преобразованием типов (к примеру, ==). Такой тип сравнения, перед тем как непосредственно выполнить сравнение, приводит операнды к одному типу. В случае же абстрактного реляционного сравнения, операнды сперва преобразуются в примитивы, затем приводятся к одному типу, и только после этого сравниваются.</p>
+
+<p>Строки сравниваются на основе стандартного лексикографического упорядочения, используя значения Unicode.</p>
+
+<p>Особенности сравнений:</p>
+
+<ul>
+ <li>Две строки строго равны только в том случае, если они имеют одинаковую длину, и те же символы в одинаковой последовательности и соответствующих позициях.</li>
+ <li>Два числа строго равны в том случае, если они численно равны. <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/NaN" title="NaN">NaN</a> не равно ничему, в том числе и NaN. Нули с положительным и отрицательным знаком равны.</li>
+ <li>Два логических значения (boolean) равны только в том случае, если они оба <code>истинны (true)</code> или <code>ложны (false</code>).</li>
+ <li>Два различных объекта никогда не равны как в строгих, так и в абстрактных сравнениях.</li>
+ <li>Сравнение объекта истинно лишь в том случае, если оба операнда ссылаются на один и тот же объект в памяти.</li>
+ <li>Виды <code>null</code> и <code>undefined</code> равны себе как в строгом сравнении, так и в абстрактном.</li>
+</ul>
+
+<p><strong>При использовании сравнения с преобразованием типов, следует быть крайне осторожным, так как это может привести к непредвиденным проблемам, связанным с особенностями конвертации различных типов (см. параграф "Использование операторов равенства").</strong></p>
+
+<h2 id="Операторы_равенства">Операторы равенства</h2>
+
+<h3 id="Равно"><a name="Equality">Равно (==)</a></h3>
+
+<p><em>Оператор равно</em> сначала приводит операнды к одному типу, и затем применяет строгое сравнение. Если оба операнда являются объектами, то JavaScript сравнивает внутренние ссылки, которые равны в том случае, если они ссылаются на один и тот же объект в памяти.</p>
+
+<h4 id="Синтаксис">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate">x == y
+</pre>
+
+<h4 id="Примеры">Примеры</h4>
+
+<pre class="brush: js notranslate"> 1 == 1 // истина
+"1" == 1 // истина
+ 1 == '1' // истина
+ 3 == 5 // ложь
+ 0 == false // истина
+"foo" == "bar" // ложь
+</pre>
+
+<h3 id="Не_равно_!"><a name="Inequality">Не равно (!=)</a></h3>
+
+<p><em>Оператор не равно</em> возвращает <code>true</code> в том случае, если операнды не равны.<em>Он </em>аналогичен оператору равенства, перед сравнением приводит операнды к одному типу. В случае если оба операнда являются объектами,  JavaScript сравнивает внутренние ссылки, которые не равны в том случае, если относятся к разным объектам в памяти.</p>
+
+<h4 id="Синтаксис_2">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate">x != y</pre>
+
+<h4 id="Примеры_2">Примеры</h4>
+
+<pre class="brush: js notranslate">1 != 2 // истина
+1 != "1" // ложь
+1 != '1' // ложь
+1 != true // ложь
+0 != false // ложь
+"foo" != "bar" // истина
+</pre>
+
+<h3 id="Строго_равно"><a name="Identity">Строго равно (===)</a></h3>
+
+<p>Оператор возвращает истину в том случае, если операнды строго равны (см. выше). В отличие от <em>оператора равно</em>, данный оператор <strong>не приводит операнды к одному типу.</strong></p>
+
+<h4 id="Синтаксис_3">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate">x === y</pre>
+
+<h4 id="Примеры_3">Примеры</h4>
+
+<pre class="brush: js notranslate">3 === 3 // истина
+3 === '3' // ложь
+'foo' === 'foo' // истина
+</pre>
+
+<h3 id="Строго_не_равно_!"><a name="Nonidentity">Строго не равно (!==)</a></h3>
+
+<p><em>Оператор строго не равно </em>возвращает истину в том случае, <strong>если операнды не равны, или их типы отличаются друг от друга.</strong></p>
+
+<h4 id="Синтаксис_4">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate">x !== y</pre>
+
+<h4 id="Примеры_4">Примеры</h4>
+
+<pre class="brush: js notranslate">3 !== '3' // истина
+4 !== 3 // истина
+</pre>
+
+<h2 id="Операторы_сравнения">Операторы сравнения</h2>
+
+<h3 id="Больше_>"><a name="Greater_than_operator">Больше (&gt;)</a></h3>
+
+<p><em>Оператор больше</em> возвращает истину в том случае, если значение левого операнда больше, чем правого.</p>
+
+<h4 id="Синтаксис_5">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate">x &gt; y</pre>
+
+<h4 id="Примеры_5">Примеры</h4>
+
+<pre class="brush: js notranslate">4 &gt; 3 // истина
+1 &gt; 5 // ложь
+</pre>
+
+<h3 id="Больше_или_равно_>"><a name="Greater_than_or_equal_operator">Больше или равно (&gt;=)</a></h3>
+
+<p><em>Оператор больше или равно, </em>возвращает истину в том случае, если значение операнда слева больше или равно значению операнда справа.</p>
+
+<h4 id="Синтаксис_6">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate"> x &gt;= y</pre>
+
+<h4 id="Примеры_6">Примеры</h4>
+
+<pre class="brush: js notranslate">4 &gt;= 3 // истина
+3 &gt;= 3 // истина
+</pre>
+
+<h3 id="Меньше&lt;"><a name="Less_than_operator">Меньше(&lt;)</a></h3>
+
+<p><em>Оператор меньше, </em>возвращает истину в том случае, если значение операнда слева меньше, чем значение операнда справа.</p>
+
+<h4 id="Синтаксис_7">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate"> x &lt; y</pre>
+
+<h4 id="Примеры_7">Примеры</h4>
+
+<pre class="brush: js notranslate">3 &lt; 4 // истина
+5 &lt; 2 // ложь
+</pre>
+
+<h3 id="Меньше_или_равно_&lt;"><a id="Less_than_or_equal_operator" name="Less_than_or_equal_operator">Меньше или равно (&lt;=)</a></h3>
+
+<p><em>Оператор меньше или равно, </em>возвращает истину в том случае, если значение операнда слева меньше, или равно значению операнда справа.</p>
+
+<h4 id="Синтаксис_8">Синтаксис</h4>
+
+<pre class="syntaxbox notranslate"> x &lt;= y</pre>
+
+<h4 id="Примеры_8">Примеры</h4>
+
+<pre class="brush: js notranslate">3 &lt;= 4 // истина
+3 &lt;= 3 // истина
+</pre>
+
+<h2 id="Использование_операторов_равенства">Использование операторов равенства</h2>
+
+<p>Стандартные операции равенства с преобразованием типов (<code>==</code> и <code>!=</code>) используют <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3">Абстрактный Алгоритм Эквивалентного Сравнения</a> для сравнения двух операндов. Если у операндов различные типы, то JavaScript пытается привести их к одному типу, перед тем как сравнивать их. К примеру, в выражении <code>5 == '5'</code>, строка справа конвертируется в число, и только потом сравнивается.</p>
+
+<p><em>Операторы строгого равентсва</em> (<code>===</code> и <code>!==</code>) используют Строгий Алгоритм Эквивалентного Сравнения, и предназначены для сравнения операндов одного типа. <strong>Если операнды имеют разные типы, то результат операции сравнения всегда будет ложью.</strong> К примеру, выражение <code>5 !== '5'</code> будет истинным.</p>
+
+<p>Используйте <em>операторы строгого равенства</em> в тех случаях, когда необходимо проверять не только значения операндов, но так же и их типы. Во противном случае, используйте операторы стандартного равенства, которые позволяют сравнить два операнда вне зависимости от их типов.</p>
+
+<p>Когда происходит преобразование типов (т.е в случаях использования нестрогого сравнения), JavaScript преобразует типы String, Number, Boolean и Object, следующим образом:</p>
+
+<ul>
+ <li>При сравнении числа <code>(Number)</code> и строки <code>(String)</code>, JavaScript пытается преобразовать числовой литерал строки в число. Затем полученное число округляется до ближайшего возможного значения типа <code>Number</code>.</li>
+ <li>Если один из операндов является логическим <code>(Boolean)</code>, то он преобразуется в значение типа <code>(Number)</code>. <strong>Если значение логического операнда равняется истине <code>(true)</code>, то значение этого операнда преобразуется в 1. Иначе - в 0 <code>(ложь / false)</code>.</strong></li>
+ <li>Если объект сравнивается с числом или строкой, JavaScript пытается получить значение по умолчанию для данного объекта. Полученное значение преобразуется в примитив, посредством методов <strong><code>valueOf()</code></strong> и <strong><code>toString()</code></strong>. Если преобразовать объект не удается, генерируется ошибка времени выполнения.</li>
+ <li>Обратите внимание на то, что объект преобразуется в примитив, если, и только если, второй операнд является примитивом. В ином случае, операнды сравниваются как объекты, соответственно, операция сравнения вернет истину в том случае, если внутренние ссылки обоих объектов ссылаются на один и тот же объект в памяти.</li>
+</ul>
+
+<div class="note"><strong>Внимание:</strong> Объекты String имеют тип Object, а не String. Такие объекты используются редко, так что следующий код может вас сильно удивить.</div>
+
+<pre class="brush:js notranslate">// Истина, так как оба операнда имеют тип String
+'foo' === 'foo'
+
+var a = new String('foo');
+var b = new String('foo');
+
+// Ложь, так как операнды являются объектами, внутренние ссылки которых, ссылаются на разные объекты в памяти
+a == b
+
+// Ложь, так как операнды являются объектами, внутренние ссылки которых, ссылаются на разные объекты в памяти
+a === b
+
+// Истина, так как объект a (String) будет преобразован в строку 'foo', перед сопоставлением
+a == 'foo' </pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Появление в спецификации. Выполняется в JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Добавлены операторы <code>===</code> и <code>!==</code>. Выполняется в JavaScript 1.3</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.8')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-relational-operators')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-relational-operators')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Определено в нескольких секциях спецификации: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.8">Относительные операторы</a>, <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-11.9">Операторы равенства</a></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th></th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>
+ <p>{{CompatVersionUnknown}}</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table" style="height: 73px; width: 1078px;">
+ <tbody>
+ <tr>
+ <th></th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также"><br>
+ Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Object.is()")}}</li>
+ <li><a href="/ru/docs/Web/JavaScript/Equality_comparisons_and_sameness">Операторы сравнения и одинаковость</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/присваивание/index.html b/files/ru/web/javascript/reference/operators/присваивание/index.html
new file mode 100644
index 0000000000..0517dc2ccd
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/присваивание/index.html
@@ -0,0 +1,66 @@
+---
+title: Присваивание (=)
+slug: Web/JavaScript/Reference/Operators/Присваивание
+tags:
+ - Assignment operator
+ - JavaScript
+ - Language feature
+ - Operator
+ - Reference
+ - Оператор
+ - Оператор присваивания
+ - "Особенность\_языка"
+ - справочник
+translation_of: Web/JavaScript/Reference/Operators/Assignment
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>Простой оператор присваивания (<code>=</code>) используется для присваивания значения переменной. Операция присваивания вычисляется в присваиваемую величину. Присваивание по цепочке (<em>chaining</em>) используется для назначения нескольким переменным одинакового значения.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/expressions-assignment.html")}}</p>
+
+<div></div>
+
+<p class="hidden">Источник для этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в интерактивный проект примеров, пожалуйста, клонируйте https://github.com/mdn/interactive-examples и пришлите нам запрос.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><strong>Оператор:</strong> x = y
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простое_и_цепное_присваивание">Простое и цепное присваивание</h3>
+
+<pre class="brush: js notranslate">// Предположим следующие переменные и их значения
+// x = 5
+// y = 10
+// z = 25
+
+x = y // x будет присвоено значение 10
+x = y = z // x, y и z будут равны 25</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-assignment-operators', 'Assignment operators')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице составлена из структурированных данных. Если Вы хотите внести свой вклад в данные, пожалуйста, посетите https://github.com/mdn/browser-compat-data и отправьте нам запрос.</div>
+
+<p>{{Compat("javascript.operators.assignment")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Assignment">Assignment operators in the JS guide</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/operators/условный_оператор/index.html b/files/ru/web/javascript/reference/operators/условный_оператор/index.html
new file mode 100644
index 0000000000..344d7f21d9
--- /dev/null
+++ b/files/ru/web/javascript/reference/operators/условный_оператор/index.html
@@ -0,0 +1,169 @@
+---
+title: Условный (тернарный) оператор
+slug: Web/JavaScript/Reference/Operators/Условный_оператор
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Operators/Conditional_Operator
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p><strong>Условный (тернарный) оператор</strong> - единственный оператор в JavaScript, принимающий три операнда: условие, за которым следует знак вопроса (?), затем выражение, которое выполняется, если условие истинно, сопровождается двоеточием (:), и, наконец, выражение, которое выполняется, если условие ложно. Он часто используется в качестве укороченного варианта условного оператора <a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else"><code>if</code></a>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><em>условие</em> ? <em>выражение1</em> : <em>выражение2 </em></pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>условие</code></dt>
+ <dd>Выражение, принимающее значение <code>true</code> или <code>false</code>.</dd>
+</dl>
+
+<dl>
+ <dt><code>выражение1</code>, <code>выражение2</code></dt>
+ <dd>Выражения, значения которых могут принадлежать любому типу.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Оператор возвращает значение <code>выражения1</code>, если <code>условие</code> верно, и значение <code>выражения2</code> в противном случае. Например, чтобы вывести сообщение, текст которого зависит от значения переменной <code>isMember</code>, можно использовать такое выражение:</p>
+
+<pre class="brush: js notranslate">"The fee is " + (isMember ? "$2.00" : "$10.00")
+</pre>
+
+<p>Также можно присваивать значения переменным на основе результатов работы тернарного оператора :</p>
+
+<pre class="brush: js notranslate">var elvisLives = Math.PI &gt; 4 ? "Да" : "Нет";</pre>
+
+<p>Возможны множественные тернарные операции (обратите внимание: условный оператор ассоциативен справа):</p>
+
+<pre class="brush: js notranslate">var firstCheck = false,
+ secondCheck = false,
+ access = firstCheck ? "Доступ запрещен" : secondCheck ? "Доступ запрещен" : "Доступ разрешен";
+
+console.log( access ); // выводит в консоль "Доступ разрешен"</pre>
+
+<p>Тернарные операции можно использовать и сами по себе - для выполнения различных операций:</p>
+
+<pre class="brush: js notranslate">var stop = false, age = 16;
+
+age &gt; 18 ? location.assign("continue.html") : stop = true;
+</pre>
+
+<p>Также возможно выполнять несколько операций на каждое сравнение, разделив их запятыми:</p>
+
+<pre class="brush: js notranslate">var stop = false, age = 23;
+
+age &gt; 18 ? (
+ alert("Хорошо, вы можете продолжить."),
+ location.assign("continue.html")
+) : (
+ stop = true,
+ alert("Простите, вы еще так юны!")
+);
+</pre>
+
+<p>При присвоении значения также возможно выполнение более одной операции. В этом случае переменной <strong>будет присвоено то значение, </strong><em><strong>которое стоит последним в списке значений, разделенных запятой</strong></em>.</p>
+
+<pre class="brush: js notranslate">var age = 16;
+
+var url = age &gt; 18 ? (
+ alert("Хорошо, вы можете продолжить."),
+ // alert вернет "undefined", но это будет проигнорировано, потому что
+ // не является последним в списке значений, разделенных запятой
+ "continue.html" // значение будет присвоено, если age &gt; 18
+) : (
+ alert("Вы слишком молоды!"),
+ alert("Простите :-("),
+ // ит.д. ит.д.
+ "stop.html" // значение будет присвоено, если !(age &gt; 18)
+);
+
+location.assign(url); // "stop.html"</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-conditional-operator', 'Условный Оператор')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.12', 'Условный оператор')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11.12', 'Условный оператор')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализация в JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Особенность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Особенность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрие_также">Смотрие также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else">if statement</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/async_function/index.html b/files/ru/web/javascript/reference/statements/async_function/index.html
new file mode 100644
index 0000000000..df0368c62a
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/async_function/index.html
@@ -0,0 +1,179 @@
+---
+title: async function
+slug: Web/JavaScript/Reference/Statements/async_function
+translation_of: Web/JavaScript/Reference/Statements/async_function
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<div>Объявление <code style="font-style: normal; font-weight: normal;"><strong>async function</strong></code> определяет <em>асинхронную функцию</em>, которая возвращает объект {{jsxref("Global_Objects/AsyncFunction","AsyncFunction")}}.</div>
+
+<div class="noinclude">
+<p>Вы также можете  определить async-функции, используя  {{jsxref("Operators/async_function", "выражение async function")}}.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">async function <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>Имя аргумента, который будет передан в функцию.</dd>
+</dl>
+
+<dl>
+ <dt><code>statements</code></dt>
+ <dd>Выражение, содержащее тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>После вызова функция <code>async</code> возвращает {{jsxref("Promise")}}. Когда результат был получен, <code>Promise</code> завершается, возвращая полученное значение.  Когда функция <code>async </code>выбрасывает исключение, <code>Promise</code> ответит отказом с выброшенным (<code>throws</code>) значением.</p>
+
+<p>Функция async может содержать выражение {{jsxref("Operators/await", "await")}}, которое приостанавливает выполнение функции async и ожидает ответа от переданного <code>Promise</code>, затем возобновляя выполнение функции <code>async</code> и возвращая полученное значение.</p>
+
+<p>Ключевое слово <code>await</code> допустимо только в асинхронных функциях. В другом контексте вы получите ошибку <code>SyntaxError</code>.</p>
+
+<div class="note">
+<p>Цель функций async/await упростить использование promises синхронно и воспроизвести некоторое действие над группой  <code>Promises</code>. Точно так же как <code>Promises</code> подобны структурированным callback-ам, async/await подобна комбинации генераторов и promises.</p>
+</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: js notranslate">function resolveAfter2Seconds(x) {
+ return new Promise(resolve =&gt; {
+ setTimeout(() =&gt; {
+ resolve(x);
+ }, 2000);
+ });
+}
+
+async function add1(x) {
+ const a = await resolveAfter2Seconds(20);
+ const b = await resolveAfter2Seconds(30);
+ return x + a + b;
+}
+
+add1(10).then(v =&gt; {
+ console.log(v); // prints 60 after 4 seconds.
+});
+
+async function add2(x) {
+ const a = resolveAfter2Seconds(20);
+ const b = resolveAfter2Seconds(30);
+ return x + await a + await b;
+}
+
+add2(10).then(v =&gt; {
+ console.log(v); // prints 60 after 2 seconds.
+});
+</pre>
+
+<div class="warning">
+<h4 id="Не_путайте_await_и_Promise.all">Не путайте await и Promise.all</h4>
+
+<p>Функция <code>add1</code> приостанавливается на 2 секунды для первого <code>await</code> и еще на 2 для второго. Второй таймер создается только после срабатывания первого. В функции <code>add2</code> создаются оба и оба же переходят в состояние <code>await</code>. В результате функция <code>add2</code> завершится скорее через две, чем через четыре секунды, поскольку таймеры работают одновременно. Однако запускаются они все же не паралелльно, а друг за другом - такая конструкция не означает автоматического использования <code>Promise.all</code>. Если два или более Promise должны разрешаться параллельно, следует использовать <code>Promise.all</code>.</p>
+</div>
+
+<h3 id="Когда_функция_async_выбрасывает_исключение">Когда функция <code>async </code>выбрасывает исключение</h3>
+
+<pre class="brush: js notranslate">async function throwsValue() {
+ throw new Error('oops');
+}
+throwsValue()
+ .then((resolve) =&gt; {
+ console.log("resolve:" + resolve);
+ },
+ (reject) =&gt; {
+ console.log("reject:" + reject);
+ });
+//prints "reject:Error: oops"
+//or
+throwsValue()
+ .then((resolve) =&gt; {
+ console.log("resolve:" + resolve);
+ })
+ .catch((reject) =&gt; {
+ console.log("reject:" + reject);
+ });
+//prints "reject:Error: oops"
+</pre>
+
+<h3 id="Перепись_цепочки_promise_с_использованием_функции_async">Перепись цепочки promise с использованием функции <code>async</code></h3>
+
+<p>API, которое возвращает {{jsxref("Promise")}}, будет возвращать значение в цепочке, тем самым разбивая функцию на много частей. Рассматривая следующий код:</p>
+
+<pre class="brush: js notranslate">function getProcessedData(url) {
+ return downloadData(url) // returns a promise
+ .catch(e =&gt; {
+ return downloadFallbackData(url) // returns a promise
+ })
+ .then(v =&gt; {
+ return processDataInWorker(v); // returns a promise
+ });
+}
+</pre>
+
+<p>он может быть переписан с одним использованием функции <code>async</code>:</p>
+
+<pre class="brush: js notranslate">async function getProcessedData(url) {
+ let v;
+ try {
+ v = await downloadData(url);
+ } catch(e) {
+ v = await downloadFallbackData(url);
+ }
+ return processDataInWorker(v);
+}
+</pre>
+
+<p>Заметьте, что пример выше не содержит <code>await</code> на <code>return</code>, потому что возвращаемое значение функции <code>async</code> неявно обернуто в {{jsxref("Promise.resolve")}}.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Initial definition in ES2017.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES8', '#sec-async-function-definitions', 'async function')}}</td>
+ <td>{{Spec2('ES8')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<div>
+<div class="hidden">Таблица совместимости на этой странице создается из структурированных данных. Если вы хотите внести свой вклад, ознакомьтесь с <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправить нам pull request.</div>
+
+<p>{{Compat("javascript.statements.async_function")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Operators/async_function", "async function expression")}}</li>
+ <li>{{jsxref("AsyncFunction")}} object</li>
+ <li>{{jsxref("Operators/await", "await")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/break/index.html b/files/ru/web/javascript/reference/statements/break/index.html
new file mode 100644
index 0000000000..dfb5840659
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/break/index.html
@@ -0,0 +1,140 @@
+---
+title: break
+slug: Web/JavaScript/Reference/Statements/break
+tags:
+ - JavaScript
+ - Statement
+translation_of: Web/JavaScript/Reference/Statements/break
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Оператор break</strong> прерывает выполнение текущего цикла, переключателя {{jsxref("Statements/switch", "switch")}}, или метки ({{jsxref("Statements/label", "label")}}) блочного выражения и переносит выполнение программы к оператору, следующему за прерванным.</p>
+
+<p> </p>
+
+<p>{{EmbedInteractiveExample("pages/js/statement-break.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>break [<em>label</em>];</code></pre>
+
+<dl>
+ <dt><code>label</code></dt>
+ <dd>Опционально. Идентификатор связанной метки. Если прерываемое выражение не цикл или {{jsxref("Statements/switch", "switch")}}, метка является обязательной.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Инструкция <code>break</code> включает необязательную метку для возможности выхода из блочного выражения. При таком использовании <code>break</code> должен находиться внутри отмеченного блока, который соответствует метке. Отмеченная инструкция может быть любой {{jsxref("Statements/block", "блочной")}} инструкцией; она не обязательно должна являться циклом.</p>
+
+<h2 id="Пример">Пример</h2>
+
+<p>Следующая функция использует инструкцию <code>break</code> для выхода из цикла {{jsxref("Statements/while", "while")}}, когда <code>i</code> станет равно 3, и возвращает значение 3 * <code>x</code>.</p>
+
+<pre class="brush:js;highlight:[6];">function testBreak(x) {
+ var i = 0;
+
+ while (i &lt; 6) {
+ if (i == 3) {
+ break;
+ }
+ i += 1;
+ }
+ return i * x;
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Версия без метки.</td>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Добавлена поддержка метки.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.8', 'Break statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-break-statement', 'Break statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/continue", "continue")}}</li>
+ <li>{{jsxref("Statements/label", "label")}}</li>
+ <li>{{jsxref("Statements/switch", "switch")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/class/index.html b/files/ru/web/javascript/reference/statements/class/index.html
new file mode 100644
index 0000000000..3aab01ee9a
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/class/index.html
@@ -0,0 +1,183 @@
+---
+title: class
+slug: Web/JavaScript/Reference/Statements/class
+translation_of: Web/JavaScript/Reference/Statements/class
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Class declaration</strong> создает новый класс с данным именем на основе прототипного наследования.</p>
+
+<div class="noinclude">
+<p>Можно так же определить класс, используя {{jsxref("Operators/class", "class expression", "", 1)}}. Но в отличае от class expression, class declaration не позволяет снова объявить уже существующий класс, это <strong>приведёт к ошибке типа</strong>.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="brush: js notranslate">class <em>name</em> [extends] {
+ // тело класса
+}
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Как и class expression, тело class declaration будет исполняться в {{jsxref("Strict_mode", "строгом режиме", "", 1)}}. Свойство конструктора является опциональным.</p>
+
+<p>Class declaration не {{Glossary("Hoisting", "поднимается")}} (в отличие от <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">декларируемых функций</a>).</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_class_declaration">Простой class declaration</h3>
+
+<p>В следующем примере сначала определяется класс с именем Polygon, затем он наследуется для создания класса Square. Заметьте, что super(), используемый в конструкторе, может быть использован только в конструкторе и должен быть вызван до того, как будет использовано ключевое слово this.</p>
+
+<pre class="brush: js notranslate">class Polygon {
+ constructor(height, width) {
+ this.name = 'Polygon';
+ this.height = height;
+ this.width = width;
+ }
+}
+
+class Square extends Polygon {
+ constructor(length) {
+ super(length, length);
+  this.name = 'Square';
+ }
+}</pre>
+
+<div class="warning">
+<h3 id="Попытка_объявить_класс_дважды">Попытка объявить класс дважды</h3>
+
+<p>Переопределение класса с помощью class declaration вызовет ошибку типа.</p>
+
+<pre class="brush: js notranslate">class Foo {};
+class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
+</pre>
+
+<p>Та же ошибка будет вызвана, если класс был определен перед использованием class declaration.</p>
+
+<pre class="brush: js notranslate">var Foo = class {};
+class Foo {}; // Uncaught TypeError: Identifier 'Foo' has already been declared
+
+</pre>
+</div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_брузерами">Поддержка брузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoDesktop(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Array subclassing</td>
+ <td>{{CompatChrome(43.0)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Allowed in sloppy mode</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoMobile(45)}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ </tr>
+ <tr>
+ <td>Array subclassing</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(43.0)}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatChrome(43.0)}}</td>
+ </tr>
+ <tr>
+ <td>Allowed in sloppy mode</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(49.0)}}</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td>{{CompatChrome(49.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/function"><code>function</code> declaration</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/const/index.html b/files/ru/web/javascript/reference/statements/const/index.html
new file mode 100644
index 0000000000..351580e6dc
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/const/index.html
@@ -0,0 +1,135 @@
+---
+title: const
+slug: Web/JavaScript/Reference/Statements/const
+tags:
+ - ECMAScript6
+ - JavaScript
+ - const
+ - Константы
+translation_of: Web/JavaScript/Reference/Statements/const
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<div>Значение констант не может быть изменено новым присваиванием, а также не может быть переопределено. Константы (<code>const</code>) подчиняются области видимости уровня блока так же, как переменные, объявленные с использованием ключевого слова <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code>.</div>
+
+<div></div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">const <em>name1 = <em>value1 [</em>, <em>name2</em> = <em>value2</em><em> [</em>, ... [</em>, <em>nameN</em> = <em>valueN]]]</em>;</pre>
+
+<dl>
+ <dt><code>nameN</code></dt>
+ <dd>Имя константы. Подчиняется тем же правилам, что и {{Glossary("identifier", "идентификаторы")}} обычных переменных.</dd>
+ <dt><code>valueN</code></dt>
+ <dd>Значение константы. Может быть любым из тех типов, которые могут быть для переменных, включая функцию.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Это объявление создаёт константу, чья область действия может быть как глобальной, так и локальной внутри блока, в котором она объявлена. Глобальные константы не становятся свойствами объекта window, в отличие от <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/var">var</a></code>-переменных. Инициализация константы обязательна; необходимо указать значение одновременно с объявлением (смысл в том, что потом это значение изменить уже нельзя).</p>
+
+<p><code><strong>const</strong></code> создаёт константу (новую именованную ссылку на область памяти), доступную только для чтения. Это не означает, что указываемое значение неизменно, но это означает, что идентификатор не может быть переназначен. Например, если константа указывает на объект, то сам объект может быть изменён.</p>
+
+<p>Все соображения по поводу <a href="/ru/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_and_errors_with_let">временных мёртвых зон</a>, применимы и к <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/let">let</a></code> и к <code>const</code>.</p>
+
+<p>Имена констант не могут совпадать с именами функций или переменных той же области видимости.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<p>Ниже описаны примеры, демонстрирующие поведение <strong><code>const</code>. </strong>Попробуйте их выполнить в <a href="/ru/docs/Tools/Черновик">простом JavaScript-редакторе</a> или в консоли браузера.</p>
+
+<pre class="brush:js">// Примечание: Идентификаторы констант могут быть объявлены как в верхнем,
+// так и в нижнем регистре. Но правилом хорошего тона является использование
+// верхнего регистра.
+
+// определим MY_FAV как константу и присвоим ей значение 7
+const MY_FAV = 7;
+
+// данное присваивание выдаст ошибку - Uncaught TypeError: Assignment to constant variable.
+MY_FAV = 20;
+
+// напечатает 7
+console.log("my favorite number is: " + MY_FAV);
+
+// попробуем переопределить константу, будет брошено исключение - Uncaught SyntaxError: Identifier 'MY_FAV' has already been declared
+const MY_FAV = 20;
+
+// имя MY_FAV зарезервированно константой выше, данная операция
+// выкинет исключение
+var MY_FAV = 20;
+
+// здесь также будет ошибка
+let MY_FAV = 20;
+
+// Важно отметить свойства области видимости уровня блока
+if (MY_FAV === 7) {
+ // Всё нормально. Создать константу или переменную MY_FAV можно.
+ // (работает так же как и let при объявлении в блоке переменных, которые не const)
+ const MY_FAV = 20;
+
+ // MY_FAV теперь 20
+ console.log("my favorite number is " + MY_FAV);
+
+ // это попадёт в глобальный контекст и выдаст ошибку
+ var MY_FAV = 20;
+}
+
+// MY_FAV все ещё имеет значение 7
+console.log("my favorite number is " + MY_FAV);
+
+// Выдаст ошибку, потому что константа не инициализирована - Uncaught SyntaxError: Missing initializer in const declaration
+const FOO;
+
+// const также работает с объектами
+const MY_OBJECT = {"key": "value"};
+
+// Попытка переопределить ссылку на объект вызовет исключение - Uncaught TypeError: Assignment to constant variable.
+MY_OBJECT = {"OTHER_KEY": "value"};
+
+// но, свойства объекта (ключи) можно изменять
+MY_OBJECT.key = "otherValue"; // Используйте <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze">Object.freeze()</a> для того, чтобы сделать объект неизменяемым
+
+// То же самое применимо к массивам
+const MY_ARRAY = [];
+// Например, можно добавлять элементы в массив
+MY_ARRAY.push("A"); // ["A"]
+// Но менять ссылку на объект массива нельзя. Это вызовет исключение - Uncaught TypeError: Assignment to constant variable
+MY_ARRAY = ["B"]
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первоначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Нет изменений</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+
+
+<p>{{Compat("javascript.statements.const")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/var"><code>var</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/let"><code>let</code></a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Constants">Константы в справочнике JavaScript</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/continue/index.html b/files/ru/web/javascript/reference/statements/continue/index.html
new file mode 100644
index 0000000000..5cb41da72a
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/continue/index.html
@@ -0,0 +1,200 @@
+---
+title: continue
+slug: Web/JavaScript/Reference/Statements/continue
+tags:
+ - JavaScript
+ - Statement
+translation_of: Web/JavaScript/Reference/Statements/continue
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p>Инструкция <strong>continue</strong> прерывает выполнение текущей итерации текущего или отмеченного цикла, и продолжает его выполнение на следующей итерации.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">continue [ label ];</pre>
+
+<dl>
+ <dt><code>label</code></dt>
+ <dd>Идентификатор, являющийся меткой (<code>label</code>) инструкции.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>По сравнению с инструкцией {{jsxref("Statements/break", "break")}}, <code>continue</code> прерывает выполнение цикла не полностью, вместо этого:</p>
+
+<ul>
+ <li>В цикле {{jsxref("Statements/while", "while")}} оно переносит поток выполнения к условию.</li>
+</ul>
+
+<ul>
+ <li>В цикле {{jsxref("Statements/for", "for")}} оно переносит поток выполнения к финальному выражению в описании цикла.</li>
+</ul>
+
+<p>Инструкция <code>continue</code> может использоваться вместе с необязательной меткой, которая будет начинать следующую итерацию отмеченного цикла, а не текущего. В этом случае, <code>continue</code> должен находиться внутри отмеченного блока, который соответствует метке.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_continue_with_while" name="Example:_Using_continue_with_while">Использование <code>continue</code> с циклом <code>while</code></h3>
+
+<p>Пример показывает использование цикла {{jsxref("Statements/while", "while")}} вместе с инструкцией <code>continue, которая выполняется, когда</code> <code>i</code> станет равно 3-м. Таким образом, <code>n</code> принимает значения 1, 3, 7 и 12.</p>
+
+<pre class="brush: js">i = 0;
+n = 0;
+while (i &lt; 5) {
+ i++;
+ if (i === 3) {
+ continue;
+ }
+ n += i;
+}
+</pre>
+
+<h3 id="Использование_continue_вместе_с_меткой">Использование <code>continue</code> вместе с меткой</h3>
+
+<p>В примере цикл, отмеченный <code>checkiandj</code>, содержит внутри себя цикл, отмеченный <code>checkj</code>. Если встретится инструкция <code>continue</code>, выполнение кода продолжится в начале блока кода <code>checkj</code>. При каждом вызове <code>continue цикл</code> <code>checkj</code> будет начинать новую итерацию, пока условие не начнёт возвращать <code>false</code>. Когда это случится, продолжится выполнение оставшейся части цикла <code>checkiandj</code>.</p>
+
+<p>Если бы <code>continue</code> имело метку <code>checkiandj</code>, программа продолжала бы свою работу с начала цикла <code>checkiandj</code>.</p>
+
+<p>Смотрите также {{jsxref("Statements/label", "label")}}.</p>
+
+<pre class="brush: js">var i = 0,
+ j = 8;
+
+checkiandj: while (i &lt; 4) {
+ console.log("i: " + i);
+ i += 1;
+
+ checkj: while (j &gt; 4) {
+ console.log("j: "+ j);
+ j -= 1;
+ if ((j % 2) == 0)
+ continue checkj;
+ console.log(j + " является нечётным.");
+ }
+ console.log("i = " + i);
+ console.log("j = " + j);
+}
+</pre>
+
+<p>Вывод:</p>
+
+<pre class="brush: js">"i: 0"
+
+// начало checkj
+"j: 8"
+"7 является нечётным."
+"j: 7"
+"j: 6"
+"5 является нечётным."
+"j: 5"
+// конец checkj
+
+"i = 1"
+"j = 4"
+
+"i: 1"
+"i = 2"
+"j = 4"
+
+"i: 2"
+"i = 3"
+"j = 4"
+
+"i: 3"
+"i = 4"
+"j = 4"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Версия без метки.</td>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Добавлена поддержка метки.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.7', 'Continue statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-continue-statement', 'Continue statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/break", "break")}}</li>
+ <li>{{jsxref("Statements/label", "label")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/debugger/index.html b/files/ru/web/javascript/reference/statements/debugger/index.html
new file mode 100644
index 0000000000..f6f1c58674
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/debugger/index.html
@@ -0,0 +1,124 @@
+---
+title: debugger
+slug: Web/JavaScript/Reference/Statements/debugger
+tags:
+ - JavaScript
+ - Отладка
+translation_of: Web/JavaScript/Reference/Statements/debugger
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Выражение <strong>debugger </strong>открывает доступ к любому доступному в конкретном окружении отладочному функционалу, например к установке точек останова (т.н. брейкпоинтов). Если функционал отладки в среде выполнения недоступен, данное выражение не будет иметь никакого эффекта.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox"><code>debugger;</code></pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий пример показывает код, содержащий выражение <strong>debugger. </strong>Это позволяет вызвать функционал отладки (если таковой может быть использован) при вызове функции.</p>
+
+<pre class="brush:js">function potentiallyBuggyCode() {
+ debugger;
+ // чтобы протестировать работу отладчика, поместите здесь код, заведомо содержащий ошибку
+}</pre>
+
+<p>При вызове отладчика выполнение скрипта приостановится в том месте, где находится выражение <strong>debugger</strong>, что равноценно<strong> </strong>действию установленных в скрипте точек останова.</p>
+
+<p><a href="https://mdn.mozillademos.org/files/6963/Screen Shot 2014-02-07 at 9.14.35 AM.png"><img alt="Paused at a debugger statement." src="https://mdn.mozillademos.org/files/6963/Screen%20Shot%202014-02-07%20at%209.14.35%20AM.png" style="height: 371px; width: 700px;"></a></p>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-debugger-statement', 'Debugger statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-debugger-statement', 'Debugger statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.15', 'Debugger statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Исходное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-7.5.3', 'Debugger statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-7.4.3', 'Debugger statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Упоминается только в качестве зарезервированного слова.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузеров">Поддержка браузеров</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Debugging_JavaScript">Debugging JavaScript</a></li>
+ <li><a href="/en-US/docs/Tools/Debugger">The Debugger in the Firefox Developer Tools</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/default/index.html b/files/ru/web/javascript/reference/statements/default/index.html
new file mode 100644
index 0000000000..5a6438e9c7
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/default/index.html
@@ -0,0 +1,116 @@
+---
+title: default
+slug: Web/JavaScript/Reference/Statements/default
+tags:
+ - JavaScript
+ - Keyword
+ - Switch
+ - export
+translation_of: Web/JavaScript/Reference/Statements/switch
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>В JavaScript ключевое слово <strong>default </strong>используется в двух случаях: внутри конструкции {{jsxref("Statements/switch", "switch")}} или с конструкцией {{jsxref("Statements/export", "export")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<p>В конструкции {{jsxref("Statements/switch", "switch")}}:</p>
+
+<pre class="syntaxbox">switch (expression) {
+ case value1:
+ // Выражение выполнится, когда значение expression соответствует value1
+ [break;]
+ default:
+ // Выражение выполнится, когда ни одно из значений не будет соответствовать значению expression
+ [break;]
+}</pre>
+
+<p>С конструкцией {{jsxref("Statements/export", "export")}}:</p>
+
+<pre class="syntaxbox">export default <em>nameN</em> </pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Для получения дополнительной информации смотрите:</p>
+
+<ul>
+ <li>{{jsxref("Statements/switch", "switch")}}</li>
+ <li>{{jsxref("Statements/export", "export")}}</li>
+</ul>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_default_в_switch">Использование <code>default</code> в  <code>switch</code></h3>
+
+<p>В следующем примере, если <code>expr</code> имеет значение  "Апельсины" или "Яблоки", то программа сопоставит это значение с "Апельсины" или с "Яблоки", а затем выполнит соответствующее выражение. В других случаях поможет ключевое слово <strong>default,</strong>  выполня связанное выражение.</p>
+
+<pre class="brush: js">switch (expr) {
+ case 'Апельсины':
+ console.log('Апельсины стоят $0.59 за фунт.');
+ break;
+ case 'Яблоки':
+ console.log('Яблоки стоят $0.32 за фунт.');
+ break;
+ default:
+ console.log(`Извините, у нас закончились ${expr}.`);
+}</pre>
+
+<h3 id="Использование_default_с_export">Использование <code>default</code> с<font face="Open Sans, arial, sans-serif"> </font><code>export</code></h3>
+
+<p>При необходимости экспорта единственного значения или резервирования (fallback) значения для модуля, можно воспользоваться<strong> </strong>экспортом по-умолчанию: </p>
+
+<pre class="brush: js">// модуль "my-module.js"
+let cube = function cube(x) {
+ return x * x * x;
+};
+export default cube;</pre>
+
+<p>Тогда, в другом файле JavaScript, становится возможным просто импортировать экспортируемое по-умолчанию значение:</p>
+
+<pre class="brush: js">// модуль "my-module.js"
+import myFunction from 'my-module';
+console.log(myFunction(3)); // 27
+</pre>
+
+<h2 id="Спецификация">Спецификация</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-switch-statement', 'switch statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-exports', 'Exports')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-switch-statement', 'switch statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-exports', 'Exports')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.statements.default")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/export", "export")}}</li>
+ <li>{{jsxref("Statements/switch", "switch")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/do...while/index.html b/files/ru/web/javascript/reference/statements/do...while/index.html
new file mode 100644
index 0000000000..f6707b4b04
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/do...while/index.html
@@ -0,0 +1,94 @@
+---
+title: do...while
+slug: Web/JavaScript/Reference/Statements/do...while
+translation_of: Web/JavaScript/Reference/Statements/do...while
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Выражение <strong><code>do...while</code></strong> создает цикл, который выполняет указанное выражение до тех пор, пока условие не станет ложным. Условие проверяется после выполнения выражения, то есть выражение выполнится как минимум один раз.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/statement-dowhile.html")}}</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">do
+ <em>выражение</em>
+while (<em>условие</em>);
+</pre>
+
+<dl>
+ <dt><code>выражение</code></dt>
+ <dd>Выражение, которое выполняется как минимум один раз и выполняется на каждом шаге цикла, пока условие истинно. Выражение может содержать несколько строк, для этого необходимо сгруппировать код в {{jsxref("Statements/block", "блок")}} (<code>{ ... }</code>).</dd>
+</dl>
+
+<dl>
+ <dt><code>условие</code></dt>
+ <dd>Выражение, которое вычисляется после каждого шага цикла. Если <code>условие</code> истинно, то <code>выражение</code> выполняется еще раз. Когда <code>условие</code> ложно, выполняется выражение, следующее после <code>do...while</code>.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_do...while">Использование <code>do...while</code></h3>
+
+<p>В примере, цикл <code>do...while</code> выполняется до тех пор, пока <code>i</code> не перестанет быть меньше 5.</p>
+
+<h3 id="HTML">HTML</h3>
+
+<pre class="brush: html">&lt;div id="example"&gt;&lt;/div&gt;</pre>
+
+<h3 id="JavaScript">JavaScript</h3>
+
+<pre class="brush: js">var result = '';
+var i = 0;
+do {
+ i += 1;
+ result += i + ' ';
+} while (i &gt; 0 &amp;&amp; i &lt; 5); // Немотря на то, что i == 0, цикл всё равно продолжится, так как начинается без теста
+document.getElementById('example').innerHTML = result;</pre>
+
+<h3 id="Результат">Результат</h3>
+
+<p>{{ EmbedLiveSample('Примеры') }}</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.2</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.6.1', 'do-while statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-do-while-statement', 'do-while statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Использование ; теперь необязательно</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-do-while-statement', 'do-while statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_в_браузерах">Поддержка в браузерах</h2>
+
+<p>{{Compat("javascript.statements.do_while")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/while", "while")}}</li>
+ <li>{{jsxref("Statements/for", "for")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/empty/index.html b/files/ru/web/javascript/reference/statements/empty/index.html
new file mode 100644
index 0000000000..89956bf163
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/empty/index.html
@@ -0,0 +1,148 @@
+---
+title: Пустая инструкция
+slug: Web/JavaScript/Reference/Statements/Empty
+tags:
+ - 'Statement, инструкция, пустая инструкция'
+translation_of: Web/JavaScript/Reference/Statements/Empty
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Пустая инструкция</strong> используется, когда инструкция не нужна, хотя синтаксис JavaScript будет предполагать её.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">;
+</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Пустая инструкция - точка с запятой (;) оповещает о том, что ни одно выражение не будет выполняться, даже если синтаксис JavaScript ожидает этого.</p>
+
+<p>Противоположное поведение, где вы хотите использовать несколько заявлений, но JavaScript позволяет только одно, можно сделать используя <a href="/ru/docs/Web/JavaScript/Reference/Statements/block"> блок</a>; он комбинирует несколько инструкций в одно.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Пустая инструкция используется в выражениях циклов. Смотрите следующий пример с пустым телом цикла:</p>
+
+<pre class="brush: js">var arr = [1, 2, 3];
+
+// Приравняет все значения массива к 0
+for (i = 0; i &lt; arr.length; arr[i++] = 0) /* выражения */ ;
+
+console.log(arr)
+// [0, 0, 0]
+</pre>
+
+<p><strong>Заметьте:</strong> Это хорошая идея: комментировать намеренное использование пустых инструкций, т.к. не очевидно отличить их от нормальной точки с запятой. В следующем примере использование, вероятно, ненамеренное:</p>
+
+<pre class="brush: js">if (condition); // Внимание, этот if ничего не делает!
+ killTheUniverse() // Это всегда выполняется!!!
+</pre>
+
+<p>Другой пример: <a href="/ru/docs/Web/JavaScript/Reference/Statements/if...else"><code>if...else</code></a> без фигурных скобок  (<code>{}</code>). Если <code>three</code> истинно, ничего не пройзойдет, <code>four</code> не важна, и функция <code>launchRocket()</code> тоже не запустится.</p>
+
+<pre class="brush: js">if (one)
+ doOne();
+else if (two)
+ doTwo();
+else if (three)
+ ; // nothing here
+else if (four)
+ doFour();
+else
+ launchRocket();</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-empty-statement', 'Empty statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-empty-statement', 'Empty statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.3', 'Empty statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.3', 'Empty statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.3', 'Empty statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/block", "Блок")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/export/index.html b/files/ru/web/javascript/reference/statements/export/index.html
new file mode 100644
index 0000000000..4eca1d3d1b
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/export/index.html
@@ -0,0 +1,131 @@
+---
+title: export
+slug: Web/JavaScript/Reference/Statements/export
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Statement
+ - export
+ - Инструкция
+ - Модули
+translation_of: Web/JavaScript/Reference/Statements/export
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Инструкция <strong>export </strong>используется для экспорта функций, объектов или примитивов из файла (или модуля).</p>
+
+<div class="note">
+<p><strong>Примечание:</strong> Эта функциональность не реализована в браузерах на данный момент, но она реализована во многих транспилерах, таких как <a href="https://github.com/google/traceur-compiler">Traceur Compiler</a>, <a href="http://babeljs.io/">Babel</a> or <a href="https://github.com/rollup/rollup">Rollup</a>.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">export { <var>name1</var>, <var>name2</var>, …, <var>nameN</var> };
+export { <var>variable1</var> as <var>name1</var>, <var>variable2</var> as <var>name2</var>, …, <var>nameN</var> };
+export let <var>name1</var>, <var>name2</var>, …, <var>nameN</var>; // или var
+export let <var>name1</var> = …, <var>name2</var> = …, …, <var>nameN</var>; // или var, const
+
+export default <em>выражение</em>;
+export default function (…) { … } // или class, function*
+export default function name1(…) { … } // или class, function*
+export { <var>name1</var> as default, … };
+
+export * from …;
+export { <var>name1</var>, <var>name2</var>, …, <var>nameN</var> } from …;
+export { <var>import1</var> as <var>name1</var>, <var>import2</var> as <var>name2</var>, …, <var>nameN</var> } from …;</pre>
+
+<dl>
+ <dt><code>nameN</code></dt>
+ <dd>Идентификатор для экспорта (чтобы он мог быть импортирован с помощью {{jsxref("Statements/import", "import")}} в другом файле (скрипте)).</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Существует два типа экспорта, каждый из которых описан ниже:</p>
+
+<ul>
+ <li>Именованный экспорт:
+ <pre class="brush: js">export { myFunction }; // экспорт ранее объявленной функции
+export const foo = Math.sqrt(2); // экспорт константы</pre>
+ </li>
+ <li>Дефолтный экспорт (экспорт по умолчанию) (один на скрипт):
+ <pre class="brush: js">export default function() {} // или '<em>export default class {}</em>'
+// тут не ставится точка с запятой</pre>
+ </li>
+</ul>
+
+<p>Именованная форма более применима для экспорта нескольких величин. Во время импорта, можно будет использовать одно и то же имя, чтобы обратиться к соответствующему экспортируемому значению.</p>
+
+<p>Касательно экспорта по умолчанию (default), он может быть только один для каждого отдельного модуля (файла). Дефолтный экспорт может представлять собой функцию, класс, объект или что-то другое. Это значение следует рассматривать как "основное", так как его будет проще всего импортировать.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_именованного_экспорта">Использование именованного экспорта</h3>
+
+<p>Мы могли бы использовать следующий код в модуле:</p>
+
+<pre class="brush: js">// модуль"my-module.js"
+function cube(x) {
+ return x * x * x;
+}
+const foo = Math.PI + Math.SQRT2;
+export { cube, foo };
+</pre>
+
+<p>Таким образом в другом скрипте при помощи импорта (см. <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/import">import</a></code>) мы могли бы получить следующее:</p>
+
+<pre class="brush: js">import { cube, foo } from 'my-module';
+console.log(cube(3)); // 27
+console.log(foo); // 4.555806215962888</pre>
+
+<h3 id="Использование_export_default">Использование export default</h3>
+
+<p>Если мы хотим экспортировать единственное значение или иметь резервное значение (fallback) для данного модуля, мы можем использовать <code>export default</code>.</p>
+
+<pre class="brush: js">// модуль"my-module.js"
+export default function cube(x) {
+ return x * x * x;
+}
+</pre>
+
+<p>Затем, в другом скрипте можно импортировать это значение по умолчанию таким образом:</p>
+
+<pre class="brush: js">import cube from 'my-module';
+console.log(cube(3)); // 27
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-exports', 'Exports')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-exports', 'Exports')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.statements.export")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/import", "import")}}</li>
+ <li><a href="https://hacks.mozilla.org/2015/08/es6-in-depth-modules/">ES6 in Depth: Modules</a>, Hacks blog post by Jason Orendorff</li>
+ <li><a href="http://exploringjs.com/es6/ch_modules.html">Axel Rauschmayer's book: "Exploring JS: Modules"</a></li>
+</ul>
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
new file mode 100644
index 0000000000..72200e4004
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/for-await...of/index.html
@@ -0,0 +1,139 @@
+---
+title: for await...of
+slug: Web/JavaScript/Reference/Statements/for-await...of
+tags:
+ - JavaScript
+ - async
+ - Асинхронность
+ - ДжаваСкрипт
+translation_of: Web/JavaScript/Reference/Statements/for-await...of
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Выражение <strong><code>for await...of</code> </strong>создаёт цикл, проходящий через асинхронные итерируемые объекты, а также синхронные итерируемые сущности, включающие: встроенные {{jsxref("String")}}, {{jsxref("Array")}}, <code>Array</code>-подобные объекты (например., {{jsxref("Functions/arguments", "arguments")}} или {{domxref("NodeList")}}), {{jsxref("TypedArray")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, а также определяемые пользователем асинхронные/синхронные сущности. Он вызывает пользовательский итерационный хук с инструкциями, которые должны быть выполнены для значения каждого отдельного свойства объекта.</p>
+
+<p class="hidden">Исходный код этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, пожалуйста, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам пуллреквест.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">for await (<em>variable</em> of <em>iterable</em>) {
+ <em>statement
+</em>}
+</pre>
+
+<dl>
+ <dt><code>variable</code></dt>
+ <dd>На каждой итерации значение другого свойства присваивается <em>variable</em>. <em>variable</em> может быть объявлена с помощью ключевых слов <code>const</code>, <code>let</code>, or <code>var</code>.</dd>
+ <dt><code>iterable</code></dt>
+ <dd>Объект, чьи итерируемые свойства будут повторяться.</dd>
+</dl>
+
+<h3 id="Итерирование_по_асинхронным_переменным"><span style="background-color: #333333; letter-spacing: -0.00278rem;">Итерирование по асинхронным переменным</span></h3>
+
+<p>Вы также можете перебрать объект, который явно реализует асинхронный итерируемый протокол.</p>
+
+<pre class="brush:js">var asyncIterable = {
+ [Symbol.asyncIterator]() {
+ return {
+ i: 0,
+ next() {
+ if (this.i &lt; 3) {
+ return Promise.resolve({ value: this.i++, done: false });
+ }
+
+ return Promise.resolve({ done: true });
+ }
+ };
+ }
+};
+
+(async function() {
+   for await (let num of asyncIterable) {
+     console.log(num);
+   }
+})();
+
+// 0
+// 1
+// 2
+</pre>
+
+<h3 id="Итерирование_по_асинхронным_генераторам."><span style="background-color: #333333; letter-spacing: -0.00278rem;">Итерирование по асинхронным генераторам.</span></h3>
+
+<p>Поскольку асинхронные генераторы реализуют асинхронный протокол Iterator, по ним можно пройти циклом с помощью <code>for await... of</code></p>
+
+<pre class="brush: js">async function* asyncGenerator() {
+ var i = 0;
+ while (i &lt; 3) {
+ yield i++;
+ }
+}
+
+(async function() {
+ for await (let num of asyncGenerator()) {
+ console.log(num);
+ }
+})();
+// 0
+// 1
+// 2</pre>
+
+<p>Для более конкретного примера перебора асинхронного генератора с помощью <code>for await... of</code>, рассмотрим перебор данных из API.  В этом примере сначала создается асинхронный итератор для потока данных, а затем он используется для определения размера ответа от API.</p>
+
+<pre class="brush: js">async function* streamAsyncIterator(stream) {
+ const reader = stream.getReader();
+ try {
+ while (true) {
+ const { done, value } = await reader.read();
+ if (done) {
+ return;
+ }
+ yield value;
+ }
+ } finally {
+ reader.releaseLock();
+ }
+}
+// Fetches data from url and calculates response size using the async generator.
+async function getResponseSize(url) {
+ const response = await fetch(url);
+ // Will hold the size of the response, in bytes.
+ let responseSize = 0;
+ // The for-await-of loop. Async iterates over each portion of the response.
+ for await (const chunk of streamAsyncIterator(response.body)) {
+ // Incrementing the total response length.
+ responseSize += chunk.length;
+ }
+
+ console.log(`Response Size: ${responseSize} bytes`);
+ // expected output: "Response Size: 1071472"
+ return responseSize;
+}
+getResponseSize('https://jsonplaceholder.typicode.com/photos');</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'ECMAScript Language: The for-in, for-of, and for-await-of Statements')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<div class="hidden">Таблица совместимости на этой странице генерируется из структурированных данных. Если вы хотите внести свой вклад в эти данные, просмотрите https://github.com/mdn/browser-compat-data и отправьте пуллреквест. <span style="font-size: 1rem; letter-spacing: -0.00278rem;">{{Compat("javascript.statements.for_await_of")}}</span></div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/for...of")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/for...in/index.html b/files/ru/web/javascript/reference/statements/for...in/index.html
new file mode 100644
index 0000000000..6cca45033b
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/for...in/index.html
@@ -0,0 +1,197 @@
+---
+title: for...in
+slug: Web/JavaScript/Reference/Statements/for...in
+tags:
+ - JavaScript
+ - Выражение
+ - Цикл
+translation_of: Web/JavaScript/Reference/Statements/for...in
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong><code><font face="Open Sans, Arial, sans-serif">Цикл </font>for...in</code></strong> проходит через перечисляемые свойства объекта. Он пройдёт по каждому отдельному элементу.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">for (<var>variable</var> in <var>object</var>) {<em>...</em>
+}</pre>
+
+<dl>
+ <dt><code>variable</code></dt>
+ <dd>Другое (очередное) имя свойства назначается переменной на каждой итерации.</dd>
+ <dt><code>object</code></dt>
+ <dd>Объект, по чьим свойствам мы проходим</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Цикл <code>for...in</code> проходит только по перечисляемым свойствам. Объекты, созданные встроенными конструкторами, такими как <code>Array</code> и <code>Object</code> имеют неперечисляемые свойства от <code>Object.prototype</code> и <code>String.prototype</code>, например, от {{jsxref("String")}}-это {{jsxref("String.indexOf", "indexOf()")}}, а от {{jsxref("Object")}} - метод {{jsxref("Object.toString", "toString()")}}. Цикл пройдёт по всем перечисляемым свойствам объекта, а также тем, что он унаследует от конструктора прототипа (свойства объекта в цепи прототипа).</p>
+
+<h3 id="Удаление_добавление_и_модификация_свойств">Удаление, добавление и модификация свойств</h3>
+
+<p>Цикл <code>for...in</code> проходит по свойствам в произвольном порядке (см. оператор {{jsxref("Operators/delete", "delete")}} для того, чтобы узнать почему порядок прохода может отличаться в зависимости от браузера). Если свойство изменяется за одну итерацию, а затем изменяется снова, его значением в цикле является его последнее значение. Свойство, удаленное до того, как до него дошёл цикл, не будет участвовать в нём. Свойства добавленные в объекты в цикле могут быть пропущены. В общем, лучше не добавлять, изменять или удалять свойство из объекта во время итерации, если по нему ещё не прошли. Нет гарантии, что добавленное свойство будет посещено циклом, изменное после проведения изменений, а удалённое после удаления.</p>
+
+<h3 id="Проход_по_массиву_и_for...in"><code>Проход по массиву и for...in</code></h3>
+
+<div class="note">
+<p><strong>Замечание:</strong> <code>for...in</code> не следует использовать для {{jsxref("Array")}}, где важен порядок индексов.</p>
+</div>
+
+<p>Индексы массива - это перечисляемые свойства с целочисленными именами, в остальном они аналогичны свойствам объектов. Нет гарантии, что <code>for...in</code> будет возвращать индексы в конкретном порядке. Цикл <code>for...in</code> возвращает все перечисляемые свойства, включая имеющие нецелочислиненные имена и наследуемые.</p>
+
+<p>Так как порядок прохода зависит от реализации, проход по массиву может не произойти в правильном порядке. Следовательно лучше с числовыми индексами использовать циклы {{jsxref("Statements/for", "for")}}, {{jsxref("Array.prototype.forEach()")}} или {{jsxref("Statements/for...of", "for...of")}}, когда проходим по массивам, где важен порядок доступа к свойствам.</p>
+
+<h3 id="Проход_только_через_собственные_свойства.">Проход только через собственные свойства.</h3>
+
+<p>Если вы хотите рассматривать только свойства самого объекта, а не его прототипов, используйте {{jsxref("Object.getOwnPropertyNames", "getOwnPropertyNames()")}}, {{jsxref("Object.prototype.hasOwnProperty", "hasOwnProperty()")}} или {{jsxref("Object.prototype.propertyIsEnumerable", "propertyIsEnumerable")}}. Кроме того, если вы знаете, что не будет вмешательства в код извне, вы можете расширить встроенные прототипы методом проверки.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующее выражение берёт аргументом объект. Затем проходит по всем перечислимым свойствам объекта и возвращает строку содержащую имена свойств и их значения.</p>
+
+<pre class="brush: js">var obj = {a:1, b:2, c:3};
+
+for (var prop in obj) {
+ console.log("obj." + prop + " = " + obj[prop]);
+}
+
+// Выведет:
+// "obj.a = 1"
+// "obj.b = 2"
+// "obj.c = 3"</pre>
+
+<p>Следующая функция иллюстрирует использование {{jsxref("Object.prototype.hasOwnProperty", "hasOwnProperty()")}}: наследуемые свойства не отображаются</p>
+
+<pre class="brush: js">var triangle = {a:1, b:2, c:3};
+
+function ColoredTriangle() {
+ this.color = "red";
+}
+
+ColoredTriangle.prototype = triangle;
+
+var obj = new ColoredTriangle();
+
+for (var prop in obj) {
+ if( obj.hasOwnProperty( prop ) ) {
+ console.log("obj." + prop + " = " + obj[prop]);
+ }
+}
+
+// Выведет:
+// "obj.color = red"
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-for-in-and-for-of-statements', 'for...in statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.6.4', 'for...in statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.6.4', 'for...in statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.6.3', 'for...in statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Поддержка_инициализатор_переменных">Поддержка: инициализатор переменных</h2>
+
+<p>До SpiderMonkey 40 {{geckoRelease(40)}}, можно было инициализировать переменные (<code>i=0</code>) в цикле <code>for...in</code>:</p>
+
+<pre class="brush: js example-bad">var obj = {a:1, b:2, c:3};
+for(var i=0 in obj) {
+ console.log(obj[i]);
+}
+// 1
+// 2
+// 3
+</pre>
+
+<p>Это нестандартное поведение игнорируется в версии 40 и более поздних, оно бросит предупреждение {{jsxref("SyntaxError")}} ("for-in loop head declarations may not have initializers") в консоль ({{bug(748550)}} и {{bug(1164741)}}).</p>
+
+<p>Другие движки, такие как v8 (Chrome), Chakra (IE/Edge) и JSC (WebKit/Safari) также собираются удалить это нестандартное поведение.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/for...of", "for...of")}} - похожий цикл, проходящий по значениям свойств</li>
+ <li>{{jsxref("Statements/for_each...in", "for each in")}} - похожее выражение, но перебирает значения свойств, а не их имена (устарело)</li>
+ <li>{{jsxref("Statements/for", "for")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators">Генераторы</a> (использующие синтаксис <code>for...in</code>)</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">Перечислимость и владение свойствами</a></li>
+ <li>{{jsxref("Object.getOwnPropertyNames()")}}</li>
+ <li>{{jsxref("Object.prototype.hasOwnProperty()")}}</li>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/for...of/index.html b/files/ru/web/javascript/reference/statements/for...of/index.html
new file mode 100644
index 0000000000..0074719d06
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/for...of/index.html
@@ -0,0 +1,302 @@
+---
+title: for...of
+slug: Web/JavaScript/Reference/Statements/for...of
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Оператор
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Statements/for...of
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p>Оператор <code>for...of</code> выполняет цикл обхода <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/iterable">итерируемых объектов</a> (включая {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}}, объект <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments">аргументов</a> и подобных), вызывая на каждом шаге итерации операторы для каждого значения из различных свойств объекта.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate">for (<em>variable</em> of <em>iterable</em>) {
+ <em>statement</em>
+}
+</pre>
+
+<dl>
+ <dt><code>variable</code></dt>
+ <dd>На каждом шаге итерации <code><em>variable</em></code> присваивается значение нового свойства объекта <em><code>iterable</code></em>. Переменная <em><code>variable</code></em> может быть также объявлена с помощью <code>const</code>, <code>let</code> или <code>var</code>.</dd>
+ <dt><code>iterable</code></dt>
+ <dd>Объект, перечисляемые свойства которого обходятся во время выполнения цикла.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Обход_jsxrefArray">Обход {{jsxref("Array")}}</h3>
+
+<pre class="notranslate"><code>let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+ value += 1;
+ console.log(value);
+}
+// 11
+// 21
+// 31</code></pre>
+
+<p>Можно также использовать <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const"><code>const</code></a> вместо <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let"><code>let</code></a>, если не нужно переназначать переменные внутри блока.</p>
+
+<pre class="notranslate"><code>let iterable = [10, 20, 30];
+
+for (const value of iterable) {
+ console.log(value);
+}
+// 10
+// 20
+// 30</code></pre>
+
+<h3 id="Обход_jsxrefString">Обход {{jsxref("String")}}</h3>
+
+<pre class="notranslate"><code>let iterable = 'boo';
+
+for (let value of iterable) {
+ console.log(value);
+}
+// "b"
+// "o"
+// "o"</code></pre>
+
+<h3 id="Обход_jsxrefTypedArray">Обход {{jsxref("TypedArray")}}</h3>
+
+<pre class="notranslate"><code>let iterable = new Uint8Array([0x00, 0xff]);
+
+for (let value of iterable) {
+ console.log(value);
+}
+// 0
+// 255</code></pre>
+
+<h3 id="Обход_jsxrefMap">Обход {{jsxref("Map")}}</h3>
+
+<pre class="notranslate"><code>let iterable = new Map([['a', 1], ['b', 2], ['c', 3]]);
+
+for (let entry of iterable) {
+ console.log(entry);
+}
+// ['a', 1]
+// ['b', 2]
+// ['c', 3]
+
+for (let [key, value] of iterable) {
+ console.log(value);
+}
+// 1
+// 2
+// 3</code></pre>
+
+<h3 id="Обход_jsxrefSet">Обход {{jsxref("Set")}}</h3>
+
+<pre class="notranslate"><code>let iterable = new Set([1, 1, 2, 2, 3, 3]);
+
+for (let value of iterable) {
+ console.log(value);
+}
+// 1
+// 2
+// 3</code></pre>
+
+<h3 id="Обход_объекта_jsxrefarguments">Обход объекта {{jsxref("arguments")}} </h3>
+
+<pre class="notranslate"><code>(function() {
+ for (let argument of arguments) {
+ console.log(argument);
+ }
+})(1, 2, 3);
+
+// 1
+// 2
+// 3</code></pre>
+
+<h3 id="Обход_DOM_коллекций">Обход DOM коллекций</h3>
+
+<p>Обход DOM коллекций наподобие {{domxref("NodeList")}}: следующий пример добавляет класс <code>read</code> параграфам, являющимся непосредственными потомками статей:</p>
+
+<pre class="notranslate"><code>// Примечание: работает только на платформах, где
+// реализован NodeList.prototype[Symbol.iterator]
+let articleParagraphs = document.querySelectorAll('article &gt; p');
+
+for (let paragraph of articleParagraphs) {
+ paragraph.classList.add('read');
+}</code></pre>
+
+<h3 id="Закрытие_итераторов">Закрытие итераторов</h3>
+
+<p>В циклах <code>for...of</code>  аварийный выход осуществляется через <code>break</code>, <code>throw</code> или <code>return</code>. Во всех вариантах итератор завершается.</p>
+
+<pre class="notranslate"><code>function* foo(){
+ yield 1;
+ yield 2;
+ yield 3;
+};
+
+for (let o of foo()) {
+ console.log(o);
+ break; //  итератор закрывается, возврат
+}</code>
+</pre>
+
+<h3 id="Обход_генераторов">Обход генераторов</h3>
+
+<p>Вы можете выполнять обход <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function*">генераторов</a>, вот пример:</p>
+
+<pre class="brush:js notranslate">function* fibonacci() { // функция-генератор
+ let [prev, curr] = [0, 1];
+ for (;;) {
+ [prev, curr] = [curr, prev + curr];
+ yield curr;
+ }
+}
+
+for (let n of fibonacci()) {
+ // ограничивает последовательность на 1000
+ if (n &gt; 1000)
+ break;
+ console.log(n);
+}
+</pre>
+
+<h4 id="Не_пытайтесь_повторно_использовать_генератор">Не пытайтесь повторно использовать генератор</h4>
+
+<p>Генераторы нельзя использовать дважды, даже если цикл <code>for...of </code> завершится аварийно, например, через оператор {{jsxref("Statements/break", "break")}} . При выходе из цикла генератор завершается, и любые попытки получить из него значение обречены.</p>
+
+<pre class="brush: js example-bad notranslate"><code>var gen = (function *(){
+ yield 1;
+ yield 2;
+ yield 3;
+})();
+for (let o of gen) {
+ console.log(o);
+ break; // Завешение обхода
+}
+
+// Генератор нельзя повторно обойти, следующее не имеет смысла!
+for (let o of gen) {
+ console.log(o); // Не будет вызван
+}</code></pre>
+
+<h3 id="Обход_итерируемых_объектов">Обход итерируемых объектов</h3>
+
+<p>Кроме того, можно сделать обход объекта, явно реализующего <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#iterable">iterable</a>:</p>
+
+<pre class="notranslate"><code>var iterable = {
+ [Symbol.iterator]() {
+ return {
+ i: 0,
+ next() {
+ if (this.i &lt; 3) {
+ return { value: this.i++, done: false };
+ }
+ return { value: undefined, done: true };
+ }
+ };
+ }
+};
+
+for (var value of iterable) {
+ console.log(value);
+}
+// 0
+// 1
+// 2</code></pre>
+
+<h3 id="Различия_между_for...of_и_for...in">Различия между <code>for...of</code> и <code>for...in</code></h3>
+
+<p>Оба оператора, и <code>for...in</code> и <code>for...of</code> производят обход объектов . Разница в том, как они это делают.</p>
+
+<p>Для {{jsxref("Statements/for...in", "for...in")}} обход <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Enumerability_and_ownership_of_properties" title="перечисляемые свойства">перечисляемых свойств</a> объекта осуществляется в произвольном порядке.</p>
+
+<p>Для <code>for...of</code> обход происходит в соответствии с тем, какой порядок определен в <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/iterable">итерируемом объекте</a>.</p>
+
+<p>Следующий пример показывает различия в работе циклов <code>for...of</code> и <code>for...in</code> при обходе {{jsxref("Array")}}.</p>
+
+<pre class="notranslate"><code>Object.prototype.objCustom = function() {};
+Array.prototype.arrCustom = function() {};
+
+let iterable = [3, 5, 7];
+iterable.foo = 'hello';
+
+for (let i in iterable) {
+ console.log(i); // выведет 0, 1, 2, "foo", "arrCustom", "objCustom"
+}
+
+for (let i in iterable) {
+ if (iterable.hasOwnProperty(i)) {
+ console.log(i); // выведет 0, 1, 2, "foo"
+ }
+}
+
+for (let i of iterable) {
+ console.log(i); // выведет 3, 5, 7
+}</code></pre>
+
+<p>Разберемся шаг за шагом в вышеописанном коде.</p>
+
+<pre class="notranslate"><code>Object.prototype.objCustom = function() {};
+Array.prototype.arrCustom = function() {};
+
+let iterable = [3, 5, 7];
+iterable.foo = 'hello';</code></pre>
+
+<p>Каждый объект унаследует метод <code>objCustom</code> и каждый массив {{jsxref("Array")}} унаследует метод <code>arrCustom</code> благодаря созданию их в {{jsxref("Object.prototype")}} и {{jsxref("Array.prototype")}}. Объект <code>iterable</code> унаследует методы <code>objCustom</code> и <code>arrCustom</code> из-за <a href="/ru/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">наследования через прототип</a>.</p>
+
+<pre class="notranslate"><code>for (let i in iterable) {
+ console.log(i); // выведет 0, 1, 2, "foo", "arrCustom", "objCustom"
+}</code></pre>
+
+<p>Цикл выводит только <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">перечисляемые свойства</a> объекта <code>iterable</code>, в порядке их создания. Он не выводит <strong>значения</strong> <code>3</code>, <code>5</code>, <code>7</code> и <code>hello</code> поскольку они <strong>не являются</strong> перечисляемыми, фактически они вообще не являются свойствами, они являютя <strong>значениями</strong>. Выводятся же <strong>имена свойств и методов</strong>, например <code>arrCustom</code> и <code>objCustom</code>. Если вы еще не совсем поняли, по каким свойствам осуществляется обход, вот дополнительное объяснение того, как работает {{jsxref("Statements/for...in", "array iteration and for...in", "#Array_iteration_and_for...in")}} .</p>
+
+<pre class="notranslate"><code>for (let i in iterable) {
+ if (iterable.hasOwnProperty(i)) {
+ console.log(i); // выведет 0, 1, 2, "foo"
+ }
+}</code></pre>
+
+<p>Цикл аналогичен предыдущему, но использует {{jsxref("Object.prototype.hasOwnProperty()", "hasOwnProperty()")}} для проверки того, собственное ли это свойство объекта или унаследованое. Выводятся только собственные свойства. Имена <code>0</code>, <code>1</code>, <code>2</code> и <code>foo</code> принадлежат только экземпляру объекта (<strong>не унаследованы</strong>). Методы <code>arrCustom</code> и <code>objCustom</code> не выводятся, поскольку они <strong>унаследованы</strong>.</p>
+
+<pre class="notranslate"><code>for (let i of iterable) {
+ console.log(i); // выведет 3, 5, 7
+}</code></pre>
+
+<p>Этот цикл обходит <code>iterable</code> и выводит те значения <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Iterators_and_Generators$edit#%D0%98%D1%82%D0%B5%D1%80%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B">итерируемого объекта</a>,<strong> </strong>которые определены в способе его перебора, т.е. не свойства объекта, а значения массива <code>3</code>, <code>5</code>, <code>7</code> .</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-for-in-and-for-of-statements', 'for...of statement')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное опеределение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-for-in-and-for-of-statements', 'for...of statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.statements.for_of")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.forEach()")}}</li>
+ <li>{{jsxref("Map.prototype.forEach()")}}</li>
+ <li>{{jsxref("Object.entries()")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/for/index.html b/files/ru/web/javascript/reference/statements/for/index.html
new file mode 100644
index 0000000000..40945dffda
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/for/index.html
@@ -0,0 +1,194 @@
+---
+title: for
+slug: Web/JavaScript/Reference/Statements/for
+translation_of: Web/JavaScript/Reference/Statements/for
+---
+<div>
+<div>{{jsSidebar("Statements")}}</div>
+</div>
+
+<h2 id="Summary" name="Summary">Введение</h2>
+
+<p>Выражение<strong> for</strong> создаёт цикл, состоящий из 3 необязательных выражений в круглых скобках, разделённых точками с запятой.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">for ([<em>инициализация</em>]; [<em>условие</em>]; [<em>финальное выражение</em>])<em>выражение</em>
+</pre>
+
+<dl>
+ <dt><font face="Consolas, Liberation Mono, Courier, monospace">инициализация</font></dt>
+ <dd>Выражение (в том числе выражения присвоения) или определение переменных. Обычно используется, чтобы инициализировать счётчик. Это выражение может опционально объявлять новые переменные с помощью ключевого слова <code>var</code>. Эти переменные видимы не только в цикле, т.е. в той же области области видимости, что и цикл <code>for</code>. Результат этого выражения отбрасывается.</dd>
+ <dt><font face="Consolas, Liberation Mono, Courier, monospace">условие</font></dt>
+ <dd>Выражение, выполняющееся на каждой интерации цикла. Если выражение истинно, цикл выполняется. Условие не является обязательным. Если его нет, условие всегда считается истиной. Если выражение ложно, выполнение переходит к первому выражению, следующему за <code>for.</code></dd>
+ <dt><font face="Consolas, Liberation Mono, Courier, monospace">финальное выражение</font></dt>
+ <dd>Выражение, выполняющееся в конце интерации цикла. Происходит до следующего выполнения условия. Обычно используется для обновления или увеличения переменной счётчика.</dd>
+ <dt><font face="Consolas, Liberation Mono, Courier, monospace">выражение</font></dt>
+ <dd>Выражение, которое выполняется, когда условие цикла истинно. Чтоб выполнить множество выражений в цикле, используйте <a href="/ru/docs/JavaScript/Reference/Statements/block" title="JavaScript/Reference/Statements/block">блок</a> (<code>{ ... }</code>) для группировки этих выражений. Чтобы не выполнять никакого выражения в цикле, используйте <a href="/ru/docs/Web/JavaScript/Reference/Statements/Empty">пустое выражение</a> (<code>;</code>).</dd>
+</dl>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example.3A_Using_for" name="Example.3A_Using_for">Использование <code>for</code></h3>
+
+<p>Следующий цикл <code>for</code> начинается объявлением переменной <code>i </code>и задания ей значения <code>0</code>. Затем проверяет, что <code>i</code> меньше девяти, выполняет выражения внутри цикла и увеличивает <code>i</code> на 1 каждый раз.</p>
+
+<pre class="brush: js">for (var i = 0; i &lt; 9; i++) {
+ console.log(i);
+ // ещё какие-то выражения
+}
+</pre>
+
+<h3 id="Необязательные_выражения_в_for">Необязательные выражения в  <code>for</code></h3>
+
+<p>Все 3 выражения в цикле <code>for</code> не обязательны.</p>
+
+<p>Например, в блоке инициализации не требуется определять переменные:</p>
+
+<pre class="brush: js">var i = 0;
+for (; i &lt; 9; i++) {
+ console.log(i);
+ // ещё выражения
+}
+</pre>
+
+<p>Как и блок инициализации, блок условия не обязателен. Если пропустите это выражение, вы должны быть уверены, что прервете цикл где-то в теле, а не создадите бесконечный цикл.</p>
+
+<pre class="brush: js">for (var i = 0;; i++) {
+ console.log(i);
+ if (i &gt; 3) break;
+ // тут какой-то код
+}</pre>
+
+<p>Вы можете пропустить все 3 блока. Снова убедитесь, что используете <code><a href="/ru/docs/Web/JavaScript/Reference/Statements/break">break</a></code>, чтоб закончить цикл, а также изменить счётчик, так что условие для break было истинно в нужный момент.</p>
+
+<pre class="brush: js">var i = 0;
+
+for (;;) {
+ if (i &gt; 3) break;
+ console.log(i);
+ i++;
+}
+</pre>
+
+<h3 id="Example.3A_Using_for_without_the_statement_section" name="Example.3A_Using_for_without_the_statement_section">Использование <code>for</code> без блока выражений</h3>
+
+<p>Следующий цикл <code>for</code> вычисляет смещение позиции узла в секции <em>[финальное выражение]</em>, и, следовательно, не требует использования выражения внутри цикла или <code><a href="/ru/docs/JavaScript/Reference/Statements/block" title="JavaScript/Reference/Statements/block">блока</a></code>, <a href="/ru/docs/Web/JavaScript/Reference/Statements/Empty">пустое выражение</a> используется вместо этого.</p>
+
+<pre class="brush: js">function showOffsetPos (sId) {
+ var nLeft = 0, nTop = 0;
+
+ for (var oItNode = document.getElementById(sId); // инициализация
+ oItNode; // условие
+ nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent) // финальное выражение
+ /* пустое выражение */ ;
+
+ console.log("Смещение позиции элемента \"" + sId + "\":\n left: " + nLeft + "px;\n top: " + nTop + "px;");
+}
+
+// Пример вызова:
+
+showOffsetPos("content");
+
+// Выводит:
+// "Смещение позиции элемента "content":
+// left: 0px;
+// top: 153px;"</pre>
+
+<div class="note"><strong>Замечание:</strong> В этом случае, когда вы не используете условие внутри цикла, <strong>точка с запятой ставится сразу после выражения цикла.</strong></div>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-for-statement', 'for statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.6.3', 'for statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.6.3', 'for statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.6.2', 'for statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_в_браузерах">Поддержка в браузерах</h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also">Также можете просмотреть</h2>
+
+<ul>
+ <li>{{jsxref("Statements/break", "break")}}</li>
+ <li>{{jsxref("Statements/continue", "continue")}}</li>
+ <li>{{jsxref("Statements/empty", "empty")}}</li>
+ <li>{{jsxref("Statements/while", "while")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/do...while"><code>do...while</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>for...in</code></a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/for_each...in/index.html b/files/ru/web/javascript/reference/statements/for_each...in/index.html
new file mode 100644
index 0000000000..c609f436c0
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/for_each...in/index.html
@@ -0,0 +1,126 @@
+---
+title: for each...in
+slug: Web/JavaScript/Reference/Statements/for_each...in
+translation_of: Archive/Web/JavaScript/for_each...in
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<div class="warning">
+<p>Конструкция <code>for each...in</code> заявлена как "deprecated", как часть стандарта ECMA-357 (<a href="/en-US/docs/Archive/Web/E4X" title="/en-US/docs/E4X">E4X</a>). Поддержка E4X была удалена. Вместо <code>for each...in</code> рассмотрите использование <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a>. (Пожалуйста обратите внимание: {{ bug("791343")}}.)<br>
+ <br>
+ <strong>Firefox теперь предупреждает об использовании <code>for each...in</code> и <code>for each...in</code> удаляется из ночных сборок. Пожалуйста, посмотрите <a href="/en-US/docs/Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated">Warning: JavaScript 1.6's for-each-in loops are deprecated</a> для помощи в миграции.</strong></p>
+</div>
+
+<p><strong>Выражение</strong> <code><strong>for each...in</strong></code> выполняет перебор свойств указанного объекта. Для каждого свойства выполняется указанный оператор.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">for each (<em>variable</em> in <em>object</em>) {
+ <em>statement</em>
+}</pre>
+
+<dl>
+ <dt><code>variable</code></dt>
+ <dd>Variable to iterate over property values, optionally declared with the <code>var</code> keyword. This variable is local to the function, not to the loop.</dd>
+</dl>
+
+<dl>
+ <dt><code>object</code></dt>
+ <dd>Object for which the properties are iterated.</dd>
+</dl>
+
+<dl>
+ <dt><code>statement</code></dt>
+ <dd>A statement to execute for each property. To execute multiple statements within the loop, use a <a href="/en-US/docs/Web/JavaScript/Reference/Statements/block">block</a> statement (<code>{ ... }</code>) to group those statements.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>Some built-in properties are not iterated over. These include all built-in methods of objects, e.g. <code>String</code>'s <code>indexOf</code> method. However, all user-defined properties are iterated over.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Using_for_each...in">Using <code>for each...in</code></h3>
+
+<p><strong>Warning:</strong> Never use a loop like this on arrays. Only use it on objects. See <a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in"><code>for...in</code></a> for more details.</p>
+
+<p>The following snippet iterates over an object's properties, calculating their sum:</p>
+
+<pre class="brush:js">var sum = 0;
+var obj = {prop1: 5, prop2: 13, prop3: 8};
+
+for each (var item in obj) {
+ sum += item;
+}
+
+console.log(sum); // logs "26", which is 5+13+8</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<p>Not part of a current ECMA-262 specification. Implemented in JavaScript 1.6 and deprecated.</p>
+
+<h2 id="Браузерная_совместимость">Браузерная совместимость</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("1.8")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Firefox_specific_note">Firefox specific note</h2>
+
+<ul>
+ <li><code>for each...in</code> удалён только из Nightly Firefox 53</li>
+</ul>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code> - аналогичный оператор по перебору <em>имён</em> свойств.</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> - аналогичный оператор, перебирающий <em>значения</em> свойств, но может быть использован только для перебираемых (iteratable) типов, so not for generic objects</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Statements/for">for</a></code></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/function/index.html b/files/ru/web/javascript/reference/statements/function/index.html
new file mode 100644
index 0000000000..37ccac9a29
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/function/index.html
@@ -0,0 +1,125 @@
+---
+title: function
+slug: Web/JavaScript/Reference/Statements/function
+tags:
+ - JavaScript
+ - Функция
+translation_of: Web/JavaScript/Reference/Statements/function
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Объявление функции</strong> определяет функцию с указанными аргументами.</p>
+
+<p>Также вы можете определять функции через конструктор {{jsxref("Function")}} или {{jsxref("Operators/function", "функциональное выражение")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">function <em>name</em>([<em>param</em>,[, <em>param</em>,[..., <em>param</em>]]]) {
+ [<em>statements</em>]
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции.</dd>
+ <dt><code>paramN</code></dt>
+ <dd>Имя аргумента, переданного в функцию. Максимальное количество аргументов, которое может принять функция, может варьироваться в зависимости от движков.</dd>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции, которые составляют тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Функция, созданная через объявление функции, является объектом <code>Function</code> и обладает всеми свойствами, методами и поведением объектов такого типа. Смотрите {{jsxref("Function")}} для подробной информации о функциях.</p>
+
+<p>Также функцию можно создать с помощью выражения (см. {{jsxref("Operators/function", "функциональное выражение")}}).</p>
+
+<p>По умолчанию функции возвращают <code>undefined</code>. Чтобы вернуть другое значение, функция должна содержать инструкцию {{jsxref("Statements/return", "return")}}, которая указывает, какое значение возвращать.</p>
+
+<h3 id="Функции_создаваемые_по_условию">Функции, создаваемые по условию</h3>
+
+<p>Функции могут объявлены условно, иначе говоря, объявление функции может содержаться внутри условного оператора. Большинство браузеров, отличных от Mozilla, трактуют подобные условные объявления безотносительно условия, и создадут функцию, вне зависимости от истинностного значения условия; смотрите <a href="http://kangax.github.io/nfe/#function-statements">статью</a> об этом. Поэтому такое использование не рекомендуется, для условного создания функций используйте функциональные выражения.</p>
+
+<h3 id="Поднимание_объявленной_функции">Поднимание объявленной функции</h3>
+
+<p>Объявление функции в JavaScript поднимает определение функции. Вы можете использовать функцию до того, как вы её объявили:</p>
+
+<pre class="brush: js">hoisted(); // выводит "foo"
+
+function hoisted() {
+ console.log("foo");
+}
+</pre>
+
+<p>Заметьте, что {{jsxref("Operators/function", "функциональные выражения")}} не поднимаются:</p>
+
+<pre class="brush: js">notHoisted(); // TypeError: notHoisted не является функцией
+
+var notHoisted = function() {
+ console.log("bar");
+};
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_function">Использование <code>function</code></h3>
+
+<p>Следующий код объявляет функцию, возврающую итоговое количество продаж, сложенное из количества продаж продуктов <code>a</code>, <code>b</code> и <code>c</code>.</p>
+
+<pre class="brush: js">function calc_sales(units_a, units_b, units_c) {
+ return units_a*79 + units_b * 129 + units_c * 699;
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-13', 'Function definition')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-13', 'Function definition')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-13', 'Function definition')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение. Реализовано в JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{Compat("javascript.statements.function")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Functions_and_function_scope", "Функции и область видимости")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Operators/function", "Функциональное выражение")}}</li>
+ <li>{{jsxref("Statements/function*", "Оператор function*")}}</li>
+ <li>{{jsxref("Operators/function*", "Выражение function*")}}</li>
+ <li>{{jsxref("Functions/Arrow_functions", "Стрелочные функции")}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/function_star_/index.html b/files/ru/web/javascript/reference/statements/function_star_/index.html
new file mode 100644
index 0000000000..69567963bb
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/function_star_/index.html
@@ -0,0 +1,202 @@
+---
+title: function*
+slug: Web/JavaScript/Reference/Statements/function*
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Итератор
+ - Функция
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Statements/function*
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Summary" name="Summary">Сводка</h2>
+
+<p><code><strong>function*</strong></code> (ключевое слово <code>function</code> со звёздочкой) определяет <em>функцию-генератор</em>.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre>function* <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) { <em>statements</em> }
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>Имя функции.</dd>
+ <dt><code>param</code></dt>
+ <dd>Именованные аргументы функции (параметры). Функция-генератор может иметь 255 аргументов.</dd>
+ <dt><code>statements</code></dt>
+ <dd>Инструкции составляющие тело функции.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Генераторы являются функциями с возможностью выхода и последующего входа. Их контекст исполнения (значения переменных) сохраняется при последующих входах.</p>
+
+<p>Когда вызывается функция-генератор, её тело исполняется не сразу; вместо этого возвращается объект-<a href="/ru/docs/Web/JavaScript/Guide/The_Iterator_protocol">итератор</a>. При вызове метода <code>next() </code>итератора тело функции-генератора исполняется до первого встреченного оператора <a href="/ru/docs/Web/JavaScript/Reference/Operators/yield"><code><strong>yield</strong></code></a>, который определяет возвращаемое значение или делегирует дальнейшее выполнение другому генератору при помощи <code><strong>yield*</strong> anotherGenerator()</code>. Метод <code>next()</code> возвращает объект со свойством <code>value</code>, содержащим отданное значение, и свойством <code>done</code>, которое указывает, что генератор уже отдал своё последнее значение. Вызов метода <code>next()</code> с аргументом прекращает выполнение функции-генератора, и заменяет инструкцию yield на которой было приостановлено выполнение  на аргумент переданный в <code>next().</code></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Простой_пример">Простой пример</h3>
+
+<pre class="brush: js">function* idMaker() {
+ var index = 0;
+ while (index &lt; 3)
+ yield index++;
+}
+
+var gen = idMaker();
+
+console.log(gen.next().value); // 0
+console.log(gen.next().value); // 1
+console.log(gen.next().value); // 2
+console.log(gen.next().value); // undefined
+// ...</pre>
+
+<h3 id="Пример_с_yield*">Пример с yield*</h3>
+
+<pre class="brush: js" dir="rtl">function* anotherGenerator(i) {
+ yield i + 1;
+ yield i + 2;
+ yield i + 3;
+}
+
+function* generator(i) {
+ yield i;
+ yield* anotherGenerator(i);
+ yield i + 10;
+}
+
+var gen = generator(10);
+
+console.log(gen.next().value); // 10
+console.log(gen.next().value); // 11
+console.log(gen.next().value); // 12
+console.log(gen.next().value); // 13
+console.log(gen.next().value); // 20</pre>
+
+<h3 id="Передача_аргументов_в_генератор">Передача аргументов в генератор</h3>
+
+<pre class="brush: js line-numbers language-js"><code class="language-js"><span class="keyword token">function</span><span class="operator token">*</span> <span class="function token">logGenerator</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="keyword token">yield</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="keyword token">yield</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="keyword token">yield</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="keyword token">var</span> gen <span class="operator token">=</span> <span class="function token">logGenerator</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// первый вызов next выполняется от начала функции</span>
+<span class="comment token">// и до первого оператора yield</span>
+gen<span class="punctuation token">.</span><span class="function token">next</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+gen<span class="punctuation token">.</span><span class="function token">next</span><span class="punctuation token">(</span><span class="string token">'pretzel'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// pretzel</span>
+gen<span class="punctuation token">.</span><span class="function token">next</span><span class="punctuation token">(</span><span class="string token">'california'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// california</span>
+gen<span class="punctuation token">.</span><span class="function token">next</span><span class="punctuation token">(</span><span class="string token">'mayonnaise'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// mayonnaise</span></code></pre>
+
+<h3 id="Инструкция_return_в_генераторе">Инструкция return в генераторе</h3>
+
+<pre class="brush: js">function* yieldAndReturn() {
+ yield "Y";
+ return "R";
+ yield "unreachable";
+}
+
+var gen = yieldAndReturn()
+console.log(gen.next()); // { value: "Y", done: false }
+console.log(gen.next()); // { value: "R", done: true }
+console.log(gen.next()); // { value: undefined, done: true }</pre>
+
+<h3 id="Генераторы_не_могут_быть_инстанцированы_(not_constructable)">Генераторы не могут быть инстанцированы (not constructable)</h3>
+
+<pre class="brush: js example-bad line-numbers language-js"><code class="language-js"><span class="keyword token">function</span><span class="operator token">*</span> <span class="function token">f</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span><span class="punctuation token">}</span>
+<span class="keyword token">var</span> obj <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">f</span><span class="punctuation token">;</span> <span class="comment token">// throws "TypeError: f is not a constructor"</span></code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td><a href="http://wiki.ecmascript.org/doku.php?id=harmony:generators">Предложение Harmony</a></td>
+ <td>Черновик</td>
+ <td>Начало работы над стандартом.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-generator-function-definitions', 'Генераторы')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение в стандарте ECMA.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari (WebKit)</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>39</td>
+ <td>{{CompatGeckoDesktop("26.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>26</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Phone</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>yes (when?)</td>
+ <td>{{CompatGeckoMobile("27.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="Генераторы_и_итераторы_до_версии_Firefox_26">Генераторы и итераторы до версии Firefox 26</h3>
+
+<p>В старых версиях Firefox была реализована иная версия генераторов. В ней генераторы определялись обычным ключевым словом <code>function</code> (без звёздочки) и имели некоторые другие отличия.</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Guide/The_Iterator_protocol">Протокол итераторов</a></li>
+ <li>Оператор <a href="/ru/docs/Web/JavaScript/Reference/Operators/yield">yield</a></li>
+ <li>Оператор <a href="/ru/docs/Web/JavaScript/Reference/Statements/function">function</a></li>
+ <li>Другие ресурсы:
+ <ul>
+ <li>Компилятор <a href="http://facebook.github.io/regenerator/">Regenerator</a> из ES2015 в ES5</li>
+ <li><a href="http://www.youtube.com/watch?v=qbKWsbJ76-s">Forbes Lindesay: Promises and Generators: control flow utopia -- JSConf EU 2013</a></li>
+ <li><a href="http://taskjs.org/">Task.js</a></li>
+ </ul>
+ </li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/if...else/index.html b/files/ru/web/javascript/reference/statements/if...else/index.html
new file mode 100644
index 0000000000..1f9d474145
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/if...else/index.html
@@ -0,0 +1,213 @@
+---
+title: if...else
+slug: Web/JavaScript/Reference/Statements/if...else
+tags:
+ - Выражение
+ - Условие
+translation_of: Web/JavaScript/Reference/Statements/if...else
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Инструкция if</strong> выполняет инструкцию, если указанное условие выполняется (истинно). Если условие не выполняется (ложно), то может быть выполнена другая инструкция.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">if (<em>условие</em>)
+ <em>инструкция1</em>
+[else
+ <em>инструкция2</em>]
+</pre>
+
+<dl>
+ <dt><code>условие</code></dt>
+ <dd><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Expressions_and_Operators">Выражение</a>, которое является либо истинным, либо ложным.</dd>
+</dl>
+
+<dl>
+ <dt><code>инструкция1</code></dt>
+ <dd>Инструкция, выполняемая в случае, если значение <code>"условиe"</code> истинно (<code>true</code>). Может быть любой инструкцией в том числе и вложенным <code>if</code>. Для группировки нескольких инструкций используется блок (<code>{...}</code>), Когда никакого действия не требуется, может использоваться <a href="/ru/docs/Web/JavaScript/Reference/Statements/Empty">пустая</a> инструкция.</dd>
+</dl>
+
+<dl>
+ <dt><code>инструкция2</code></dt>
+ <dd>Инструкция, выполняемая в случае, если значение <code>"условиe"</code> ложно (<code>false</code>). Может быть любой инструкцией, в том числе и вложенным <code>if</code>. Инструкции тоже  можно группировать в блок.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Несколько команд if ... else могут быть вложены для создания условия <code>else if</code>. Обратите внимание, что в JavaScript нет ключевого слова <code>elseif</code> (в одно слово).</p>
+
+<pre class="eval">if (<em>условие1</em>)
+ <em>инструкция1</em>
+else if (<em>условие2</em>)
+ <em>инструкция2</em>
+else if (<em>условие3</em>)
+ <em>инструкция3</em>
+...
+else
+ <em>инструкцияN</em>
+
+</pre>
+
+<p>Чтобы увидеть, как это работает, ниже представлен пример правильного вложения с отступами:</p>
+
+<pre class="eval">if (<em>условие1</em>)
+ <em>инструкция1</em>
+else
+ if (<em>условие2</em>)
+ <em>инструкция2</em>
+ else
+ if (<em>условие3</em>)
+...
+</pre>
+
+<p>Чтобы выполнить несколько инструкций в условии, используйте блочный оператор ({...}) для группирования этих инструкций. В общем, хорошей практикой всегда является использование блочных операторов, особенно в коде, включающем вложенные операторы <code>if</code>:</p>
+
+<pre class="eval">if (<em>условие</em>) {
+ <em>инструкции1</em>
+} else {
+ <em>инструкции2</em>
+}
+</pre>
+
+<p>Не путайте примитивные логические значения <code>true</code> и <code>false</code> с правдивостью или ложностью булева объекта. Любое значение, которое не <code>undefined</code>, <code>null</code>, <code>0</code>, <code>NaN</code> или пустая строка (""), и любой объект, включая объект Boolean, значение которого является ложным, считается правдивым при использовании в качестве условия. Например:</p>
+
+<pre class="brush: js">var b = new Boolean(false);
+if (b) // это условие истинно
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_if...else">Использование <code>if...else</code></h3>
+
+<pre class="brush: js">if (cipher_char === from_char) {
+ result = result + to_char;
+ x++;
+} else {
+ result = result + clear_char;
+}
+</pre>
+
+<h3 id="Использование_else_if">Использование <code>else if</code></h3>
+
+<p>Обратите внимание, что в JavaScript нет синтаксиса <code>elseif</code>. Однако вы можете записать его с пробелом между <code>else</code> и <code>if</code>:</p>
+
+<pre class="brush: js">if (x &gt; 5) {
+
+} else if (x &gt; 50) {
+
+} else {
+
+}</pre>
+
+<h3 id="Присваивание_в_условном_выражении">Присваивание в условном выражении</h3>
+
+<p>Целесообразно не использовать простые присваивания в условном выражении, потому что при взгляде на код присваивание можно путать с равенством. Например, не используйте следующий код:</p>
+
+<pre class="brush: js">if (x = y) {
+ /* сделать что-то */
+}
+</pre>
+
+<p>Если вам нужно использовать присваивание в условном выражении, обычной практикой является размещение дополнительных скобок вокруг присваивания. Например:</p>
+
+<pre class="brush: js">if ((x = y)) {
+ /* сделать что-то */
+}
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-if-statement', 'if statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-if-statement', 'if statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.5', 'if statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.5', 'if statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.5', 'if statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Начальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Основная поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Свойство</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Основная поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/block", "block")}}</li>
+ <li>{{jsxref("Statements/switch", "switch")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/import.meta/index.html b/files/ru/web/javascript/reference/statements/import.meta/index.html
new file mode 100644
index 0000000000..ac60a71494
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/import.meta/index.html
@@ -0,0 +1,68 @@
+---
+title: import.meta
+slug: Web/JavaScript/Reference/Statements/import.meta
+tags:
+ - Модули
+translation_of: Web/JavaScript/Reference/Statements/import.meta
+---
+<div>{{JSSidebar("Statements")}}</div>
+
+<p><code style=""><font face="Arial, x-locale-body, sans-serif"><span style="background-color: #ffffff;">Объект </span></font><strong>import.meta</strong></code> это мета-свойство, указывающее мета-данные JavaScript модуля в зависимости от контекста. Он содержит информацию о модуле, например, URL модуля.</p>
+
+<h2 id="Синтакс">Синтакс</h2>
+
+<pre class="syntaxbox">import.meta</pre>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объект <code>import.meta</code> состоит из ключевого слова {{JSxRef("Statements/import","import")}}, точки и свойства с именем <code>meta</code>. Обычно выражение <code>import.</code> служит для доступа к свойству, но здесь <code>import.</code>, в действительности, не является объектом.</p>
+
+<p>Объект <code>import.meta</code> создан по реализации ECMAScript с прототипом объекта {{JSxRef("null")}}. Этот объект расширяем, и его свойства являются записываемыми, настраиваемыми и перечисляемыми.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Допустим, есть модуль <code>my-module.js</code></p>
+
+<pre class="brush: html">&lt;script type="module" src="my-module.js"&gt;&lt;/script&gt;
+</pre>
+
+<p>вы можете получить доступ к мета-информации об этом модуле, используя объект <code>import.meta</code>.</p>
+
+<pre class="brush: js;">console.log(import.meta); // { url: "file:///home/user/my-module.js" }</pre>
+
+<p>Это возвращает объект со свойством <code>url</code> показывающее базовый URL этого модуля. Это может быть либо URL с которого скрипт был получен (для внешних скриптов), либо базовый URL содержащего его документа (для внутренних скриптов).</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>Предложен <code><a href="https://github.com/tc39/proposal-import-meta/#importmeta">import.meta</a></code></td>
+ <td>Stage 3</td>
+ <td>Первичное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName("HTML WHATWG", "webappapis.html#hostgetimportmetaproperties", "import.meta")}}</td>
+ <td>{{Spec2("HTML WHATWG")}}</td>
+ <td>Определяет свойства <code>import.meta</code> в HTML.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+
+
+<p>{{Compat("javascript.statements.import_meta")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{JSxRef("Statements/import", "import")}}</li>
+ <li>{{JSxRef("Statements/export", "export")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/import/index.html b/files/ru/web/javascript/reference/statements/import/index.html
new file mode 100644
index 0000000000..bc4a369f52
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/import/index.html
@@ -0,0 +1,271 @@
+---
+title: import
+slug: Web/JavaScript/Reference/Statements/import
+tags:
+ - ECMAScript 2015
+ - ECMAScript6
+ - JavaScript
+ - import
+ - Инструкция
+ - Модули
+ - динамический импорт
+ - импорт
+translation_of: Web/JavaScript/Reference/Statements/import
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Инструкция <strong>import</strong> используется для импорта ссылок на значения, экспортированные из внешнего модуля. Импортированные модули находятся в {{JSxRef ("Strict_mode", "строгом режиме")}} независимо от того, объявляете ли вы их как таковые или нет. Для работы инструкции во встроенных скриптах нужно прописать у тэга script <code>type="module"</code>.</p>
+
+<p>Существует также function-like динамический <code>import()</code>, который не требует скриптов с типом "<code>module</code>".</p>
+
+<p>Обратная совместимость может быть обеспечена с помощью атрибута <code>nomodule</code> тега <a href="/ru/docs/Web/HTML/Element/script">script</a>.</p>
+
+<p>Динамический импорт полезен в ситуациях, когда вы хотите загрузить модуль условно или по требованию. Статическая форма предпочтительна для загрузки начальных зависимостей и может быть более полезна для инструментов статического анализа и <a href="/en-US/docs/Glossary/Tree_shaking">tree shaking</a>.</p>
+
+<div class="note">
+<p><strong>Внимание:</strong> На данный момент эта функциональность <a href="https://jakearchibald.com/2017/es-modules-in-browsers/">только начинает поддерживаться</a> браузерами. Полноценная реализация присутствует во многих транспайлерах, таких как TypeScript и <a href="http://babeljs.io/">Babel</a>, а также в сборщиках, например, в <a href="https://github.com/rollup/rollup">Rollup</a> и <a href="https://webpack.js.org/">Webpack</a>.</p>
+</div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">import <em>defaultExport</em> from "<em>module-name</em>";
+import * as <em>name</em> from "<em>module-name</em>";
+import { <em>export </em>} from "<em>module-name</em>";
+import { <em>export</em> as <em>alias </em>} from "<em>module-name</em>";
+import { <em>export1 , export2</em> } from "<em>module-name</em>";
+import { <em>export1 , export2</em> as <em>alias2</em> , <em>[…]</em> } from "<em>module-name</em>";
+import <em>defaultExport</em>, { <em>export</em> [ , <em>[…]</em> ] } from "<em>module-name</em>";
+import <em>defaultExport</em>, * as <em>name</em> from "<em>module-name</em>";
+import "<em>module-name</em>";
+import("/module-name.js").then(module =&gt; {…}) // Динамический импорт
+</pre>
+
+<dl>
+ <dt><code>defaultExport</code></dt>
+ <dd>Имя объекта, который будет ссылаться на значение экспорта по умолчанию (дефолтный экспорт) из модуля.</dd>
+ <dt><code>module-name</code></dt>
+ <dd>Имя модуля для импорта. Это зачастую относительный или абсолютный путь к <code>.js</code> файлу модуля без указания расширения <code>.js</code>. Некоторые сборщики могут разрешать или даже требовать использования расширения; проверяйте своё рабочее окружение. Допускаются только строки с одиночными или двойными кавычками.</dd>
+ <dt><code>name</code></dt>
+ <dd>Имя локального обьекта, который будет использован как своего рода пространство имен, ссылающееся на импортируемые значения.</dd>
+</dl>
+
+<dl>
+ <dt><code>export, exportN</code></dt>
+ <dd>Имена значений, которые будут импортированы.</dd>
+</dl>
+
+<dl>
+ <dt><code>alias, aliasN</code></dt>
+ <dd>Имена, которые будут ссылаться на импортируемые значения.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Параметр <code>name</code> это имя локального обьекта, который будет использован как своего рода пространство имен, ссылающееся на импортируемые значения. Параметры <code>export</code> определяют отдельные именованные значения, в то время как <code>import * as name</code> импортирует все значения. Примеры ниже объясняют синтаксис.</p>
+
+<h3 id="Импорт_всего_содержимого_модуля">Импорт всего содержимого модуля</h3>
+
+<p>Этот код вставляет объект <code>myModule</code> в текущую область видимости, содержащую все экспортированные значения из модуля, находящегося в файле <code>/modules/my-module.js</code>.</p>
+
+<pre class="brush: js">import * as <em>myModule</em> from '/modules/my-module.js';</pre>
+
+<p>В данном случае, доступ к импортируемым значениям можно осуществить с использованием имени модуля (в данном случае "myModule") в качестве пространства имен. Например, если импортируемый выше модуль включает в себя экспорт метода <code>doAllTheAmazingThings()</code>, вы можете вызвать его так:</p>
+
+<pre class="brush: js">myModule.doAllTheAmazingThings();</pre>
+
+<h3 id="Импорт_единичного_значения_из_модуля">Импорт единичного значения из модуля</h3>
+
+<p>Определенное ранее значение, названное <code>myExport,</code> которое было экспортировано из модуля <code>my-module</code> либо неявно (если модуль был экспортирован целиком), либо явно (с использованием инструкции {{jsxref("Statements/export", "export")}}), позволяет вставить <code>myExport</code> в текущую область видимости.</p>
+
+<pre class="brush: js">import {myExport} from '/modules/my-module.js';</pre>
+
+<h3 id="Импорт_нескольких_единичных_значений">Импорт нескольких единичных значений</h3>
+
+<p>Этот код  вставляет оба значения <code>foo</code> и <code>bar</code> в текущую область видимости.</p>
+
+<pre class="brush: js">import {foo, bar} from '/modules/my-module.js';</pre>
+
+<h3 id="Импорт_значений_с_использованием_более_удобных_имен">Импорт значений с использованием более удобных имен</h3>
+
+<p>Вы можете переименовать значения, когда импортируете их. Например, этот код вставляет <code>shortName</code> в текующую область видимости.</p>
+
+<pre class="brush: js">import {reallyReallyLongModuleExportName as shortName}
+ from '/modules/my-module.js';</pre>
+
+<h3 id="Переименование_нескольких_значений_в_одном_импорте">Переименование нескольких значений в одном импорте</h3>
+
+<p>Код, который импортирует несколько значений из модуля, используя более удобные имена.</p>
+
+<pre class="brush: js">import {
+ reallyReallyLongModuleExportName as shortName,
+ anotherLongModuleName as short
+} from '/modules/my-module.js';</pre>
+
+<h3 id="Импорт_модуля_для_использования_его_побочного_эффекта">Импорт модуля для использования его побочного эффекта</h3>
+
+<p>Импорт всего модуля только для использования побочного эффекта от его вызова, не импортируя что-либо. Это запускает глобальный код модуля, но в действительности не импортирует никаких значений.</p>
+
+<pre class="brush: js">import '/modules/my-module.js';
+</pre>
+
+<h3 id="Импорт_значения_по_умолчанию">Импорт значения по умолчанию</h3>
+
+<p>Есть возможность задать дефолтный {{jsxref("Statements/export", "export")}} (будь то объект, функция, класс или др.). Инструкция <code>import</code> затем может быть использована для импорта таких значений.</p>
+
+<p>Простейшая версия прямого импорта значения по умолчанию:</p>
+
+<pre class="brush: js">import myDefault from '/modules/my-module.js';
+</pre>
+
+<p>Возможно также использование такого синтаксиса с другими вариантами из перечисленных выше (импорт пространства имен или именованный импорт). В таком случае, импорт значения по умолчанию должен быть определён первым. Для примера:</p>
+
+<pre class="brush: js">import myDefault, * as myModule from '/modules/my-module.js';
+// myModule использовано как пространство имен</pre>
+
+<p>или</p>
+
+<pre class="brush: js">import myDefault, {foo, bar} from '/modules/my-module.js';
+// именованный импорт конкретных значений</pre>
+
+<h3 id="Импорт_переменных">Импорт переменных</h3>
+
+<p>Если вы импортируете переменные, то в данной области видимости они ведут себя как константы.</p>
+
+<p>Такой код выведет ошибку:</p>
+
+<h5 id="my-module.js">my-module.js</h5>
+
+<pre class="brush: js">export let a = 2;
+export let b = 3;
+</pre>
+
+<h5 id="main.js">main.js</h5>
+
+<pre class="brush: js">import {a, b} from '/modules/my-module.js';
+a = 5;
+b = 6;
+// Uncaught TypeError: Assignment to constant variable.</pre>
+
+<p>Для импорта можно воспользоваться объектом в котором хранятся эти переменные.</p>
+
+<p>Такой код будет рабочим:</p>
+
+<h5 id="my-module.js_2">my-module.js</h5>
+
+<pre class="brush: js">export let obj = {a:2, b:4};
+</pre>
+
+<h5 id="main.js_2">main.js</h5>
+
+<pre class="brush: js">import {obj} from '/modules/my-module.js';
+
+obj.a = 1;
+obj.b = 4;</pre>
+
+<p>Учитывая, что <code>import</code> хранит именно ссылки на значения, экспортированные из внешнего модуля, то это можно использовать как замыкания.</p>
+
+<h3 id="Динамический_импорт">Динамический импорт</h3>
+
+<p>Ключевое слово <code>import</code> можно использовать как функцию для динамического импорта модулей. Вызов <code>import()</code> возвращает Promise.</p>
+
+<pre class="brush: js">import('/modules/my-module.js')
+ .then(module =&gt; {
+ // Делаем что-нибудь с модулем
+ })
+</pre>
+
+<p>Как следствие возврата Promise, с динамическим импортом можно использовать ключевое слово <code>await</code></p>
+
+<pre class="brush: js">let module = await import('/modules/my-module.js');</pre>
+
+<p>Обратите внимание, что несмотря на то, что динамический импорт выглядит как вызов функции, он им по сути не является, т.е. не наследует от <code>Function.prototype</code> и, как следствие, его невозможно использовать вместе с методами <code>.call</code>, <code>.apply</code> и <code>.bind </code></p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Импорт из вспомогательного модуля для помощи в обработке запроса AJAX JSON.</p>
+
+<h3 id="Модуль_file.js">Модуль: file.js</h3>
+
+<pre class="brush: js; highlight: [14]">function getJSON(url, callback) {
+ let xhr = new XMLHttpRequest();
+ xhr.onload = function () {
+ callback(this.responseText)
+ };
+ xhr.open('GET', url, true);
+ xhr.send();
+}
+
+export function getUsefulContents(url, callback) {
+ getJSON(url, data =&gt; callback(JSON.parse(data)));
+}
+</pre>
+
+<h3 id="Основной_код_main.js">Основной код: main.js</h3>
+
+<pre class="brush: js">import { getUsefulContents } from '/modules/file.js';
+
+getUsefulContents('http://www.example.com',
+ data =&gt; { doSomethingUseful(data); });</pre>
+
+<h3 id="Динамический_импорт_2">Динамический импорт</h3>
+
+<p>Этот пример показывает, как можно загрузить на страницу дополнительный модуль в зависимости от действий пользователя (в данном случае, по клику на кнопку), а затем использовать функции из загруженного модуля. Промисы - это не единственный способ использовать динамический импорт. Функция <code>import()</code> также может использоваться совместно с <code>await</code>.</p>
+
+<pre class="brush: js">const main = document.querySelector("main");
+for (const link of document.querySelectorAll("nav &gt; a")) {
+ link.addEventListener("click", e =&gt; {
+ e.preventDefault();
+
+ import('/modules/my-module.js')
+ .then(module =&gt; {
+ module.loadPageInto(main);
+ })
+ .catch(err =&gt; {
+ main.textContent = err.message;
+ });
+ });
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комменарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-imports', 'Imports')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Начальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2020', '#sec-imports', 'Imports')}}</td>
+ <td>{{Spec2('ES2020')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-imports', 'Imports')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+<div class="hidden">
+<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.statements.import")}}</p>
+
+<h2 id="Смотри_также">Смотри также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/export", "export")}}</li>
+ <li><a href="https://blogs.windows.com/msedgedev/2016/05/17/es6-modules-and-beyond/">Previewing ES6 Modules and more from ES2015, ES2016 and beyond</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/08/es6-in-depth-modules/">ES6 in Depth: Modules</a>, Hacks blog post by Jason Orendorff</li>
+ <li><a class="external" href="http://exploringjs.com/es6/ch_modules.html">Axel Rauschmayer's book: "Exploring JS: Modules"</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/index.html b/files/ru/web/javascript/reference/statements/index.html
new file mode 100644
index 0000000000..11c44fdf08
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/index.html
@@ -0,0 +1,162 @@
+---
+title: Инструкции и объявления
+slug: Web/JavaScript/Reference/Statements
+tags:
+ - JavaScript
+ - Reference
+ - statements
+translation_of: Web/JavaScript/Reference/Statements
+---
+<div>
+ {{jsSidebar("Statements")}}</div>
+<p>Приложения на JavaScript состоят из инструкций с соответствующим синтаксисом. Одна инструкция может состоять из нескольких строк. На одной строке может находиться несколько инструкций, если они разделены точкой с запятой. Они являются не ключевыми словами, а группами ключевых слов.</p>
+<h2 id="Statements_and_declarations_by_category" name="Statements_and_declarations_by_category">Инструкции и объявления по категориям</h2>
+<p>Алфавитный список смотрите в боковой панели слева.</p>
+<h3 id="Control_flow" name="Control_flow">Управление потоком выполнения</h3>
+<dl>
+ <dt>
+ {{jsxref("Statements/block", "Блок", "", 1)}}</dt>
+ <dd>
+ Блок используется для группировки нуля и более инструкций. Блок отделяется парой фигурных скобок.</dd>
+ <dt>
+ {{jsxref("Statements/break", "break")}}</dt>
+ <dd>
+ Прерывает текущую инструкцию цикла, ветвления или инструкцию с меткой и передаёт управление на инструкцию, следующую за прерываемой.</dd>
+ <dt>
+ {{jsxref("Statements/continue", "continue")}}</dt>
+ <dd>
+ Прерывает выполнение инструкции в текущей итерации текущего цикла или цикла с меткой и продолжает выполнение цикла со следующей итерации.</dd>
+ <dt>
+ {{jsxref("Statements/Empty", "Пустая инструкция", "", 1)}}</dt>
+ <dd>
+ Пустая инструкция используется тогда, когда никакой инструкции быть не должно, а по синтаксису JavaScript она требуется.</dd>
+ <dt>
+ {{jsxref("Statements/if...else", "if...else")}}</dt>
+ <dd>
+ Выполняет инструкцию, если указанное условие является истинным. Если условие ложно, выполняет другую инструкцию.</dd>
+ <dt>
+ {{jsxref("Statements/switch", "switch")}}</dt>
+ <dd>
+ Вычисляет выражение, сопоставляет вычисленное значение с выражением выбора и выполняет инструкции, ассоциированные с этим выбором.</dd>
+ <dt>
+ {{jsxref("Statements/throw", "throw")}}</dt>
+ <dd>
+ Выбрасывает пользовательское исключение.</dd>
+ <dt>
+ {{jsxref("Statements/try...catch", "try...catch")}}</dt>
+ <dd>
+ Помечает блок инструкций и определяет реакцию на возникновение исключения внутри помеченного блока инструкций.</dd>
+</dl>
+<h3 id="Declarations" name="Declarations">Объявления</h3>
+<dl>
+ <dt>
+ {{jsxref("Statements/var", "var")}}</dt>
+ <dd>
+ Объявляет переменную, необязательно инициализирует её значением.</dd>
+ <dt>
+ {{experimental_inline}} {{jsxref("Statements/let", "let")}}</dt>
+ <dd>
+ Объявляет локальную переменную в области видимости блока, необязательно инициализирует её значением.</dd>
+ <dt>
+ {{experimental_inline}} {{jsxref("Statements/const", "const")}}</dt>
+ <dd>
+ Объявляет именованную константу только для чтения.</dd>
+</dl>
+<h3 id="Functions" name="Functions">Функции</h3>
+<dl>
+ <dt>
+ {{jsxref("Statements/function", "function")}}</dt>
+ <dd>
+ Объявляет функцию с указанными параметрами.</dd>
+ <dt>
+ {{experimental_inline}} {{jsxref("Statements/function*", "function*")}}</dt>
+ <dd>
+ Функции-генераторы, упрощающие написание <a href="/ru/docs/Web/JavaScript/Guide/The_Iterator_protocol">итераторов</a>.</dd>
+ <dt>
+ {{jsxref("Statements/return", "return")}}</dt>
+ <dd>
+ Определяет значение, возвращаемое из функции.</dd>
+ <dt>
+ {{experimental_inline}} {{jsxref("Statements/yield", "yield")}}</dt>
+ <dd>
+ Смотрите статьи <a href="/ru/docs/Web/JavaScript/New_in_JavaScript/1.7">Что нового в JavaScript 1.7</a> и <a href="/ru/docs/JavaScript/Guide/Iterators_and_Generators">Итераторы и генераторы</a>.</dd>
+</dl>
+<h3 id="Iterations" name="Iterations">Итерации</h3>
+<dl>
+ <dt>
+ {{jsxref("Statements/do...while", "do...while")}}</dt>
+ <dd>
+ Создаёт цикл, выполняющий указанную инструкцию до тех пор, пока проверяющее условие равно <code>false</code>. Условие вычисляется после выполнения инструкции, так что указанная инструкция выполнится хотя бы один раз.</dd>
+ <dt>
+ {{jsxref("Statements/for", "for")}}</dt>
+ <dd>
+ Создаёт цикл, состоящий из трёх необязательных выражений, заключённых в круглые скобки и разделённым точками с запятой с последующей инструкцией, выполняющейся в цикле.</dd>
+ <dt>
+ {{deprecated_inline}} {{non-standard_inline}} {{jsxref("Statements/for_each...in", "for each...in")}}</dt>
+ <dd>
+ Проходит указанной переменной по всем значениям свойств объекта. Выполняет инструкции для каждого уникального свойства.</dd>
+ <dt>
+ {{jsxref("Statements/for...in", "for...in")}}</dt>
+ <dd>
+ В случайном порядке проходит по перечислимым свойствам объекта. Выполняет инструкции для каждого уникального свойства.</dd>
+ <dt>
+ {{experimental_inline}} {{jsxref("Statements/for...of", "for...of")}}</dt>
+ <dd>
+ Проходит по итерируемым объектам (включающим в себя {{jsxref("Global_Objects/Array", "массивы", "", 1)}}, массивоподобные объекты и <a href="/ru/docs/JavaScript/Guide/Iterators_and_Generators">итераторы с генераторами</a>), выполняя пользовательский хук с инструкциями, исполняющимися для значения каждого уникального свойства.</dd>
+ <dt>
+ {{jsxref("Statements/while", "while")}}</dt>
+ <dd>
+ Создаёт цикл, выполняющий указанную инструкцию до тех пор, пока проверяющее условие равно <code>true</code>. Условие вычисляется перед выполнением инструкции..</dd>
+</dl>
+<h3 id="Others" name="Others">Прочее</h3>
+<dl>
+ <dt>
+ {{jsxref("Statements/debugger", "debugger")}}</dt>
+ <dd>
+ Вызывает любую доступную функциональность отладки. Если функциональность отладки не доступна, эта инструкция ничего не делает.</dd>
+ <dt>
+ {{obsolete_inline}} {{jsxref("Statements/export", "export")}}</dt>
+ <dd>
+ Используется для экспорта подписанным скриптом свойств, функций и объектов в другие подписанные или неподписанные скрипты. Эта древняя функциональность Netscape была удалена и будет пересмотрена модулями ECMAScript 6.</dd>
+ <dt>
+ {{obsolete_inline}} {{jsxref("Statements/import", "import")}}</dt>
+ <dd>
+ Используется для импорта скриптом свойств, функций и объектов из подписанного скрипта, который предоставил эту информацию. Эта древняя функциональность Netscape была удалена и будет пересмотрена модулями ECMAScript 6.</dd>
+ <dt>
+ {{jsxref("Statements/label", "label")}}</dt>
+ <dd>
+ Предоставляет инструкцию с идентификатором, на который вы можете сослаться с помощью инструкций <code>break</code> или <code>continue</code>.</dd>
+ <dt>
+ {{deprecated_inline}} {{jsxref("Statements/with", "with")}}</dt>
+ <dd>
+ Расширяет цепочку областей видимости инструкции.</dd>
+</dl>
+<h2 id="Specifications" name="Specifications">Спецификации</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 1-е издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12', 'Инструкции')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-ecmascript-language-statements-and-declarations', 'Язык ECMAScript: инструкции и объявления')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Новое в этой спецификации: {{jsxref("Statements/function*", "function*")}}, {{jsxref("Statements/let", "let")}}, {{jsxref("Statements/for...of", "for...of")}}, {{jsxref("Statements/yield", "yield")}}.</td>
+ </tr>
+ </tbody>
+</table>
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+<ul>
+ <li>{{jsxref("Operators", "Операторы", "", 1)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/label/index.html b/files/ru/web/javascript/reference/statements/label/index.html
new file mode 100644
index 0000000000..129afe8d3f
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/label/index.html
@@ -0,0 +1,179 @@
+---
+title: label
+slug: Web/JavaScript/Reference/Statements/label
+tags:
+ - JavaScript
+ - Statement
+ - Метка
+translation_of: Web/JavaScript/Reference/Statements/label
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Инструкция метки (<strong>label</strong>) используется вместе с {{jsxref("Statements/break", "break")}} или {{jsxref("Statements/continue", "continue")}} для альтернативного выхода из цикла. Оно добавляется перед блочным выражением в качестве ссылки, которая может быть использована в дальнейшем.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/statement-label.html")}}</p>
+
+<div class="blockIndicator note">
+<p><strong>Примечание:</strong> Помеченные циклы используются очень редко. Обычно вместо этого используют вызов функций.</p>
+</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox"><em>label</em> :
+ <em>statement</em>
+</pre>
+
+<dl>
+ <dt><code>label</code></dt>
+ <dd>Любой идентификатор JavaScript, который не является ключевым словом.</dd>
+ <dt><code>statement</code></dt>
+ <dd>Инструкция. <code>break</code> может быть использован с любой отмеченной инструкцией, а <code>continue</code> только с метками около начала цикла.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Вы можете применять метки для обозначения циклов, чтобы затем при помощи <code>break</code> или <code>continue</code> выходить из цикла или продолжать его работу с новой итерации.</p>
+
+<p>В JavaScript <em>нет</em> оператора <code>goto</code>, вы можете использовать только метки с <code>break</code> или <code>continue</code>.</p>
+
+<p>В <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">строгом режиме</a> вы не можете использовать "<code>let</code>" как имя метки. Это генерирует ошибку {{jsxref("SyntaxError")}} (let is a reserved identifier).</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Использование_метки_с_continue_с_циклом_for">Использование метки с <code>continue</code> с циклом <code>for</code></h3>
+
+<pre class="brush: js">var i, j;
+
+loop1:
+for (i = 0; i &lt; 3; i++) { //Первый цикл, обозначенный меткой "loop1"
+ loop2:
+ for (j = 0; j &lt; 3; j++) { //Второй цикл, обозначенный меткой "loop2"
+ if (i == 1 &amp;&amp; j == 1) {
+ continue loop1;
+ }
+ console.log("i = " + i + ", j = " + j);
+ }
+}
+
+// Вывод:
+// "i = 0, j = 0"
+// "i = 0, j = 1"
+// "i = 0, j = 2"
+// "i = 1, j = 0"
+// "i = 2, j = 0"
+// "i = 2, j = 1"
+// "i = 2, j = 2"
+// Обратите внимание на пропуск "i = 1, j = 1" и "i = 1, j = 2"
+</pre>
+
+<h3 id="Example_2" name="Example_2">Другой пример использования метки с <code>continue</code></h3>
+
+<p>На входе массив элементов и массив функций для проверки, в примере вычисляется количество элементов массива, которые проходят все тесты.</p>
+
+<pre class="brush: js"><code>var itemsPassed = 0;
+var i, j;
+
+top:
+for (i = 0; i &lt; items.length; i++) {
+ for (j = 0; j &lt; tests.length; j++) {
+ if (!tests[j].pass(items[i])) {
+ continue top;
+ }
+ }
+
+ itemsPassed++;
+}</code></pre>
+
+<h3 id="Использование_меток_с_break" style="line-height: 24px; font-size: 1.71428571428571rem;">Использование меток с <code>break</code></h3>
+
+<pre class="brush: js" style="font-size: 14px;">var i, j;
+
+loop1:
+for (i = 0; i &lt; 3; i++) { //Первый цикл, обозначенный меткой "loop1"
+ loop2:
+ for (j = 0; j &lt; 3; j++) { //Второй цикл, обозначенный меткой "loop2"
+ if (i == 1 &amp;&amp; j == 1) {
+ break loop1;
+ }
+ console.log("i = " + i + ", j = " + j);
+ }
+}
+
+// Вывод:
+// "i = 0, j = 0"
+// "i = 0, j = 1"
+// "i = 0, j = 2"
+// "i = 1, j = 0"
+// Обратите внимание на аналогичный пример с continue</pre>
+
+<h3 id="Example_3" name="Example_3">Другой пример использования меток с <code>break</code></h3>
+
+<p>Дан массив элементов и массив с функциями для проверки, в примере определяется, проходят ли все элементы первого массива все тесты из второго массива.</p>
+
+<pre class="brush: js">var allPass = true;
+var i, j;
+
+top:
+for (i = 0; items.length; i++)
+ for (j = 0; j &lt; tests.length; i++)
+ if (!tests[j].pass(items[i])){
+ allPass = false;
+ break top;
+ }</pre>
+
+<h3 id="Помеченные_объявления_функция">Помеченные объявления функция</h3>
+
+<p>Начиная с ECMAScript 2015, помеченные объявления функция являются стандартными для нестрогого режима.</p>
+
+<pre class="brush: js">L: function F() {}</pre>
+
+<p>Однако, в <a href="/ru/docs/Web/JavaScript/Reference/Strict_mode">строгом режиме</a> генерируется ошибка {jsxref("SyntaxError")}}:</p>
+
+<p>In <a href="https://wiki.developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a> code, however, this will throw a {{jsxref("SyntaxError")}}:</p>
+
+<pre class="brush: js"><code>'use strict';
+L: function F() {}
+// SyntaxError: functions cannot be labelled</code></pre>
+
+<p><a href="/ru/docs/Web/JavaScript/Reference/Statements/function*">Функции-генераторы</a> не могут быть помечены ни в том, ни в другом режиме:</p>
+
+<pre class="brush: js"><code>L: function* F() {}
+// SyntaxError: generator functions cannot be labelled</code></pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение. Реализован в JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.12', 'Labelled statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-labelled-statements', 'Labelled statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{Compat("javascript.statements.label")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/break", "break")}}</li>
+ <li>{{jsxref("Statements/continue", "continue")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/let/index.html b/files/ru/web/javascript/reference/statements/let/index.html
new file mode 100644
index 0000000000..ac3e59d716
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/let/index.html
@@ -0,0 +1,414 @@
+---
+title: let
+slug: Web/JavaScript/Reference/Statements/let
+translation_of: Web/JavaScript/Reference/Statements/let
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<div>Директива <code><strong>let</strong></code> объявляет переменную с блочной областью видимости с возможностью инициализировать её значением.</div>
+
+<div></div>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];
+</pre>
+
+<h3 id="Параметры">Параметры</h3>
+
+<dl>
+ <dt><code>var1</code>, <code>var2</code>, …, <code>varN</code></dt>
+ <dd>Имя переменной. Может использоваться любой допустимый идентификатор.</dd>
+ <dt><code>value1</code>, <code>value2</code>, …, <code>valueN</code></dt>
+ <dd>Значение переменной. Любое допустимое выражение.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Директива <code><strong>let</strong></code><strong> </strong>позволяет объявить локальную переменную с областью видимости, ограниченной текущим блоком кода . В отличие от ключевого слова <a href="/en-US/docs/JavaScript/Reference/Statements/var" title="JavaScript/Reference/Statements/var"><code>var</code></a>, которое объявляет переменную глобально или локально во всей функции, независимо от области блока.</p>
+
+<p>Объяснение, почему было выбрано название "<strong>let</strong>" можно найти <a href="https://stackoverflow.com/questions/37916940/why-was-the-name-let-chosen-for-block-scoped-variable-declarations-in-javascri">здесь</a>.</p>
+
+<h3 id="Правила_области_видимости_2">Правила области видимости</h3>
+
+<p>Областью видимости переменных, объявленных ключевым словом <code>let</code>, является блок, в котором они объявлены, и все его подблоки. В этом работа директива <code>let</code> схожа с работой директивы <code>var</code>. Основная разница заключается в том, что областью видимости переменной, объявленной директивой <code>var</code>, является вся функция, в которой она объявлена:</p>
+
+<pre class="brush:js">function varTest() {
+ var x = 1;
+ if (true) {
+ var x = 2; // та же переменная!
+ console.log(x); // 2
+ }
+ console.log(x); // 2
+}
+
+function letTest() {
+ let x = 1;
+ if (true) {
+ let x = 2; // другая переменная
+ console.log(x); // 2
+ }
+ console.log(x); // 1
+}
+</pre>
+
+<h3 id="sect1"></h3>
+
+<h3 id="Чище_код_во_вложенных_функциях">Чище код во вложенных функциях</h3>
+
+<p><code>let</code> иногда делает код чище при использовании вложенных функций.</p>
+
+<pre class="brush: js">var list = document.getElementById("list");
+
+for (let i = 1; i &lt;= 5; i++) {
+ let item = document.createElement('li');
+ item.appendChild(document.createTextNode('Item ' + i));
+
+ item.onclick = function(ev) {
+ console.log('Item ' + i + ' is clicked.');
+ };
+ list.appendChild(item);
+}
+
+// чтобы получить такой же эффект с использованием 'var'
+// необходимо создать новый контекст
+// используя замыкание, чтобы сохранить значение неизменённым
+for (var i = 1; i &lt;= 5; i++) {
+ var item = document.createElement("li");
+ item.appendChild(document.createTextNode("Item " + i));
+
+ (function(i){
+ item.onclick = function(ev) {
+ console.log('Item ' + i + ' is clicked.');
+ };
+ })(i);
+ list.appendChild(item);
+}</pre>
+
+<p>Пример выше будет выполнен как и ожидается, так как пять экземпляров внутренней функции (анонимной) будут ссылаться на пять разных экземпляров переменной <code>i</code>. Пример будет выполнен неверно, если заменить директиву <code>let</code> на <code>var,</code> или удалить переменную <code>i</code> из параметров вложенной функции и использовать внешнюю переменную <code>i</code> во внутренней функции.</p>
+
+<p id="Правила_области_видимости">На верхнем уровне скриптов и функций <code>let, в отличии от var, не создает свойства на глобальном объекте</code>. Например:</p>
+
+<pre class="brush:js">var x = 'global_x';
+let y = 'global_y';
+console.log(this.x); // 'global_x'
+console.log(this.y); // undefined
+</pre>
+
+<p>В выводе программы будет отображено слово "global_x" для <code>this.x</code>, но <code>undefined</code> для <code>this.y</code>.</p>
+
+<h3 id="Эмуляция_приватных_членов">Эмуляция приватных членов</h3>
+
+<p>При взаимодействии с <a href="https://developer.mozilla.org/en-US/docs/Glossary/Constructor">конструкторами</a> можно использовать выражение <strong><code>let</code></strong> чтобы открыть доступ к одному или нескольким приватным членам через использование <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures">замыканий</a>:</p>
+
+<pre class="brush: js">var SomeConstructor;
+
+{
+ let privateScope = {};
+
+ SomeConstructor = function SomeConstructor() {
+ this.someProperty = 'foo';
+ privateScope.hiddenProperty = 'bar';
+ }
+
+ SomeConstructor.prototype.showPublic = function() {
+ console.log(this.someProperty); // foo
+ }
+
+ SomeConstructor.prototype.showPrivate = function() {
+ console.log(privateScope.hiddenProperty); // bar
+ }
+
+}
+
+var myInstance = new SomeConstructor();
+
+myInstance.showPublic();
+myInstance.showPrivate();
+
+console.log(privateScope.hiddenProperty); // error</pre>
+
+<p>Эта техника позволяет получить только "статичное" приватное состояние - в примере выше, все экземпляры полученные из конструктора <code>SomeConstructor</code> будут ссылаться на одну и ту же область видимости <code>privateScope</code>.</p>
+
+<h3 id="Временные_мертвые_зоны_и_ошибки_при_использовании_let">Временные мертвые зоны и ошибки при использовании <code>let</code></h3>
+
+<p>Повторное объявление той же переменной в том же блоке или функции приведет к выбросу исключения <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError">SyntaxError</a>.</p>
+
+<pre class="brush: js">if (x) {
+ let foo;
+ let foo; // SyntaxError thrown.
+}</pre>
+
+<p>В стандарте ECMAScript 2015 переменные, объявленные директивой let, переносятся в начало блока. Но если вы сошлетесь в блоке на переменную, до того как она объявлена директивой let, то это приведет к выбросу исключения <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/ReferenceError" title="TypeError">ReferenceError</a></code>, потому что переменная находится во "временной мертвой зоне" с начала блока и до места ее объявления. (В отличии от переменной, объявленной через <code>var</code>, которая просто будет содержать значение <code>undefined</code>)</p>
+
+<pre class="brush: js"><code>function do_something() {
+ console.log(bar); // undefined
+ console.log(foo); // ReferenceError: foo is not defined
+ var bar = 1;
+ let foo = 2;
+}</code></pre>
+
+<p>Вы можете столкнуться с ошибкой в операторах блока  <code><a href="/en-US/docs/JavaScript/Reference/Statements/switch" title="switch">switch</a></code>, так как он имеет только один подблок.</p>
+
+<pre class="brush: js">switch (x) {
+  case 0:
+    let foo;
+    break;
+
+  case 1:
+    let foo; // Выброс SyntaxError из-за повторного объявления переменной
+    break;
+}</pre>
+
+<h3 id="Использование_let_в_циклах_for"><code>Использование let в циклах</code> <code>for</code></h3>
+
+<p>Вы можете использовать ключевое слово <code>let</code> для привязки переменных к локальной области видимости цикла <code>for</code>. Разница с использованием <code>var</code> в заголовке цикла <code>for</code>, заключается в том, что переменные объявленные <code>var</code>, будут видны во всей функции, в которой находится этот цикл.</p>
+
+<pre class="brush:js">var i=0;
+for ( let i=i ; i &lt; 10 ; i++ ) {
+ console.log(i);
+}
+</pre>
+
+<h3 id="Правила_области_видимости_3">Правила области видимости</h3>
+
+<pre class="brush: js">for (let <var>expr1</var>; <var>expr2</var>; <var>expr3</var>) <var>statement</var>
+</pre>
+
+<p>В этом примере <var>expr2</var>, <var>expr3, statement </var> заключены в неявный блок, который содержит блок локальных переменных, объявленых конструкцией <code>let <em>expr1</em></code>. Пример приведен выше.</p>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="let_vs_var"><code>let</code> vs <code>var</code></h3>
+
+<p>Когда let используется внутри блока, то область видимости переменной ограничивается этим блоком. Напомним, что отличие заключается в том, что областью видимости переменных, объявленных диретивой var, является вся функция, в которой они были объявлены.</p>
+
+<pre class="brush: js">var a = 5;
+var b = 10;
+
+if (a === 5) {
+ let a = 4; // The scope is inside the if-block
+ var b = 1; // The scope is inside the function
+
+ console.log(a); // 4
+ console.log(b); // 1
+}
+
+console.log(a); // 5
+console.log(b); // 1</pre>
+
+<h3 id="let_в_циклах"><code>let</code> в циклах</h3>
+
+<p>Вы можете использовать ключевое слово <code>let</code> для привязки переменных к локальной области видимости цикла <code>for</code>, вместо того что бы использовать глобальные переменные (объявленные с помощью <code>var</code>).</p>
+
+<pre class="brush: js">for (let i = 0; i&lt;10; i++) {
+ console.log(i); // 0, 1, 2, 3, 4 ... 9
+}
+
+console.log(i); // i is not defined</pre>
+
+<h2 id="Нестандартизированные_расширения_let">Нестандартизированные расширения <code>let</code></h2>
+
+<h3 id="let_блок"><code>let</code> блок</h3>
+
+<div class="warning">
+<p><code>Поддержка let</code> блоков была убрана в Gecko 44  {{bug(1023609)}}.</p>
+</div>
+
+<p><strong>let блок</strong> предоставляет способ, ассоциировать значения с перемеными внутри области видимости этого блока, без влияния на значения переменных с теми же именами вне этого блока.</p>
+
+<h4 id="Синтаксис_2">Синтаксис</h4>
+
+<pre class="brush: js">let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) block;
+</pre>
+
+<h4 id="Описание_2">Описание</h4>
+
+<p><strong><code>let</code> </strong>блок предоставляет локальную область видимости для переменных. Работа его заключается в привязке нуля или более переменных к области видимости этого блока кода, другими словами, он является блоком операторов. Отметим, что область видимости переменных, объявленных директивой <code>var</code>, в <strong>блоке <code>let</code></strong>, будет той же самой, что и если бы эти переменные были объявленны вне <strong>блока <code>let</code></strong>, иными словами областью видимости таких переменных по-прежнему является функция. Скобки в<strong> блоке </strong><code><strong>let</strong></code> являются обязательными. Опускание их приведет к синтаксической ошибке.</p>
+
+<h4 id="Пример">Пример</h4>
+
+<pre class="brush:js">var x = 5;
+var y = 0;
+
+let (x = x+10, y = 12) {
+ console.log(x+y); // 27
+}
+
+console.log(x + y); // 5
+</pre>
+
+<p>Правила для этого блока кода аналогичны как и для любого другого блока кода в JavaScript. Он может содержать свои локальные переменные, объявленные <code>let</code>.</p>
+
+<h4 id="Правила_области_видимости_4">Правила области видимости</h4>
+
+<p>Областью видимости переменных, объявленных директивой <code>let</code>, в <strong>блоке </strong><code><strong>let</strong></code> является сам блок и все подблоки в нем, если они не содержат объявлений переменных с теми же именами. </p>
+
+<h3 id="let_выражения"><code>let</code> выражения</h3>
+
+<div class="warning">
+<p><code>Поддержка let выражений</code> была убрана в Gecko 41  {{bug(1023609)}}.</p>
+</div>
+
+<p><strong><code>let выражение</code></strong> позволяет объявить переменные с областью видимости ограниченной одним выражением.</p>
+
+<h4 id="Синтаксис_3">Синтаксис</h4>
+
+<pre class="syntaxbox">let (var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]) expression;</pre>
+
+<h4 id="Пример_2">Пример</h4>
+
+<p>Вы можете использовать let для объявления переменных, областью видимости которых является только одно выражение:</p>
+
+<pre class="brush: js">var a = 5;
+let(a = 6) console.log(a); // 6
+console.log(a); // 5</pre>
+
+<h4 id="Правила_области_видимости_5">Правила области видимости</h4>
+
+<p>В данном <strong><code>let</code> выражении</strong>:</p>
+
+<pre class="brush: js">let (<var>decls</var>) <var>expr</var>
+</pre>
+
+<p><em><code>expr</code> </em>оборачивается в неявный блок.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первоначальное определение. Не описывает let выражения или let блоки.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-let-and-const-declarations', 'Let and Const Declarations')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддержка_браузерами">Поддержка браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>
+ <p class="p1">{{CompatChrome(41.0)}}</p>
+ </td>
+ <td>{{ CompatGeckoDesktop("1.8.1") }} [1]</td>
+ <td>11</td>
+ <td>17</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Temporal dead zone</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{ CompatGeckoDesktop("35") }} [1]</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td><code>let</code> expression {{non-standard_inline}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("1.8.1") }} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td><code>let</code> block {{non-standard_inline}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoDesktop("1.8.1") }} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatUnknown}}</td>
+ <td>
+ <p class="p1">{{CompatChrome(41.0)}}</p>
+ </td>
+ <td>{{ CompatGeckoMobile("1.8.1") }} [1]</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Temporal dead zone</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{ CompatGeckoMobile("35") }} [1]</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td><code>let</code> expression {{non-standard_inline}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile("1.8.1") }} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td><code>let</code> block {{non-standard_inline}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{ CompatGeckoMobile("1.8.1") }} [1]</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h3 id="sect2"></h3>
+
+<h3 id="Особенности_Firefox">Особенности Firefox</h3>
+
+<ul>
+ <li>До SpiderMonkey 46 {{geckoRelease(46)}} выбрасывал {{jsxref("TypeError")}} на повторное объявление, вместо {{jsxref("SyntaxError")}} ({{bug(1198833)}}).</li>
+ <li>До SpiderMonkey 44 {{geckoRelease(44)}}, <code>let</code> был доступен только для блоков кода обернутых в HTML <code>&lt;script type="application/javascript;version=1.7"&gt;</code>block (or higher version) и имел другую сематнику.</li>
+ <li>Поддержка в {{domxref("Worker")}} код спрятан за <code>dom.workers.latestJSVersion</code> флагом ({{bug(487070)}}). Без версии <code>let</code>, флаг будет удален в будущем ({{bug(1219523)}}).</li>
+ <li>Соблюдение стандарта ES2015 для <code>let</code> в SpIderMonkey отслеживатся в {{bug(950547)}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/return/index.html b/files/ru/web/javascript/reference/statements/return/index.html
new file mode 100644
index 0000000000..107173c310
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/return/index.html
@@ -0,0 +1,156 @@
+---
+title: return
+slug: Web/JavaScript/Reference/Statements/return
+tags:
+ - JavaScript
+ - Оператор
+translation_of: Web/JavaScript/Reference/Statements/return
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Оператор <strong><code>return</code> </strong>завершает выполнение текущей функции и возвращает её значение.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/statement-return.html")}}</div>
+
+<p class="hidden">Исходный код данного интерактивного примера хранится в репозитории на GitHub. Если вы хотите поучаствовать в проекте интерактивных примеров, пожалуйства, склонируйте <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> и отправьте нам запрос на включение ваших изменений.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">return [[выражение]]; </pre>
+
+<dl>
+ <dt><code><font face="Consolas, Liberation Mono, Courier, monospace">выражение</font></code></dt>
+ <dd>Выражение, значение которого будет возвращено. Если не указано, вместо него возвращается <code>undefined</code>.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>При вызове оператора <code>return</code> в функции её выполнение прекращается. Указанное значение возвращается в место вызова функции. Например, приведенная ниже функция возвращает возведенное в квадрат значение своего аргумента, <code>x</code> (где <code>x</code> – это число):</p>
+
+<pre class="brush: js">function square(x) {
+ return x * x;
+}
+var demo = square(3);
+// значение demo будет равняться 9
+</pre>
+
+<p>Если возвращаемое значение не указано, вместо него возращается <code>undefined</code>.</p>
+
+<p>Следующие выражения всегда прерывают выполнение функции:</p>
+
+<pre class="brush: js">return;
+return true;
+return false;
+return x;
+return x + y / 3;
+</pre>
+
+<h3 id="Автоматическая_расстановка_точек_с_запятыми">Автоматическая расстановка точек с запятыми</h3>
+
+<p>На выражение <code>return</code> влияет <a href="/ru/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">автоматическая расстановка точек с запятыми (ASI)</a>. Разрыв строки не допускается между ключевым словом <code>return</code> и выражением.</p>
+
+<pre class="brush: js">return
+a + b;</pre>
+
+<p class="brush: js">трансформируется ASI в:</p>
+
+<pre class="brush: js">return;
+a + b;</pre>
+
+<p class="brush: js">В консоли появится предупреждение "unreachable code after return statement".</p>
+
+<div class="note">Начиная с Gecko 40 {{geckoRelease(40)}}, предупреждение в консоли появляется, если обнаружен недостижимый код после <code>return</code>.</div>
+
+<p>Для того, чтобы избежать данной проблемы (предотвратить ASI), можно использовать скобки:</p>
+
+<pre class="brush: js">return (
+ a + b;
+);</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Прерывание_функции">Прерывание функции</h3>
+
+<p><font face="Open Sans, Arial, sans-serif">Функция немедленно останавливается в точке, где вызывается </font><code>return</code>.</p>
+
+<pre class="brush: js">function counter() {
+ for (var count = 1; ; count++) { // бесконечный цикл
+ console.log(count + "A"); // до 5
+ if (count === 5) {
+ return;
+ }
+ console.log(count + "B"); // до 4
+ }
+ console.log(count + "C"); // никогда не появляется
+}
+
+counter();
+
+// Выводит:
+// 1A
+// 1B
+// 2A
+// 2B
+// 3A
+// 3B
+// 4A
+// 4B
+// 5A
+</pre>
+
+<h3 id="Возвращение_функции">Возвращение функции</h3>
+
+<p>Смотрите также статью о <a href="/ru/docs/Web/JavaScript/Closures">замыканиях</a>.</p>
+
+<pre class="brush: js">function magic(x) {
+ return function calc(x) { return x * 42 };
+}
+
+var answer = magic();
+answer(1337); // 56154
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.9', 'Return statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-return-statement', 'Return statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-return-statement', 'Return statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на данной странице сгенерирована из структурированных данных. Если вы хотите внести свой вклад в данные, пожалуйста, получите их из репозитория <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам запрос на включение ваших изменений.</div>
+
+<p>{{Compat("javascript.statements.return")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Functions" title="En/Core_JavaScript_1.5_Reference/Functions">Функции</a></li>
+ <li><a href="/ru/docs/Web/JavaScript/Closures">Замыкания</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/switch/index.html b/files/ru/web/javascript/reference/statements/switch/index.html
new file mode 100644
index 0000000000..5d0ead0986
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/switch/index.html
@@ -0,0 +1,184 @@
+---
+title: switch
+slug: Web/JavaScript/Reference/Statements/switch
+tags:
+ - JavaScript
+ - Statement
+translation_of: Web/JavaScript/Reference/Statements/switch
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Сводка">Сводка</h2>
+
+<p><strong>Инструкция switch</strong> сравнивает выражение со случаями, перечисленными <font face="Courier New, Andale Mono, monospace">внутри неё</font>, а затем выполняет соответствующие инструкции.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">switch (expression) {
+ case value1:
+ //Здесь выполняются инструкции, если результат выражения равен value1
+ [break;]
+ case value2:
+ //Инструкции, соответствующие value2
+ [break;]
+ ...
+ case valueN:
+ //Инструкции, соответствующие значению valueN
+ //statementsN
+ [break;]
+ default:
+ //Здесь находятся инструкции, которые выполняются при отсутствии соответствующего значения
+ //statements_def
+ [break;]
+}</pre>
+
+<dl>
+ <dt><code>expression</code></dt>
+ <dd>Выражение, значение которого сравнивается со всеми случаями.</dd>
+ <dt><code>case valueN</code></dt>
+ <dd>Случай, который проверяется на соответствие выражению (<code>expression</code>).</dd>
+ <dt><code>statementsN</code></dt>
+ <dd>Инструкции, которые выполняются, если <code>expression</code> соответствуют случаю.</dd>
+ <dt><code>statements_def</code></dt>
+ <dd>Инструкции, выполняемые если <code>expression</code> не соответствует ни одному случаю.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Если выражение соответствует какому-то случаю, то выполняются инструкции этого случая. Если несколько случаев соответствуют значению, только первый случай будет использован.</p>
+
+<p>Сначала программа пытается найти подходящий случай, значение которого равно значению искомого выражения (используется <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">строгое сравнение</a>, <code>===)</code> и затем выполняет инструкции, соответствующие случаю. Если подходящего случая нет, ищется случай по умолчанию (<code>default</code>), который не является обязательным. Если случая по умолчанию нет, выполнение продолжается на инструкции, следующей сразу после <code>switch</code>. По соглашению, случай <code>default</code> описывается последним, но это не является строгим правилом.</p>
+
+<p>Опциональная инструкция <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/break" title="JavaScript/Reference/Statements/break">break</a></code> выполняет выход из блока <code>switch</code>. Она может располагаться в каждом из случаев, но не является обязательной. Если её нет, то выполняется следующая инструкция из блока <code>switch</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example_Using_switch" name="Example:_Using_switch">Пример: Использование <code>switch</code></h3>
+
+<p>В этом примере, если <code>expr</code> равно "Bananas", программа находит случай "Bananas" и выполняет соответствующие инструкции. При выполнении инструкции <code>break</code>, выполнение продолжится за пределами <code>switch</code>. Если бы <code>break</code> не было, то выполнились бы инструкции случая "Cherries".</p>
+
+<pre class="brush: js">switch (expr) {
+ case "Oranges":
+ console.log("Oranges are $0.59 a pound.");
+ break;
+ case "Apples":
+ console.log("Apples are $0.32 a pound.");
+ break;
+ case "Bananas":
+ console.log("Bananas are $0.48 a pound.");
+ break;
+ case "Cherries":
+ console.log("Cherries are $3.00 a pound.");
+ break;
+ case "Mangoes":
+ case "Papayas":
+ console.log("Mangoes and papayas are $2.79 a pound.");
+ break;
+ default:
+ console.log("Sorry, we are out of " + expr + ".");
+}
+
+console.log("Is there anything else you'd like?");
+</pre>
+
+<h3 id="What_happens_if_I_forgot_a_break" name="What_happens_if_I_forgot_a_break">Пример: Что случится, если не использовать break?</h3>
+
+<p>Если вы не использовали инструкцию <code>break</code>, то будут выполнены инструкции следующего случая. И проверка на соответствие выражению не будет выполняться.</p>
+
+<pre class="brush: js">var foo = 0;
+switch (foo) {
+ case -1:
+ console.log('negative 1');
+ break;
+ case 0: // foo равно 0, случай соответствует выражению и эти инструкции будут выполнены
+ console.log(0)
+ // ПРИМЕЧАНИЕ: здесь могла находиться забытая инструкция break
+ case 1: // В случае 'case 0:' не было break, инструкции данного случая также будут выполнены
+ console.log(1);
+ break; // В конце расположен break, поэтому выполнение не перейдёт к случаю 'case 2:'
+ case 2:
+ console.log(2);
+ break;
+ default:
+ console.log('default');
+}</pre>
+
+<h3 id="Methods_for_Multi-criteria_Case" name="Methods_for_Multi-criteria_Case">Пример: Использование нескольких значений для одного случая</h3>
+
+<p>Если вы хотите использовать один набор инструкций для соответствия нескольким случаям, можно использовать два способа. Первый способ является рекомендуемым, а второй - скорее трюком. Оба способа вызовут предупреждение с текстом "yes", если значение <code>foo</code> равно 0, 1, 2 или 3.</p>
+
+<p>Исходники этих способов здесь:</p>
+
+<ol>
+ <li><a href="http://stackoverflow.com/questions/13207927/switch-statement-multiple-cases-in-javascript">Switch statement multiple cases in JavaScript (Stack Overflow)</a></li>
+ <li><a href="http://stackoverflow.com/questions/21808543/multple-cripteria-single-case-switch-statement">Multiple Criteria Single Case Switch Statement (Stack Overflow)</a></li>
+</ol>
+
+<h4 id="Первый_способ">Первый способ</h4>
+
+<p>В первом способе используется то, что выполнение инструкции <code>switch</code> продолжится, если не использовать инструкцию <code>break</code>. Подробнее в примере "Что случится, если не использовать break?"</p>
+
+<pre class="brush: js">var foo = 1;
+switch (foo) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ alert('yes');
+ break;
+ default:
+ alert('not');
+}</pre>
+
+<h4 id="Второй_способ">Второй способ</h4>
+
+<p>Другой способ, менее стандартный; во второй строке, где вы ожидали увидеть <code>switch(foo)</code>, расположено постоянное значение <code>true</code>, и в случаях используются выражения вместо констант:</p>
+
+<pre class="brush: js">var foo = 1;
+switch (true) { // Постоянное значение true вместо foo
+ case foo &gt;= 0 &amp;&amp; foo &lt;= 3:
+ alert('yes');
+ break;
+ default:
+ alert('not');
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарии</th>
+ </tr>
+ <tr>
+ <td>ECMAScript 3-е Издание.</td>
+ <td>Стандарт</td>
+ <td>Изначальное определение.<br>
+ Реализован в JavaScript 1.2</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.11', 'Инструкция switch')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-switch-statement', 'Инструкция switch')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<p>{{Compat("javascript.statements.switch")}}</p>
+
+<h2 id="See_also" name="See_also">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/if...else" lang="ru"><code>if...else</code></a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/throw/index.html b/files/ru/web/javascript/reference/statements/throw/index.html
new file mode 100644
index 0000000000..7417c2f055
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/throw/index.html
@@ -0,0 +1,240 @@
+---
+title: throw
+slug: Web/JavaScript/Reference/Statements/throw
+tags:
+ - JavaScript
+ - Statement
+translation_of: Web/JavaScript/Reference/Statements/throw
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<h2 id="Основная_информация"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Основная информация</span></span></h2>
+
+<p><strong>Инструкция <code>throw</code></strong> позволяет генерировать исключения, определяемые пользователем. При этом выполнение текущей функции будет остановлено (инструкции после <code>throw</code> не будут выполнены), и управление будет передано в первый блок <a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>catch</code></a> в стеке вызовов. Если <code>catch</code> блоков среди вызванных функций нет, выполнение программы будет остановлено.</p>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">throw <em>выражение</em>; </pre>
+
+<dl>
+ <dt><code>выражение</code></dt>
+ <dd>Определяемое пользователем исключение.</dd>
+</dl>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Используйте инструкцию throw для генерирования исключения. Когда вы генерируете исключение (throw), <em>выражение</em> задает значение исключения. Каждое из следующих throw создает исключение:</p>
+
+<pre class="brush: js">throw "Error2"; // генерирует исключение, значением которого является строка
+throw 42; // генерирует исключение, значением которого является число 42
+throw true; // генерирует исключение, значением которого является логическое значение true</pre>
+
+<p>Также стоит отметить, что на инструкцию <code>throw</code> влияет <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">автоматическая вставка точки с запятой (ASI)</a>. Поэтому не допускаются разрывы строк между инструкцией <code>throw</code> и <code>выражением</code>.</p>
+
+<h2 id="Examples" name="Examples">Примеры</h2>
+
+<h3 id="Example:_Throw_an_object" name="Example:_Throw_an_object">Пример: Генерирование объекта в качестве исключения</h3>
+
+<p>Можно указать объект в качестве исключения. Затем можно получить ссылку на этот объект и доступ ко всем его свойствам в блоке catch. Следующий пример создает объект ошибки, который имеет тип UserException, и используется для генерации исключения.</p>
+
+<pre class="brush: js">function UserException(message) {
+ this.message = message;
+ this.name = "Исключение, определенное пользователем";
+}
+function getMonthName(mo) {
+ mo = mo-1; // Нужно скорректировать номер месяца согласно индексам массива (1=Jan, 12=Dec)
+ var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul",
+ "Aug", "Sep", "Oct", "Nov", "Dec"];
+ if (months[mo] !== undefined) {
+ return months[mo];
+ } else {
+ throw new UserException("Неверно указан номер месяца");
+ }
+}
+
+try {
+ // statements to try
+ var myMonth = 15; // 15 находится вне границ массива, что приведет к исключению
+ var monthName = getMonthName(myMonth);
+} catch (e) {
+ monthName = "неизвестен";
+ logMyErrors(e.message, e.name); // передаем исключение в обработчик ошибок
+}
+</pre>
+
+<h3 id="Example:_Another_example_of_throwing_an_object" name="Example:_Another_example_of_throwing_an_object">Пример: Другой пример генерации объекта в виде исключения</h3>
+
+<p>Следующий пример проверяет, является ли строка, переданная в функцию, почтовым индексом США. Если индекс имеет недопустимый формат, будет сгенерировано исключение посредством создания объекта, имеющего тип <code>ZipCodeFormatException</code>.</p>
+
+<pre class="brush: js">/*
+ * Создает объект ZipCode.
+ *
+ * Допустимые форматы почтового индекса:
+ * 12345
+ * 12345-6789
+ * 123456789
+ * 12345 6789
+ *
+ * Если агрумент, переданный в констуктор ZipCode не совпадает
+ * ни с одним из этих форматов, будет брошено исключение.
+ */
+
+function ZipCode(zip) {
+ zip = new String(zip);
+ var pattern = /[0-9]{5}([- ]?[0-9]{4})?/;
+ if (pattern.test(zip)) {
+ // значение почтового индекса должно быть первым совпадением в строке
+ this.value = zip.match(pattern)[0];
+ this.valueOf = function() {
+ return this.value
+ };
+ this.toString = function() {
+ return String(this.value)
+ };
+ } else {
+ throw new ZipCodeFormatException(zip);
+ }
+}
+
+function ZipCodeFormatException(value) {
+ this.value = value;
+ this.message = "Почтовый индекс имеет недопустимый формат";
+ this.toString = function() {
+ return this.value + this.message
+ };
+}
+
+/*
+ * Это может быть скрипт, который проверяет значение адреса
+ * для США.
+ */
+
+var ZIPCODE_INVALID = -1;
+var ZIPCODE_UNKNOWN_ERROR = -2;
+
+function verifyZipCode(z) {
+ try {
+ z = new ZipCode(z);
+ } catch (e) {
+ if (e instanceof ZipCodeFormatException) {
+ return ZIPCODE_INVALID;
+ } else {
+ return ZIPCODE_UNKNOWN_ERROR;
+ }
+ }
+ return z;
+}
+
+a = verifyZipCode(95060); // вернет 95060
+b = verifyZipCode(9560); // вернет -1
+c = verifyZipCode("a"); // вернет -1
+d = verifyZipCode("95060"); // вернет 95060
+e = verifyZipCode("95060 1234"); // вернет 95060 1234
+</pre>
+
+<h3 id="Example:_Rethrow_an_exception" name="Example:_Rethrow_an_exception">Пример: Повторный выброс исключения</h3>
+
+<p>Можно использовать throw для повторного выброса исключения после того, как оно было поймано. В следующем примере ловится исключение с числовым значением и делается повторный выброс, если его значение больше 50.  Повторно выброшенное исключение передается далее в вызывающую функцию или до верхнего уровня, который видит пользователь.</p>
+
+<pre class="brush: js">try {
+ throw n; // бросаем исключение с числовым значением
+} catch (e) {
+ if (e &lt;= 50) {
+ // инструкции для обработки исключений со значениями в диапазоне 1-50
+ } else {
+ // необработанное исключение, делаем повторный выброс
+ throw e;
+ }
+}
+</pre>
+
+<h2 id="Спецификации"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Спецификации</span></span></h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Initial definition.<br>
+ Implemented in JavaScript 1.4</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.13', 'throw statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-throw-statement', 'throw statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-throw-statement', 'throw statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Поддерживаемые_браузеры"><span class="short_text" id="result_box" lang="ru"><span class="alt-edited hps">Поддерживаемые браузеры</span></span></h2>
+
+<p>{{ CompatibilityTable() }}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ <td>{{ CompatVersionUnknown() }}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also" name="See_also"><span class="short_text" id="result_box" lang="ru"><span class="hps">Смотрите также</span></span></h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch"><code>try...catch</code></a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/try...catch/index.html b/files/ru/web/javascript/reference/statements/try...catch/index.html
new file mode 100644
index 0000000000..3609136b03
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/try...catch/index.html
@@ -0,0 +1,422 @@
+---
+title: try...catch
+slug: Web/JavaScript/Reference/Statements/try...catch
+tags:
+ - JavaScript
+ - Исключение
+ - Ошибка
+translation_of: Web/JavaScript/Reference/Statements/try...catch
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Конструкция <code>try...catch</code> пытается выполнить инструкции в блоке <code>try</code>, и, в случае ошибки, выполняет блок <code>catch</code>.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">try {
+ <em>try_statements</em>
+}
+[catch (<em>exception_var_1</em> if <em>condition_1</em>) { // не стандартно
+ <em>catch_statements_1</em>
+}]
+...
+[catch (<em>exception_var_2</em>) {
+ <em>catch_statements_2</em>
+}]
+[finally {
+ <em>finally_statements</em>
+}]
+</pre>
+
+<dl>
+ <dt><code>try_statements</code></dt>
+ <dd>Инструкции для выполнения.</dd>
+</dl>
+
+<dl>
+ <dt><code>catch_statements_1</code>, <code>catch_statements_2</code></dt>
+ <dd>
+ <p>Инструкции, которые будут выполнены, если произойдёт ошибка в блоке <code><font face="Consolas, Liberation Mono, Courier, monospace">try</font></code>.</p>
+ </dd>
+</dl>
+
+<dl>
+ <dt><code>exception_var_1</code>, <code>exception_var_2</code></dt>
+ <dd>Идентификатор для хранения объекта ошибки, который впоследствии используется в блоке <code>catch</code></dd>
+</dl>
+
+<dl>
+ <dt><code>condition_1</code></dt>
+ <dd>Условное выражение.</dd>
+</dl>
+
+<dl>
+ <dt><code>finally_statements</code></dt>
+ <dd>Инструкции, которые выполняются после завершения блока <code>try</code>. Выполнение происходит в независимости от того, произошла ошибка или нет.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Конструкция <code>try</code> содержит блок <code>try</code>, в котором находится одна или несколько инструкций (Блок (<code>{}</code> ) обязательно должен присутствовать, даже если выполняется всего одна инуструкция), и хотя бы один блок <code>catch</code> или <code>finally</code>. Таким образом, есть три основные формы конструкции <code>try</code>:</p>
+
+<ol>
+ <li><code>try {...} catch {...}</code></li>
+ <li><code>try {...} finally {...}</code></li>
+ <li><code>try {...} catch {...} finally {...}</code></li>
+</ol>
+
+<p>Блок <code>catch</code> содержит инструкции, которые будут выполнены, если в блоке <code>try</code> произошла ошибка. Если любая инструкция в блоке <code>try</code> выбрасывает исключение, то управление сразу же переходит в блок <code>catch</code>. Если в блок <code>try</code> не было выброшено исключение, то блок <code>catch</code> не выполняется.</p>
+
+<p>Блок <code>finally</code> выполнится после выполнения блоков <code>try</code> и <code>catch</code>, но перед инструкциями, следующими за конструкцией <code>try...catch</code>. Он выполняется всегда, в независимости от того, было исключение или нет.</p>
+
+<p>Вы можете использовать вложенные конструкции <code>try</code>. Если внутренняя конструкция <code>try</code> не имеет блока <code>catch</code> (такое может быть при её использовании в виде <code>try {...} finaly {...}</code>, потому что <code>try {...}</code> не может быть без блоков <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">catch</span></font> или <code>finally</code>), будет вызван <code>сatch</code> внешней конструкции <code>try</code>.</p>
+
+<p>Конструкция <code>try</code> также используется для обработки исключений JavaScript (то есть, выброшенных внутренними функциями языка или парсером). Загляните в <a href="/ru-RU/docs/Web/JavaScript/Guide">JavaScript руководство</a> для дополнительной информации о JavaScript исключениях.</p>
+
+<h3 id="Безусловный_блок_catch">Безусловный блок catch</h3>
+
+<p>При использовании блока <code>catch</code>, он вызывается для любого исключения в блоке <code>try</code>. Например, когда в следующем коде происходит ошибка, управление переходит к блоку <code>catch</code>.</p>
+
+<pre class="brush: js">try {
+ throw 'myException'; // создание исключения
+}
+catch (e) {
+ // инструкции для обработки ошибок
+ logMyErrors(e); // передать объект исключения обработчику ошибок
+}
+</pre>
+
+<p>Блок <code>catch</code> задает идентификатор (<code>e</code> в примере выше) который содержит объект исключения (в примере выше — значение, переданное оператору <code>throw</code>). Область видимости этого объекта ограничивается блоком <code>catch</code>.</p>
+
+<h3 id="Условный_блок_catch">Условный блок <code>catch</code></h3>
+
+<p>"Условные блоки <code>catch</code>" можно создавать, используя <code>try...catch</code> с <code>if...else if...else</code>, как здесь:</p>
+
+<pre class="brush: js">try {
+ myroutine(); // может выбрасывать три вида исключений
+} catch (e) {
+ if (e instanceof TypeError) {
+ // обработка исключения TypeError
+ } else if (e instanceof RangeError) {
+ // обработка исключения RangeError
+ } else if (e instanceof EvalError) {
+ // обработка исключения EvalError
+ } else {
+ // обработка остальных исключений
+ logMyErrors(e); // передать обработчику ошибок
+ }
+}</pre>
+
+<p>Частый сценарий использованя — обработать известные исключения, а при неизвестных ошибках, пробросить их дальше:</p>
+
+<pre class="brush: js">try {
+ myRoutine();
+} catch(e) {
+ if (e instanceof RangeError) {
+  // обработка известного исключения, с которым
+  // понятно, что делать
+  } else {
+  throw e; // пробросить неизвестные ошибки
+  }
+}
+</pre>
+
+<div class="blockIndicator note">
+<p><strong>Обратите внимание</strong>: Firefox раньше поддерживал краткую запись условных блоков <code>catch</code>:</p>
+
+<pre>try {
+ myroutine(); // может выбрасывать три вида исключения
+} catch (e if e instanceof TypeError) {
+ // обработка исключений TypeError
+} catch (e if e instanceof RangeError) {
+ // обработка исключений RangeError
+} catch (e if e instanceof EvalError) {
+ // обработка исключений EvalError
+} catch (e) {
+ // обработка остальных исключения
+ logMyErrors(e);
+}
+</pre>
+
+<p>Однако, такой синтаксис никогда не был частью спецификации ECMAScript и был удалён из Firefox после версии 59. Сейчас он не поддерживается ни в одном браузере.</p>
+</div>
+
+<h3 id="Идентификатор_исключения">Идентификатор исключения</h3>
+
+<p>Когда в блоке <code>try</code> выбрасывается исключение, <code>exception_var</code> (т. е. <code>e</code> в конструкции <code>catch (e)</code>) содержит значение исключения. Его можно использовать, чтобы получить больше информации об выброшенном исключении. Идентификатор доступен только в <a href="https://wiki.developer.mozilla.org/docs/Glossary/Scope">области видимости</a> блока <code>catch</code>.</p>
+
+<pre class="brush: js">try {
+ if (!firstValidation()) {
+ throw 1;
+ }
+ if (!secondValidation()) {
+ throw 2;
+ }
+} catch (e) {
+  // Выводит 1 или 2 (если не произошло никакх других ошибок)
+  console.log(e);
+}</pre>
+
+<h3 id="Блок_finally">Блок finally</h3>
+
+<p>Блок <code>finally</code> содержит код который будет запущен после кода в блоках <code>try</code> и <code>catch</code>. Обратите внимание, что код в блоке <code>finally</code> запускается в независимости от того, было ли выброшено исключение или нет. Также код в блоке <code>finally</code> будет запущен вне зависимости от того, присутствует блок <code>catch</code> или нет. Блок <code>finally</code> можно использовать для того, чтобы скрипт безопасно завершил работу в случае ошибки. Например, если необходимо освободить память и ресурсы которые использовал скрипт.</p>
+
+<p>Наличие специального блока, связанного с ошибкой, который выполняется вне зависимости от наличия исключительной ситуации, может показаться странным, но эта конструкция на самом деле весьма полезна. Рассмотрим пример кода:</p>
+
+<pre class="brush: js">function expensiveCalculations() {
+ // Сложные вычисления
+}
+
+function maybeThrowError() {
+ // Функция, которая может выбросить исключение
+ if(Math.random() &gt; 0.5) throw new Error()
+}
+
+try {
+ // Теперь при прокрутке страницы будут происходить
+ // сложные вычисления, что сильно скажется на
+ // производительности
+ window.addEventListener('scroll', expensiveCalculations)
+ maybeThrowError()
+} catch {
+  // Если функция maybeThrowError выбросит исключения,
+  // управление сразу перейдёт в блок catch и
+ // сложные вычисления продолжат выполняться до
+  // перезагрузки страницы
+  maybeThrowError()
+}
+window.removeEventListener('scroll', expensiveCalculations)</pre>
+
+<p>В этом примере, если функция <code>maybeThrowError</code> выбросит исключение внутри блока <code>try</code>, управление перейдёт в блок <code>catch</code>. Если и в блоке <code>catch</code> эта функция тоже выбросит исключение, то выполнение кода прервётся, и обработчик события не будет снят, пока пользователь не перезагрузит страницу, что плохо скажется на скорости работы. Для того, чтобы избежать таких ситуаций, следует использовать блок <code>finally</code>:</p>
+
+<pre class="brush: js">try {
+  window.addEventListener('scroll', expensiveCalculations)
+ maybeThrowError()
+} catch {
+  maybeThrowError()
+} finally {
+  window.removeEventListener('scroll', expensiveCalculations)
+}
+
+</pre>
+
+<p>Другой пример: работа с файлами. В следующем фрагменте кода показывается, как скрипт открывает файл и записывает в него какие-то данные (в серверном окружении JavaScript имеет доступ к файловой системе). Во время записи может произойти ошибка. Но после открытия файл очень важно закрыть, потому что незакрытый файл может привести к утечкам памяти. В таких случях используется блок <code>finally</code>:</p>
+
+<pre class="brush: js">openMyFile();
+try {
+ // Сделать что-то с файлом
+ writeMyFile(theData);
+}
+finally {
+ closeMyFile(); // Закрыть файл, что бы ни произошло
+}
+</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Вложенные_блоки_try">Вложенные блоки try</h3>
+
+<p>Для начала давайте посмотрим что делает этот код:</p>
+
+<pre class="brush: js">try {
+ try {
+ throw new Error('упс');
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (e) {
+ console.error('внешний блок catch', e.message);
+}
+
+// Вывод:
+// "finally"
+// "внешний блок catch" "упс"
+</pre>
+
+<p>Теперь отловим исключение во внутреннем блоке <code>try</code>, добавив к нему блок <code>catch</code>:</p>
+
+<pre class="brush: js">try {
+ try {
+ throw new Error('упс');
+ }
+ catch (e) {
+ console.error('внутренний блок catch', e.message);
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (e) {
+ console.error('внешний блок catch', e.message);
+}
+
+// Output:
+// "внутренний блок catch" "упс"
+// "finally"
+</pre>
+
+<p>Наконец, пробросим ошибку</p>
+
+<pre class="brush: js">try {
+ try {
+ throw new Error('упс');
+ }
+ catch (e) {
+ console.error('внутренний блок catch', e.message);
+ throw e;
+ }
+ finally {
+ console.log('finally');
+ }
+}
+catch (e) {
+ console.error('внешний блок catch', e.message);
+}
+
+// Вывод:
+// "внутренний блок catch" "oops"
+// "finally"
+// "внешний блок catch" "oops"
+</pre>
+
+<p>Любое исключение будет передано только в ближайший блок <code>catch</code>, если он не пробросит его дальше. Все исключения, выброшенными внутренними блоками (потому что код в блоке <code>catch</code> также может выбросить исключение), будут пойманы внешними.</p>
+
+<h3 id="Возвращение_значения_из_блока_finally">Возвращение значения из блока finally</h3>
+
+<p>Если блок <code>finally</code> возвращает какое-либо значение, оно становится значением, которое возвращает вся конструкция <code>try...catch...finally</code>, вне зависимости от любых инструкций <code>return</code> в блоках <code>try</code> и <code>catch</code>. Также игнорируются исключения, выброшенные блоком <code>catch</code>.</p>
+
+<pre class="brush: js">try {
+ try {
+ throw new Error('упс');
+ }
+ catch (e) {
+ console.error('внутренний блок catch', e.message);
+ throw e;
+ }
+ finally {
+ console.log('finally');
+ return;
+ }
+}
+catch (e) {
+ console.error('внешний блок catch', e.message);
+}
+
+// Output:
+// "внутренний блок catch" "упс"
+// "finally"
+</pre>
+
+<p>"упс" не доходит до внешнего блока из-за инструкции <code>return</code> в блоке <code>finally</code>. То же самое произойдёт с любым значением, возвращаемым из блока <code>catch</code>.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Состояние</th>
+ <th scope="col">Примечание</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Изначальная редакция. Реализовано в JavaScript 1.4</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.14', 'try statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-try-statement', 'try statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-try-statement', 'try statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Not part of the current ECMA-262 standard: Multiple catch clauses and conditional clauses (SpiderMonkey extension, JavaScript 1.5).</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость">Совместимость</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("6")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Conditional clauses<br>
+ (non-standard)</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Conditional clauses<br>
+ (non-standard)</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("Statements/throw", "throw")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/var/index.html b/files/ru/web/javascript/reference/statements/var/index.html
new file mode 100644
index 0000000000..fa1df166fc
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/var/index.html
@@ -0,0 +1,221 @@
+---
+title: var
+slug: Web/JavaScript/Reference/Statements/var
+translation_of: Web/JavaScript/Reference/Statements/var
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Оператор <strong>var </strong>объявляет переменную, инициализируя ее, при необходимости.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/statement-var.html")}}</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">var <em>varname1 [</em>= <em>value1 [</em>, <em>varname2 [</em>, <em>varname3 ... [</em>, <em>varnameN]]]]</em>;</pre>
+
+<dl>
+ <dt><code>varnameN</code></dt>
+ <dd>Имя переменной. Может использоваться любой допустимый идентификатор.</dd>
+</dl>
+
+<dl>
+ <dt><code>valueN</code></dt>
+ <dd>Значение переменной. Любое допустимое выражение. По-умолчанию значение <em>undefined.</em></dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Объявление переменной всегда обрабатывается до выполнения кода, где бы она ни находилась. Область видимости переменной, объявленной через <code>var</code>, это её текущий <em>контекст выполнения</em>.<em> </em>Который может ограничиваться функцией или быть глобальным, для переменных, объявленных за пределами функции.</p>
+
+<p>Присвоение значения необъявленной переменной подразумевает, что она будет создана как глобальная переменная (переменная становится свойством глобального объекта) после выполнения присваивания значения. Различия между объявленной и необъявленной переменными следующие:</p>
+
+<p>1. Объявленные переменные ограничены контекстом выполнения, в котором они были объявлены. Необъявленные переменные всегда глобальны.</p>
+
+<pre class="brush: js">function x() {
+ y = 1; // возбудит ReferenceError в "строгом режиме"
+ var z = 2;
+}
+
+x();
+
+console.log(y); // выведет "1"
+console.log(z); // возбудит ReferenceError: z не определён вне x
+</pre>
+
+<p>2. Объявленные переменные инициализируются до выполнения любого кода. Необъявленные переменные не существуют до тех пор, пока к ним не выполнено присваивание.</p>
+
+<pre class="brush: js">console.log(a); // Возбудит ReferenceError.
+console.log('still going...'); // Не выполнится.</pre>
+
+<pre class="brush: js">var a;
+console.log(a); // Выведет "undefined" или "", в зависимости от браузера.
+console.log('still going...'); // Выведет "still going...".</pre>
+
+<p>3. Объявленные переменные, независимо от контекста выполнения, являются ненастраиваемыми свойствами. Необъявленные переменные это настраиваемые свойства (т.е. их можно удалять).</p>
+
+<pre class="brush: js">var a = 1;
+b = 2;
+
+delete this.a; // Возбудит TypeError в "строгом режиме". В "нестрогом режиме" будет ошибка без уведомления.
+delete this.b;
+
+console.log(a, b); // Возбудит ReferenceError.
+// Свойство 'b' было удалено и больше не существует.</pre>
+
+<p>Из-за перечисленных различий, использование необъявленных переменных может привести к непредсказуемым последствиям. <strong>Рекомендовано всегда объявлять переменные, вне зависимости, находятся они внутри функции или в глобальном контексте.</strong> Присваивание значения необъявленной переменной в <a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode">строгом режиме</a> ECMAScript 5 возбуждает ошибку.</p>
+
+<h3 id="Поднятие_переменных">Поднятие переменных</h3>
+
+<p>Объявление переменных (как и любые другие объявления) обрабатываются до выполнения кода. Где бы не находилось объявление, это равнозначно тому, что переменную объявили в самом начале кода. Это значит, что переменная становится доступной до того, как она объявлена. Такое поведение называется "поднятием" (в некоторых источниках "всплытием").</p>
+
+<pre class="brush: js">bla = 2
+var bla;
+// ...
+
+// читается как:
+
+var bla;
+bla = 2;
+</pre>
+
+<p>Поэтому объявление переменных рекомендовано выносить в начало их области видимости (в начало глобального кода или в начало функции). Это даёт понять какие переменные принадлежат функции (т.е. являются локальными), а какие обрабатываются в цепи областей видимости (т.е. являются глобальными).</p>
+
+<p>Важно отметить, что подъем будет влиять на объявление переменной, но не на инициализацию ее значения. Значение присваивается при выполнении оператора присваивания:</p>
+
+<pre class="brush: js">function do_something() {
+ console.log(bar); // выведет undefined
+ var bar = 111;
+ console.log(bar); // выведет 111
+}
+
+// ...неявно понимается как:
+
+function do_something() {
+ var bar;
+ console.log(bar); // выведет undefined
+ bar = 111;
+ console.log(bar); // выведет 111
+}</pre>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Объявление_и_инициализация_двух_переменных">Объявление и инициализация двух переменных</h3>
+
+<pre class="brush: js">var a = 0, b = 0;
+</pre>
+
+<h3 id="Присвоение_двум_переменным_одного_строкового_значения">Присвоение двум переменным одного строкового значения</h3>
+
+<pre class="brush: js">var a = "A";
+var b = a;
+
+// Равнозначно:
+
+var a, b = a = "A";
+</pre>
+
+<p>Следите за порядком присвоения значений переменным</p>
+
+<pre class="brush: js">var x = y, y = 'A';
+console.log(x + y); // undefinedA
+</pre>
+
+<p>В примере, <code>x</code> и <code>y</code> объявлены до выполнение кода, присвоение выполняется позже. Когда происходит присваивание "<code>x = y</code>", <code>y</code> уже существует со значением '<code>undefined</code>', так что ошибка <code>ReferenceError</code> не генерируется. И переменной <code>x</code> присваивается неопределённое значение. Потом переменной <code>y</code> присваивается значение 'A'. Получается, что после выполнения первой строки кода <code>x === undefined &amp;&amp; y === 'A'</code>, отсюда и результат.</p>
+
+<h3 id="Инициализация_нескольких_переменных">Инициализация нескольких переменных</h3>
+
+<pre class="brush: js">var x = 0;
+
+function f(){
+ var x = y = 1; // x - объявляется локально. y - глобально!
+}
+f();
+
+console.log(x, y); // 0, 1
+// значение x взято из глобальной переменной, как и ожидалось
+// значение переменной y доступно глобально</pre>
+
+<p>Такой же пример, но в строгом режими:</p>
+
+<pre class="brush: js">'use strict';
+
+var x = 0;
+function f() {
+ var x = y = 1; // Throws a ReferenceError in strict mode.
+}
+f();
+
+console.log(x, y);</pre>
+
+<h3 id="Неявные_глобальные_переменные_и_внешняя_область_видимости">Неявные глобальные переменные и внешняя область видимости</h3>
+
+<p>Переменные могут ссылаться на переменные внешней области видимости функции, и это может выглядеть неявно:</p>
+
+<pre class="brush: js">var x = 0; // x объявлена глобально, затем присваивается значение 0
+
+console.log(typeof z); // undefined, пока еще z не существет
+
+function a() { // когда функция a вызванна,
+ var y = 2; // y объявляется локально в функции a, затем присваивается 2
+
+ console.log(x, y); // 0 2
+
+ function b() { // когда функция b вызванна
+ x = 3; // присваивается 3 существующей глобальной x
+ y = 4; // присваивается 4 существующей внешней y
+ z = 5; // создается новая глобальная переменная z и присваивается значение 5.
+ } // (Порождает ReferenceError в strict mode(<em>строгом</em> режиме).)
+
+ b(); // вызов b создает z как глобальную переменную
+ console.log(x, y, z); // 3 4 5
+}
+
+a(); // вызов a также вызывает b
+console.log(x, z); // 3 5
+console.log(typeof y); // undefined, так как y это локальная переменная для функции a</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Начальное определение. Имплементировано в JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.2', 'var statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-variable-statement', 'variable statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-variable-statement', 'variable statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+
+
+<div id="compat-mobile">{{Compat("javascript.statements.var")}}</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/let", "let")}}</li>
+ <li>{{jsxref("Statements/const", "const")}}</li>
+ <li><a class="external" href="http://blog.safeshepherd.com/23/how-one-missing-var-ruined-our-launch/">How One Missing `var` Ruined our Launch</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/while/index.html b/files/ru/web/javascript/reference/statements/while/index.html
new file mode 100644
index 0000000000..1baf54a1f4
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/while/index.html
@@ -0,0 +1,143 @@
+---
+title: while
+slug: Web/JavaScript/Reference/Statements/while
+tags:
+ - JavaScript
+ - Оператор
+ - Цикл
+translation_of: Web/JavaScript/Reference/Statements/while
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Оператор while</strong> создает цикл, выполняющий заданную инструкцию, пока истинно проверяемое условие. Логическое значение условия вычисляется перед исполнением тела цикла.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">while (<em>условие</em>) {
+ <em>инструкция</em>
+}</pre>
+
+<dl>
+ <dt><code>условие</code></dt>
+ <dd>Выражение, логическое значение которого проверяется каждый раз перед заходом в цикл. Если значение истинно, то исполняется <code>инструкция</code>. Когда значение становится ложным, выполняется код, следующий за циклом <code>while</code>.</dd>
+ <dt><code>инструкция</code></dt>
+ <dd>Инструкция, которая исполняется каждый раз, пока истинно условие. Чтобы выполнить несколько инструкций в цикле, используйте <a href="/ru/docs/Web/JavaScript/Reference/Statements/block">блочный</a> оператор (<code>{ ... }</code>) для их группировки.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<p>Следующий цикл <code>while</code> исполняется, пока <code>n</code> не превышает трёх.</p>
+
+<pre class="brush:js">var n = 0;
+var x = 0;
+
+while (n &lt; 3) {
+ n++;
+ x += n;
+}</pre>
+
+<p>На каждой итерации цикла <code>n</code> увеличивается на единицу и прибавляется к <code>x</code>. Таким образом, <code>x</code> и <code>n</code> принимают следующие значения:</p>
+
+<ul>
+ <li>После первого прохода: <code>n</code> = 1 и <code>x</code> = 1</li>
+ <li>после второго прохода: <code>n</code> = 2 и <code>x</code> = 3</li>
+ <li>После третьего прохода: <code>n</code> = 3 и <code>x</code> = 6</li>
+</ul>
+
+<p>После окончания третьей итерации условие<code> n</code> &lt; 3 больше не является истинным, поэтому цикл завершается.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-while-statement', 'while statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-while-statement', 'while statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.6.2', 'while statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.6.2', 'while statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.6.1', 'while statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Изначальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Reference/Statements/do...while"><code>do...while</code></a></li>
+ <li>{{jsxref("Statements/for", "for")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/with/index.html b/files/ru/web/javascript/reference/statements/with/index.html
new file mode 100644
index 0000000000..7eb5d5d66a
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/with/index.html
@@ -0,0 +1,177 @@
+---
+title: with
+slug: Web/JavaScript/Reference/Statements/with
+translation_of: Web/JavaScript/Reference/Statements/with
+---
+<div class="warning">Использование оператора <code>with не рекомендуемо, т.к. он может быть источником запутанных багов и проблем совместимости</code>. Детальная информация в параграфе "Ambiguity Contra" раздела "Description".</div>
+
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>Инструкция <strong>with</strong> расширяет цепочку областей видимости для инструкции.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">with (expression)
+ s<em>tatement</em>
+</pre>
+
+<dl>
+ <dt><code>expression</code></dt>
+ <dd>Добавляет данный exrpession в цепочку областей видимости используемое когда исследуется statement. Рекомендуется использовать круглые скобки вокруг выражения.</dd>
+ <dt><code>statement</code></dt>
+ <dd>Любое выражение. Чтобы использовать несколько выражений, используйте оператор <a href="/en-US/docs/Web/JavaScript/Reference/Statements/block" title="JavaScript/Reference/Statements/block">block</a> statement ({ ... }), чтобы сгруппировать их.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>JavaScript ищет unqualified имя, исследуя  цепочку областей видимости, связанную с выполнением скрипта или функции, сожержащих это unqualified имя. Оператор 'with' добавляет данный объект в начало цепочки областей видимости в ходе исследования тела его оператора. Если unqualified имя используемое в теле соответствует свойству в цепочке областей видимости, тогда имя привязывается к свойству и объекту, содержащему это свойство. В противном случае возвращаетя {{jsxref("ReferenceError")}}.</p>
+
+<div class="note">Использование оператора <code>with не рекомендуется</code>, и недопустимо в строгом режиме (<a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode" title="JavaScript/Strict mode">strict mode</a>)  ECMAScript 5 . Рекомендуемой альтернативой может стать связывание объекта, чьи свойства Вы хотели получить, с коротким именем переменной.</div>
+
+<h3 id="Performance_pro_contra">Performance pro &amp; contra</h3>
+
+<p><strong>Pro:</strong> Оператор <strong>with</strong> может помочь уменьшить размер файла, уменьшив необходимость повторять длинную ссылку на объект без снижения производительности.  Изменение цепочки контекста, необходимое для 'with', не требует больших вычислительных затрат.  Использование 'with' избавит интерпретатор от разбора повторных ссылок на объекты. Однако, обратите внимание, что во многих случаях это преимущество может быть достигнуто с помощью временной переменной для хранения ссылки на нужный объект.</p>
+
+<p><strong>Contra:</strong> Оператор <strong>with</strong> заставляет указанный объект быть найденным сначала среди всех имен поиска.  Поэтому все идентификаторы, которые не относятся к указанному объекту, будут обнаруживаться медленнее в блоке «<strong>with</strong>.  Там, где важна производительность, «with» следует использовать только для охвата блоков кода, которые обращаются к членам указанного объекта.</p>
+
+<h3 id="Ambiguity_contra">Ambiguity contra</h3>
+
+<p><strong>Contra:</strong> The <code>with</code> statement makes it hard for a human reader or JavaScript compiler to decide whether an unqualified name will be found along the scope chain, and if so, in which object. So given this example:</p>
+
+<pre class="brush: js">function f(x, o) {
+ with (o) {
+ console.log(x);
+ }
+}</pre>
+
+<p>Only when <code>f</code> is called is <code>x</code> either found or not, and if found, either in <code>o</code> or (if no such property exists) in <code>f</code>'s activation object, where <code>x</code> names the first formal argument. If you forget to define <code>x</code> in the object you pass as the second argument, or if there's some similar bug or confusion, you won't get an error -- just unexpected results.</p>
+
+<p><strong>Contra: </strong>Code using <code>with</code> may not be forward compatible, especially when used with something other than a plain object. Consider this example:</p>
+
+<div>
+<pre class="brush:js">function f(foo, values) {
+ with (foo) {
+ console.log(values);
+ }
+}
+</pre>
+
+<p>If you call <code>f([1,2,3], obj)</code> in an ECMAScript 5 environment, then the <code>values</code> reference inside the <code>with</code> statement will resolve to <code>obj</code>. However, ECMAScript 6 introduces a <code>values</code> property on <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype">Array.prototype</a></code> (so that it will be available on every array). So, in a JavaScript environment that supports ECMAScript 6, the <code>values</code> reference inside the <code>with</code> statement will resolve to <code>[1,2,3].values</code>.</p>
+</div>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_with">Использование <code>with</code></h3>
+
+<p>Последующее использование <strong><code>with</code></strong> указывает что Объект <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math" title="JavaScript/Reference/Global_Objects/Math"><code>Math</code></a> является объектом по умолчанию. Следующие инструкции  за <strong><code>with</code></strong>  ссылаются на свойства <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/PI" title="JavaScript/Reference/Global_Objects/Math/PI">PI</a><font face="Open Sans, arial, sans-serif"> и методы </font></code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/cos" title="JavaScript/Reference/Global_Objects/Math/cos"><code>cos</code></a> и <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sin" title="JavaScript/Reference/Global_Objects/Math/sin"><code>sin</code></a>, без указания объекта. JavaScript предполагает Объект <code>Math</code> для этих справок.</p>
+
+<pre class="brush:js">var a, x, y;
+var r = 10;
+
+with (Math) {
+ a = PI * r * r;
+ x = r * cos(PI);
+ y = r * sin(PI / 2);
+}</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-with-statement', 'with statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-with-statement', 'with statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.10', 'with statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Now forbidden in strict mode.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.10', 'with statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.10', 'with statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Начальное определение</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_браузеров">Совместимость браузеров</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Основная поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Edge</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Основная поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("Statements/block", "block")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode">Strict mode</a></li>
+ <li>{{jsxref("Symbol.unscopables")}}</li>
+ <li>{{jsxref("Array.@@unscopables", "Array.prototype[@@unscopables]")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/statements/блок/index.html b/files/ru/web/javascript/reference/statements/блок/index.html
new file mode 100644
index 0000000000..4122fea24d
--- /dev/null
+++ b/files/ru/web/javascript/reference/statements/блок/index.html
@@ -0,0 +1,177 @@
+---
+title: Блок
+slug: Web/JavaScript/Reference/Statements/Блок
+tags:
+ - JavaScript
+ - Инструкция
+ - Оператор
+ - справочник
+translation_of: Web/JavaScript/Reference/Statements/block
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p><strong>Блок инструкций </strong>(или <strong>сложная инструкция</strong> в других языках) используется для группировки нуля или более инструкций. Блок отделяется парой фигурных скобок и может опционально быть {{jsxref("Statements/label", "поименован")}}:</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">[имя:] {
+ <em>инструкция_1</em>;
+ <em>инструкция_2;</em>
+ ...
+ <em>инструкция_n;</em>
+}
+</pre>
+
+<dl>
+ <dt><code>инструкция_1</code>, <code>инструкция_2</code>, <code>инструкция_n</code></dt>
+ <dd>Инструкции, сгруппированные внутри блока инструкций.</dd>
+ <dt><font face="Consolas, Liberation Mono, Courier, monospace">имя</font></dt>
+ <dd>Необязательное {{jsxref("Statements/label", "имя")}} для визуальной идентификации или использования как точки выхода для оператора {{jsxref("Statements/break", "break")}}.</dd>
+</dl>
+
+<h2 id="Описание">Описание</h2>
+
+<p>Эта инструкция широко используется с операторами управления потоком (н., {{jsxref("Statements/if...else", "if...else")}}, {{jsxref("Statements/for", "for")}}, {{jsxref("Statements/while", "while")}}). Например:</p>
+
+<pre class="brush: js">while (x &lt; 10) {
+ x++;
+}
+</pre>
+
+<p>Обратите внимание, что блок инструкций не заканчивается точкой с запятой.</p>
+
+<p>Блок инструкций часто называется <strong>сложной (составной) инструкцией</strong> в других языках. Он позволяет вам использовать несколько операторов там, где JavaScript ожидает один оператор. Помещение инструкций в блок - это распространенная практика в JavaScript. Противоположное поведение - использование <a href="/en-US/docs/Web/JavaScript/Reference/Statements/Empty">пустого оператора</a> там, где никаких действий не нужно, а оператор требуется.</p>
+
+<h3 id="Правила_области_видимости_блока">Правила области видимости блока</h3>
+
+<h4 id="С_использованием_var">С использованием <code>var</code></h4>
+
+<p>Переменные, объявленные через <code>var</code>, <strong>не</strong> <strong>имеют</strong> блочной области видимости. Переменные, введенные внутри блока, имеют областью видимости содержащую их функцию или скрипт, и последствия записи в них значения распространяются за границы, собственно, блока, в котором они объявлены. Другими словами, блок инструкций не вводит новую область видимости. Хотя "отдельностоящие" блоки не являются нарушением синтаксиса, не стоит использовать отдельностоящие блоки в JavaScript, потому что они не делают то, чего вы от них ожидаете, если вы ожидаете, что они будут себя вести аналогично блокам в C или Java. Например:</p>
+
+<pre class="brush: js example-bad">var x = 1;
+{
+ var x = 2;
+}
+console.log(x); // выводит 2
+</pre>
+
+<p>Тут выводится 2, потому что оператор <code>var x</code> внутри блока - в той же области видимости, что и оператор <code>var x</code> перед блоком. В C или Java подобный код вывел бы 1.</p>
+
+<h4 id="С_let_и_const">С <code>let</code> и <code>const</code></h4>
+
+<p>Наоборот, идентификаторы, объявленные с помощью {{jsxref("Statements/let", "let")}} и {{jsxref("Statements/const", "const")}} <strong>имеют </strong>блочную область видимости:</p>
+
+<pre class="brush: js">let x = 1;
+{
+  let x = 2;
+}
+console.log(x); // выводит 1</pre>
+
+<p><code>x = 2</code> ограничено рамками области видимости блока, в котором оно было определено.</p>
+
+<p>То же самое и для <code>const</code>:</p>
+
+<pre class="brush: js">const c = 1;
+{
+  const c = 2;
+}
+console.log(c); // выводит 1 и не выбрасывает SyntaxError...</pre>
+
+<p>Обратите внимание, что объявленная внутри блока <code>const c = 2</code> <em>не</em> кидает  <code>SyntaxError: Identifier 'c' has already been declared</code> (<code>идентификатор 'c' уже был объявлен</code>) потому что она может быть объявлена единожды внутри блока.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-block', 'Block statement')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-block', 'Block statement')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12.1', 'Block statement')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12.1', 'Block statement')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12.1', 'Block statement')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Первоначальная редакция. Реализовано в JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="См._так_же">См. так же</h2>
+
+<ul>
+ <li>{{jsxref("Statements/while", "while")}}</li>
+ <li>{{jsxref("Statements/if...else", "if...else")}}</li>
+ <li>{{jsxref("Statements/let", "let")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/strict_mode/index.html b/files/ru/web/javascript/reference/strict_mode/index.html
new file mode 100644
index 0000000000..401d999d59
--- /dev/null
+++ b/files/ru/web/javascript/reference/strict_mode/index.html
@@ -0,0 +1,367 @@
+---
+title: Strict mode
+slug: Web/JavaScript/Reference/Strict_mode
+tags:
+ - ECMAScript 5
+ - JavaScript
+ - Strict Mode
+ - Строгий режим
+translation_of: Web/JavaScript/Reference/Strict_mode
+---
+<div>{{JsSidebar("More")}}</div>
+
+<p>Режим <em>strict</em> (<em>строгий</em> режим), введенный в <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">ECMAScript 5</a>, позволяет использовать более строгий вариант JavaScript. Это не просто подмножество языка: в нем сознательно используется семантика, отличающаяся от обычно принятой. Не поддерживающие строгий режим браузеры будут по-другому выполнять код, написанный для строгого режима, поэтому не полагайтесь на строгий режим без тестирования поддержки используемых особенностей этого режима. Строгий и обычный режим могут сосуществовать одновременно, а скрипт может переключаться в строгий режим по мере надобности.</p>
+
+<p>Строгий режим принёс ряд изменений в обычную семантику JavaScript. Во-первых, строгий режим заменяет исключениями некоторые ошибки, которые интерпретатор JavaScript ранее молча пропускал. Во-вторых, строгий режим исправляет ошибки, которые мешали движкам JavaScript выполнять оптимизацию -- в некоторых случаях код в строгом режиме может быть оптимизирован для более быстрого выполнения, чем код в обычном режиме. В-третьих, строгий режим запрещает использовать некоторые элементы синтаксиса, которые, вероятно, в следующих версиях ECMAScript получат особый смысл.</p>
+
+<p>Если вы хотите изменить свой код так, чтобы он работал в строгой версии JavaScript, посмотрите статью {{ jsxref("Strict_mode/Transitioning_to_strict_mode", "Переход к строгому режиму") }}.</p>
+
+<h2 id="Активизация_строгого_режима">Активизация строгого режима</h2>
+
+<p>Строгий режим применяется ко <em>всему скрипту</em> или к <em>отдельным функциям</em>. Он не может быть применён к блокам операторов, заключенных в фигурные скобки -- попытка использовать его в подобном контексте будет проигнорирована. Код в <code>eval</code>, <code>Function</code>, в аттрибутах обработчиков событий, в строках, переданных в <a href="/en/DOM/window.setTimeout" title="en/DOM/window.setTimeout"><code>setTimeout</code></a>, и т.п. рассматривается как законченный скрипт, и активизация строгого режима в нём выполняется ожидаемым образом.</p>
+
+<h3 id="Строгий_режим_для_скриптов">Строгий режим для скриптов</h3>
+
+<p>Чтобы активизировать строгий режим для всего скрипта, нужно поместить оператор <code>"use strict";</code> или <code>'use strict';</code> перед всеми остальными операторами скрипта (выдержать приведенный синтаксис буквально).</p>
+
+<pre class="brush: js">// Синтаксис переключения в строгий режим всего скрипта
+"use strict";
+var v = "Привет! Я скрипт в строгом режиме!";
+</pre>
+
+<p>В этой синтаксической конструкции кроется ловушка, в которую уже угодили даже <a class="link-https" href="https://bugzilla.mozilla.org/show_bug.cgi?id=579119">самые известные сайты</a>: нельзя бездумно объединять скрипты с разными режимами. Объединение скрипта в строгом режиме со скриптом в обычном выглядит как скрипт в строгом режиме! Справедливо и обратное: объединение обычного скрипта со строгим выглядит как нестрогий скрипт. Объединение только строгих или только обычных скриптов проходит без последствий, проблему вызывает совместное использование скриптов со строгим и обычным режимом. Поэтому рекомендуется включать строгий режим только на уровне функций (хотя бы в течение переходного периода).</p>
+
+<p>Вы также можете использовать подход "обёртывания" всего содержимого скрипта в функцию, для которой включён строгий режим. Это уменьшит возможность возникновения проблем при объединении скриптов, но одновременно потребует явно экспортировать из контекста функции все глобальные переменные.</p>
+
+<h3 id="Строгий_режим_для_функций">Строгий режим для функций</h3>
+
+<p>Аналогично, чтобы включить строгий режим для функции, поместите оператор <code>"use strict";</code> (или <code>'use strict';</code>) в тело функции перед любыми другими операторами.</p>
+
+<pre class="brush: js">function strict() {
+ // Строгий режим на уровне функции
+ "use strict";
+ function nested() { return "И я тоже!"; }
+ return "Привет! Я функция в строгом режиме! " + nested();
+}
+function notStrict() { return "Я не strict."; }
+</pre>
+
+<h3 id="Строгий_режим_для_модулей">Строгий режим для модулей</h3>
+
+<p>ECMAScript 2015 представил <a href="/ru/docs/Web/JavaScript/Reference/Statements/export">модули JavaScript</a> и, следовательно, 3-й способ войти в строгий режим. Все содержимое модулей JavaScript автоматически находится в строгом режиме, и для его запуска не требуется никаких инструкций.</p>
+
+<pre><code>function strict() {
+ // Потому что это модуль, я strict по-умолчанию
+}
+export default strict;</code></pre>
+
+<h2 id="Изменения_в_строгом_режиме">Изменения в строгом режиме</h2>
+
+<p>Строгий режим изменяет синтаксис и поведение среды исполнения. Изменения главным образом попадают в следующие категории: преобразование ошибок в исключения; изменения, упрощающие вычисление переменной в определённых случаях использования её имени; изменения, упрощающие <code>eval</code> и <code>arguments</code>; изменения, упрощающие написание "безопасного" JavaScript, и изменения, предвосхищающие дальнейшее развитие ECMAScript.</p>
+
+<h3 id="Преобразование_ошибок_в_исключения">Преобразование ошибок в исключения</h3>
+
+<p>Строгий режим превращает некоторые прощавшиеся ранее ошибки в исключения. JavaScript был разработан с расчётом на низкий порог вхождения, и временами он придаёт заведомо ошибочным операциям семантику нормального кода. Иногда это помогает срочно решить проблему, а иногда это создаёт худшие проблемы в будущем. Строгий режим расценивает такие ошибки как ошибки времени выполнения, для того чтобы они могли быть обнаружены и исправлены в обязательном порядке.</p>
+
+<p>Во-первых, строгий режим делает невозможным случайное создание глобальных переменных. В обычном JavaScript опечатка в имени переменной во время присваивания приводит к созданию нового свойства глобального объекта, и выполнение продолжается (хотя в современном JavaScript оно, вероятно, аварийно завершится в дальнейшем). Присваивания, которые могут случайно создать глобальную переменную, в строгом режиме выбрасывают исключение:</p>
+
+<pre class="brush: js">"use strict";
+ // Предполагая, что не существует глобальной переменной
+mistypeVaraible = 17; // mistypedVaraible, эта строка выбросит ReferenceError
+ // из-за опечатки в имени переменной</pre>
+
+<p>Во-вторых, строгий режим заставляет присваивания, которые всё равно завершились бы неудачей, выбрасывать исключения. Например, <code>NaN</code> -- глобальная переменная, защищённая от записи. В обычном режиме присваивание <code>NaN</code> значения ничего не делает; разработчик не получает никакого сообщения об ошибке. В строгом режиме присваивание <code>NaN</code> значения выбрасывает исключение. Любое присваивание, которое в обычном режиме завершается неудачей (присваивание значения свойству, защищённому от записи; присваивание значения свойству, доступному только на чтение; присваивание нового свойства <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/preventExtensions">нерасширяемому</a> объекту), в строгом режиме выбросит исключение:</p>
+
+<pre class="brush: js">"use strict";
+
+<code>// Присваивание значения глобальной переменной, защищенной от записи
+var undefined = 5; // выдаст TypeError
+var Infinity = 5; // выдаст TypeError
+</code>
+// Присваивание значения свойству, защищенному от записи
+var obj1 = {};
+Object.defineProperty(obj1, "x", { value: 42, writable: false });
+obj1.x = 9; // выдаст TypeError
+
+// Присваивание значения свойству, доступному только для чтения
+var obj2 = { get x() { return 17; } };
+obj2.x = 5; // выдаст TypeError
+
+// Задание нового свойства нерасширяемому объекту
+var fixed = {};
+Object.preventExtensions(fixed);
+fixed.newProp = "ohai"; // выдаст TypeError
+</pre>
+
+<p>В-третьих, в строгом режиме попытки удалить неудаляемые свойства будут вызывать исключения (в то время как прежде такая попытка просто не имела бы эффекта):</p>
+
+<pre class="brush: js">"use strict";
+delete Object.prototype; // выдаст TypeError
+</pre>
+
+<p>В-четвёртых, строгий режим требует, чтобы все свойства, перечисленные в сериализованном объекте, встречались только один раз. В обычном коде имена свойств могут дублироваться, а значение свойства определяется последним объявлением. Но, в таком случае, дублирование -- просто почва для багов, если код редактируется с тем, чтобы поменять значение свойства как-то по-другому, кроме изменения последнего объявления. Дублирование имён свойств в строгом режиме является синтаксической ошибкой:</p>
+
+<div class="note">
+<p>Это уже не является проблемой в ECMAScript 2015 ({{bug(1041128)}}).</p>
+</div>
+
+<pre class="brush: js">"use strict";
+var o = { p: 1, p: 2 }; // !!! синтаксическая ошибка
+</pre>
+
+<p>В-пятых, строгий режим требует, чтобы имена аргументов в объявлении функций встречались только один раз. В обычном коде последний повторённый аргумент скрывает предыдущие аргументы с таким же именем. Эти предыдущие аргументы всё ещё доступны через <code>arguments[i]</code>, так что они не полностью потеряны. Тем не менее, такое сокрытие несёт в себе мало смысла и, скорее всего, не имеет под собой цели (например, может скрывать опечатку), поэтому в строгом режиме дублирование имён аргументов является синтаксической ошибкой:</p>
+
+<pre class="brush: js">function sum(a, a, c) { // !!! синтаксическая ошибка
+ "use strict";
+ return a + a + c; // ошибка, если код был запущен
+}
+</pre>
+
+<p>В-шестых, строгий режим запрещает синтаксис восьмеричной системы счисления. Восьмеричный синтаксис не является частью ECMAScript, но поддерживается во всех браузерах с помощью дописывания нуля спереди к восьмеричному числу: <code>0644 === 420</code> и <code>"\045" === "%"</code>. В ECMAScript 2015 восьмеричное число поддерживается также с помощью дописывания перед числом "<code>0o</code>". Т.е.</p>
+
+<pre><code>var a = 0o10; // ES2015: Восмеричное</code>
+</pre>
+
+<p>Иногда начинающие разработчики думают, что ведущий ноль не имеет семантического значения, и используют его для выравнивания -- но это меняет значение числа! Восьмеричный синтаксис редко бывает полезен и может быть неправильно использован, поэтому строгий режим считает восьмеричные числа синтаксической ошибкой:</p>
+
+<pre class="brush: js">"use strict";
+var sum = 015 + // !!! синтаксическая ошибка
+ 197 +
+ 142;
+
+<code>var sumWithOctal = 0o10 + 8;
+console.log(sumWithOctal); // 16</code>
+</pre>
+
+<p>В-седьмых, строгий режим в ECMAScript 2015 запрещает установку свойств {{Glossary("primitive")}} значениям. Без строгого режима, установка свойств просто игнорируется (no-op), со строгим режимом, однако, выдает {{jsxref ("TypeError")}}.</p>
+
+<pre><code>(function() {
+'use strict';
+
+false.true = ''; // TypeError
+(14).sailing = 'home'; // TypeError
+'with'.you = 'far away'; // TypeError
+
+})();</code></pre>
+
+<h3 id="Упрощение_работы_с_переменными">Упрощение работы с переменными</h3>
+
+<p>Строгий режим упрощает сопоставление имени переменной с местом ее определения в коде. Многие оптимизации времени компиляции полагаются на возможность считать, что переменная <em>X</em> хранится в <em>этом конкретном </em>месте исходного кода. Иногда, при компиляции JavaScript простое сопоставление имени переменной с местом ее определения в коде не возможно, без выполнения того самого кода. Строгий же режим исключает большинство таких случаев, благодаря чему оптимизации компилятора работают эффективнее.</p>
+
+<p>Во-первых, строгий режим запрещает использование <code>with</code>. Проблема с <code>with</code> в том, что во время выполнения любое имя внутри блока может ссылаться как на свойство обрабатываемого объекта, так и на переменную в окружающем (или даже в глобальном) контексте -- невозможно знать об этом заранее. Строгий режим считает <code>with</code> синтаксической ошибкой, поэтому не остаётся шанса использовать имя переменной внутри <code>with</code> для ссылки на неизвестное место во время выполнения:</p>
+
+<pre class="brush: js">"use strict";
+var x = 17;
+with (obj) { // !!! синтаксическая ошибка
+ // Если код не в строгом режиме, то будет ли <code>x </code>ссылаться на переменную var x, или
+ // на свойство obj.x? Предугадать без запуска кода невозможно,
+ // следовательно такой код не может быть эффективно оптимизирован.
+ x;
+}
+</pre>
+
+<p>Простая альтернатива <code>with</code> уже существует -- присваивание объекта переменной с коротким именем и затем доступ к нужному свойству как свойству этой переменной.</p>
+
+<p>Во-вторых, <a href="http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that-code-only/"><code>eval</code> в строгом режиме не добавляет новых переменных в окружающий контекст</a>. В обычном режиме, при вызове <code>eval("var x;")</code> переменная <code>x</code> добавится в область видимости окружающей функции либо в глобальный контекст. В общем случае, это означает, что в каждой функции, в которой присутствует вызов <code>eval</code>, имена переменных которые не ссылаются на аргумент или локальную переменную, должны сопоставляться с местом их определения в коде только во время выполнения (потому что <code>eval</code> мог ввести новую переменную, которая может перекрыть внешнюю переменную). В строгом режиме <code>eval</code> создаёт переменные только в контексте выполняемого кода, так что <code>eval</code> не может повлиять на то, ссылается ли имя на локальную или на внешнюю переменную:</p>
+
+<pre class="brush: js">var x = 17;
+var evalX = eval("'use strict'; var x = 42; x");
+console.assert(x === 17);
+console.assert(evalX === 42);
+</pre>
+
+<p>Соответственно, если функция <code>eval</code> вызвана непосредственно в форме выражения <code>eval(...)</code>, то внутри кода в строгом режиме, передаваемый в неё код будет выполнен в строгом режиме. Передаваемый код может содержать в себе включение строгого режима, но в этом нет необходимости.</p>
+
+<pre class="brush: js">function strict1(str) {
+ "use strict";
+ return eval(str); // str будет выполнен как код строгого режима
+}
+function strict2(f, str) {
+ "use strict";
+ return f(str); // не eval(...): str выполнится в строгом режиме только в том
+ // случае, если в нем содержится вызов строгого режима
+}
+function nonstrict(str) {
+ return eval(str); // str выполнится в строгом режиме только в том
+ // случае, если в нем содержится вызов строгого режима
+}
+strict1("'Строгий режим!'");
+strict1("'use strict'; 'Строгий режим!'");
+strict2(eval, "'Не строгий режим.'");
+strict2(eval, "'use strict'; 'Строгий режим!'");
+nonstrict("'Не строгий режим.'");
+nonstrict("'use strict'; 'Строгий режим!'");
+</pre>
+
+<p>Таким образом, имена в строгом коде, передаваемом в <code>eval</code><font face="Courier New, Andale Mono, monospace">, </font>ведут себя так же, как имена в нестрогом коде, передаваемом в <code>eval</code> внутри строгого режима.</p>
+
+<p>В-третьих, строгий режим запрещает удаление простых имён. <code>delete name</code> в строгом режиме является синтаксической ошибкой:</p>
+
+<pre class="brush: js"><code>'use strict';
+
+var x;
+delete x; // !!! </code>синтаксическая ошибка<code>
+
+eval('var y; delete y;'); // !!! </code>синтаксическая ошибка</pre>
+
+<h3 id="Упрощение_eval_и_arguments">Упрощение <code>eval</code> и <code>arguments</code></h3>
+
+<p>В строгом режиме снижается количество странностей в поведении <code>arguments</code> и <code>eval</code>, оба из которых примешивают определённое количество магии в обычный код. Так <code>eval</code> добавляет или удаляет переменные и меняет их значения, а переменная <code>arguments</code> может удивить своими проиндексированными свойствами, которые являются ссылками (синонимами) для проименованных аргументов функции. Строгий режим делает большой шаг в прояснении этих двух ключевых слов, но полное их обуздание произойдет лишь в следующей редакции ECMAScript.</p>
+
+<p>Во-первых, ключевые слова <code>eval</code> и <code>arguments</code> не могут быть переопределены или изменены. Все подобные попытки это сделать являются синтаксическими ошибками:</p>
+
+<pre class="brush: js">"use strict";
+eval = 17;
+arguments++;
+++eval;
+var obj = { set p(arguments) { } };
+var eval;
+try { } catch (arguments) { }
+function x(eval) { }
+function arguments() { }
+var y = function eval() { };
+var f = new Function("arguments", "'use strict'; return 17;");
+</pre>
+
+<p>Во-вторых, в строгом режиме поля объекта <code>arguments</code> не связаны с проименованными аргументами функции, а являются их продублированными копиями значений. В обычном коде внутри функции, первым аргументом которой является <code>arg</code>, изменение значения переменной <code>arg</code> также меняет значение и у поля <code>arguments[0]</code>, и наоборот (кроме случаев, когда аргумент в функцию не передан, или <code>arguments[0]</code> удалён). В строгом режиме <code>arguments</code> хранит копии значений аргументов переданных при вызове функции. <code>arguments[i]</code> не отслеживает изменений соответствующего именованного аргумента, и именованный аргумент не отслеживает значение соответствующего arguments[i].</p>
+
+<pre class="brush: js">function f(a) {
+ "use strict";
+ a = 42;
+ return [a, arguments[0]];
+}
+var pair = f(17);
+console.assert(pair[0] === 42);
+console.assert(pair[1] === 17);
+</pre>
+
+<p>В-третьих, свойство <code>arguments.callee</code> больше не поддерживается. В обычном коде свойство <code>arguments.callee</code> ссылается на саму функцию для вызова которой и был создан объект <code>arguments</code>. Малоприменимое свойство, так как функция заранее известна, и к ней можно обратиться и по ее имени непосредственно. Более того, <code>arguments.callee</code> значительно затрудняет такую оптимизацию, как <a href="https://ru.wikipedia.org/wiki/Межпроцедурная_оптимизация#Инлайнинг">инлайнинг</a>, потому как должна быть сохранена возможность обратиться к незаинлайненой функции на случай, если присутствует обращение к arguments.callee. В строгом режиме arguments.callee превращается в неудаляемое свойство, которое выбрасывает предостерегающее исключение при любой попытке обращения к нему:</p>
+
+<pre class="brush: js">"use strict";
+var f = function() { return arguments.callee; };
+f(); // выдаст TypeError
+</pre>
+
+<h3 id="Обезопасенный_JavaScript">"Обезопасенный" JavaScript</h3>
+
+<p>Строгий режим упрощает написание "безопасного" JavaScript кода. Сейчас некоторые веб-сайты предоставляют пользователям возможность писать JavaScript, который будет выполняться на сайте <em>от имени других пользователей. </em>В браузерах, JavaScript может иметь доступ к приватной информации пользователя, поэтому, в целях ограничения доступа к запретной функциональности, такой JavaScript перед выполнением должен быть частично преобразован. Гибкость JavaScript делает это практически невозможным без многочисленных проверок во время исполнения. Функционал, исполняемый языком иногда столь массивен, что выполнение любых дополнительных проверок во время исполнения скрипта приведет к значительной потере производительности. Однако, некоторые особенности строгого режима, плюс обязательное требование того, чтобы JavaScript, загруженный пользователем, имел строгий режим и вызывался определенным способом, существенно снижают потребность в таких проверках.</p>
+
+<p>Во-первых, значение, передаваемое в функцию как <code>this</code>, в строгом режиме не приводится к объекту (не "упаковывается"). В обычной функции <code>this</code> всегда представляет собой объект: либо это непосредственно объект, в случае вызова с <code>this</code>, представляющим объект-значение; либо значение, упакованное в объект, в случае вызова с <code>this</code> типа Boolean, string, или number; либо глобальный объект, если тип <code>this</code> это <code>undefined</code> или <code>null</code>. (Для точного определения конкретного <code>this</code> используйте <code>{{jsxref('Global_Objects/Function/call', 'call')}}</code>, <code>{{jsxref('Global_Objects/Function/apply', 'apply')}}</code>, или <code>{{jsxref('Global_Objects/Function/bind', 'bind')}}</code>.) Автоматическая упаковка не только снижает производительность, но и выставляет на показ глобальный объект, что в браузерах является угрозой безопасности, потому что глобальный объект предоставляет доступ к функциональности, которая должна быть ограничена в среде "безопасного" JavaScript. Таким образом, для функции в строгом режиме точно определённый <code>this</code> не упаковывается в объект, а если не определён точно, <code>this</code> является <code>undefined</code>:</p>
+
+<pre class="brush: js">"use strict";
+function fun() { return this; }
+console.assert(fun() === undefined);
+console.assert(fun.call(2) === 2);
+console.assert(fun.apply(null) === null);
+console.assert(fun.call(undefined) === undefined);
+console.assert(fun.bind(true)() === true);
+</pre>
+
+<p>Во-вторых, в строгом режиме больше не представляется возможным осуществлять "прогонку" стека JavaScript посредством базовых расширений ECMAScript. В обычном коде, использующем эти расширения, когда функция <code>fun</code> находится в процессе своего вызова, <code>fun.caller</code> представляет собой функцию, вызвавшую <code>fun</code>, а <code>fun.arguments</code> это <code>аргументы</code> для данного вызова <code>fun</code>. Оба расширения являются проблемными для "безопасного" JavaScript, так как они позволяют "безопасному" коду получить доступ к "привилегированным" функциям и их (потенциально небезопасным) аргументам. Если <code>fun</code> находится в строгом режиме, то <code>fun.caller</code>, так же как и <code>fun.arguments,</code> представляют собой неудаляемые свойства, которые приведут к вызову исключения при попытке их чтения или записи:</p>
+
+<pre class="brush: js">function restricted() {
+ "use strict";
+
+ restricted.caller; // выдаст TypeError
+ restricted.arguments; // выдаст TypeError
+}
+function privilegedInvoker() {
+ return restricted();
+}
+privilegedInvoker();
+</pre>
+
+<p>В-третьих, в функциях строгого режима свойство <code>arguments</code> больше не предоставляет доступ к переменным, созданным внутри функции. В некоторых предыдущих реализациях ECMAScript <code>arguments.caller</code> представлял собой объект, свойства которого являлись ссылками на переменные, созданные внутри функции при её вызове. Это представляет собой <a class="external" href="http://stuff.mit.edu/iap/2008/facebook/">угрозу безопасности</a>, так как нарушает возможность скрывать приватные данные внутри функций (замыканий). Также это делает невозможными большинство оптимизаций. Исходя из этих причин, ни один из современных браузеров не реализует этого поведения. Но все же, ввиду своей исторической функциональности, <code>arguments.caller</code> для функций в строгом режиме всё ещё является неудаляемым свойством, которое вызывает исключение при попытке его чтения или записи:</p>
+
+<pre class="brush: js">"use strict";
+function fun(a, b) {
+ "use strict";
+
+ var v = 12;
+ return arguments.caller; // выдаст TypeError
+}
+fun(1, 2); // не выводит v (или a, или b)
+</pre>
+
+<h3 id="Подготовка_почвы_для_будущих_версий_ECMAScript">Подготовка почвы для будущих версий ECMAScript</h3>
+
+<p>В будущих версиях ECMAScript с высокой вероятностью появится новый синтаксис, и для упрощения перехода на новые версии, в строгом режиме ECMAScript 5 введено несколько ограничений. Всегда проще вносить изменения в стандарт, если заранее подготовить для них основу в строгом режиме.</p>
+
+<p>Во-первых, в строгом режиме зарезервирован для использования следующий список ключевых слов: <code>implements</code>, <code>interface</code>, <code>let</code>, <code>package</code>, <code>private</code>, <code>protected</code>, <code>public</code>, <code>static</code> и <code>yield</code>. В строгом режиме, следовательно, вы не можете задействовать эти слова для именования или обращения к переменным или аргументам.</p>
+
+<pre class="brush: js">function package(protected) { // !!!
+ "use strict";
+ var implements; // !!!
+
+ interface: // !!!
+ while (true) {
+ break interface; // !!!
+ }
+
+ function private() { } // !!!
+}
+function fun(static) { 'use strict'; } // !!!
+
+</pre>
+
+<p>Два замечания, специфичных для Mozilla: Первое, если ваш код создан на JavaScript 1.7 или выше (например, chrome code, или тег <code>&lt;script type=""&gt;</code> заполнен правильно), и применен строгий режим, то <code>let</code> и <code>yield</code> имеют ту же функциональность, которая у них была изначально, когда они только появились. Однако в веб, в строгом коде загруженном через <code>&lt;script src=""&gt;</code> или <code>&lt;script&gt;...&lt;/script&gt;</code>, нельзя будет использовать <code>let</code>/<code>yield</code> в качестве идентификаторов. Второе, в то время как ES5 зарезервировал слова <code>class</code>, <code>enum</code>, <code>export</code>, <code>extends</code>, <code>import</code> и <code>super</code> для любого режима, в Firefox 5 Mozilla они были зарезервированы намного раньше и лишь для строгого режима.</p>
+
+<p>Во-вторых, <a class="external" href="http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/">в строгом режиме запрещается объявление функций глубже самого верхнего уровня скрипта или функции</a>. В обычном коде в браузерах, объявление функций позволено "везде", <em>что не является частью ES5 (или даже ES3!)</em> Это расширение различных браузеров, не имеющее общего совместимого подхода. Есть надежда, что в последующих редакциях ECMAScript будет определена новая семантика для объявления функций вне верхнего уровня скрипта или функции. <a class="external" href="http://wiki.ecmascript.org/doku.php?id=conventions:no_non_standard_strict_decls">Запрет на объявление таких функций в строгом режиме</a> производит "зачистку" для спецификации в будущем релизе ECMAScript:</p>
+
+<pre class="brush: js">"use strict";
+if (true) {
+ function f() { } // !!! синтаксическая ошибка
+ f();
+}
+for (var i = 0; i &lt; 5; i++) {
+ function f2() { } // !!! синтаксическая ошибка
+ f2();
+}
+function baz() { // верно
+ function eit() { } // тоже верно
+}
+</pre>
+
+<p>Данный запрет не является особенностью строгого режима, потому что такое объявление функций является одним из расширений основного ES5. Но это рекомендация комитета ECMAScript, и браузеры реализуют ее.</p>
+
+<h2 id="Строгий_режим_в_браузерах">Строгий режим в браузерах</h2>
+
+<p>В большинстве браузеров в настоящее время строгий режим реализован. Однако не стоит впадать в слепую зависимость от него, потому что существует множество <a class="external external-icon" href="http://caniuse.com/use-strict" rel="external" title="caniuse.com availability of strict mode">Версий браузеров, поддерживающих строгий режим лишь частично</a> или вовсе не поддерживающих оный (например, Internet Explorer ниже версии 10!). <em>Строгий режим изменяет семантику.</em> Надежда на эти изменения приведет к ошибкам и погрешностям в браузерах, в которых строгий режим не реализован. Проявляйте осторожность при использовании строгого режима, и подкрепляйте надежность строгого режима тестами особенностей, которые проверяют, насколько верно реализованы его фрагменты. Наконец, старайтесь <em>тестировать свой код в браузерах, как поддерживающих, так и не поддерживающих строгий режим</em>. Если вы проводите тестирование только в тех браузерах, которые не поддерживают строгий режим, то вполне вероятно у вас появятся проблемы в браузерах, его поддерживающих, и наоборот.</p>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-10.1.1', 'Strict Mode Code')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Основные определения. См. также: <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-C">Strict mode restriction and exceptions</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-strict-mode-code', 'Strict Mode Code')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td><a href="http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-of-ecmascript">Ограничения и исключения строгого режима (Strict mode restriction and exceptions</a>)</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-strict-mode-code', 'Strict Mode Code')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td><a href="https://tc39.github.io/ecma262/#sec-strict-mode-of-ecmascript">Ограничения и исключения строгого режима (Strict mode restriction and exceptions</a>)</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="См._также">См. также</h2>
+
+<ul>
+ <li><a class="external" href="http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/" title="http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/">Where's Walden? » New ES5 strict mode support: now with poison pills!</a></li>
+ <li><a class="external" href="http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/" title="http://whereswalden.com/2011/01/24/new-es5-strict-mode-requirement-function-statements-not-at-top-level-of-a-program-or-function-are-prohibited/">Where's Walden? » New ES5 strict mode requirement: function statements not at top level of a program or function are prohibited</a></li>
+ <li><a class="external" href="http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that-code-only/" title="http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that-code-only/">Where's Walden? » New ES5 strict mode support: new vars created by strict mode eval code are local to that code only</a></li>
+ <li><a class="external" href="http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/" title="http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/">John Resig - ECMAScript 5 Strict Mode, JSON, and More</a></li>
+ <li><a class="external" href="http://dmitrysoshnikov.com/ecmascript/es5-chapter-2-strict-mode/">ECMA-262-5 in detail. Chapter 2. Strict Mode.</a></li>
+ <li><a class="external" href="http://kangax.github.io/compat-table/strict-mode/">Strict mode compatibility table</a></li>
+</ul>
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
new file mode 100644
index 0000000000..8bbf8096cf
--- /dev/null
+++ b/files/ru/web/javascript/reference/strict_mode/transitioning_to_strict_mode/index.html
@@ -0,0 +1,139 @@
+---
+title: Переход к строгому режиму
+slug: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode
+tags:
+ - Advanced
+ - JavaScript
+translation_of: Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode
+---
+<div>{{jsSidebar("More")}}</div>
+
+<p>В ECMAScript 5 введен {{jsxref('Strict_mode', 'строгий режим')}}, который реализован во всех основных браузерах (включая IE10). В то время как включение интерпретации браузерами кода в строгом режиме делается очень просто (достаточно добавить <code>"use strict";</code> в верхней части вашего исходного кода), для адаптации уже существующего кода к строгому режиму потребуется немного больше работы.</p>
+
+<p>Цель этой статьи: предоставить для разработчиков руководство по переходу к строгому режиму.</p>
+
+<h2 id="Постепенный_переход">Постепенный переход</h2>
+
+<p>Строгий режим был спроектирован таким образом, чтобы переход к нему можно было сделать постепенно. Каждый файл можно переводить к строгому режиму поодиночке, и даже есть возможность включить строгий режим для каждой функции по отдельности.</p>
+
+<h2 id="Различия_non-strict_и_strict_режимов">Различия non-strict и strict режимов</h2>
+
+<h3 id="Синтаксические_ошибки">Синтаксические ошибки</h3>
+
+<p>При добавлении <code>"use strict";</code> следующие случаи вызывают {{jsxref("SyntaxError")}} до выполнения скрипта:</p>
+
+<ul>
+ <li>Восьмеричное представление числа <code>var n = 023;</code></li>
+ <li>Использование оператора <code>{{jsxref('Statements/with', 'with')}}</code></li>
+ <li>Использование <code>{{jsxref('Operators/delete', 'delete')}}</code> на имени переменной <code>delete myVariable;</code></li>
+ <li>Использование <code>{{jsxref('Global_Objects/eval', 'eval')}}</code> или <code>{{jsxref('Functions/arguments', 'arguments')}}</code> как переменную или аргумент функции</li>
+ <li>Использование одного из новых {{jsxref('Lexical_grammar', 'зарезервированных ключевых слов', 'Ключевые_слова')}} (зарезервированных для ECMAScript 6): <code>implements</code>, <code>interface</code>, <code>let</code>, <code>package</code>, <code>private</code>, <code>protected</code>, <code>public</code>, <code>static</code>, и <code>yield</code></li>
+ <li>Объявление функций в блоках <code>if (a &lt; b) { function f() {} }</code></li>
+ <li>Очевидные ошибки
+ <ul>
+ <li>Объявление дважды свойства с одним и тем же именем в литерале объекта <code>{a: 1, b: 3, a: 7}</code>. Это уже изменилось в ECMAScript 6 ({{bug(1041128)}}).</li>
+ <li>Объявление нескольких аргументов функции с одним и тем же именем <code>function f(a, b, b) {}</code></li>
+ </ul>
+ </li>
+</ul>
+
+<p>Эти ошибки хороши тем, что обличают скользкие, едва уловимые ошибки и плохие практики написания кода.</p>
+
+<h3 id="Новые_ошибки_времени_выполнения_runtime_errors">Новые ошибки времени выполнения (runtime errors)</h3>
+
+<p>Ранее JavaScript не показывал никаких ошибок и предупреждений в некоторых случаях выполнения некорректного кода. Строгий режим выбрасывает исключения в таких случаях. Если в вашем коде есть такие случаи, тестирование будет необходимо, чтобы убедиться, что ничего не сломалось после перехода к строгому режиму. Ещё раз это может случится на уровне детализации функции.</p>
+
+<h4 id="Установка_значения_необъявленной_переменной">Установка значения необъявленной переменной</h4>
+
+<pre class="brush: js">function f(x) {
+ "use strict";
+ var a = 12;
+ b = a + x * 35; // error!
+}
+f(42);
+</pre>
+
+<p>Здесь изменяется значение глобального объекта, что редко является ожидаемым эффектом. Если вы действительно хотите изменить значение глобального объекта, передайте его в качестве аргумента функции и явно присвойте его как свойство:</p>
+
+<pre class="brush: js">var global = this; // в верхнем контексте "this" всегда
+ // ссылается на глобальный объект
+function f(x) {
+ "use strict";
+ var a = 12;
+ global.b = a + x * 35;
+}
+f(42);
+</pre>
+
+<h4 id="Попытка_удалить_неконфигурируемое_свойство">Попытка удалить неконфигурируемое свойство</h4>
+
+<pre class="brush: js">"use strict";
+delete Object.prototype; // error!
+</pre>
+
+<p>В нестрогом режиме этот код может молчаливо выполниться неудачей и ничего не сделать, вопреки ожиданиям.</p>
+
+<h4 id="Отравленные_аргументы_arguments_и_свойства_функции">Отравленные аргументы (arguments) и свойства функции</h4>
+
+<p>Обращение к <code>arguments.callee</code>, <code>arguments.caller</code>, <code>anyFunction.caller</code>, или <code>anyFunction.arguments</code> выбросит исключение в строгом режиме. Единственный законный способ повторного использования функции как в:</p>
+
+<pre class="brush: js">// Пример взят из vanillajs: http://vanilla-js.com/
+var s = document.getElementById('thing').style;
+s.opacity = 1;
+(function() {
+ if((s.opacity-=.1) &lt; 0)
+ s.display = "none";
+ else
+ setTimeout(arguments.callee, 40);
+})();</pre>
+
+<p>может быть переписан как:</p>
+
+<pre class="brush: js">"use strict";
+var s = document.getElementById('thing').style;
+s.opacity = 1;
+(function fadeOut() { // имя функции
+ if((s.opacity-=.1) &lt; 0)
+ s.display = "none";
+ else
+ setTimeout(fadeOut, 40); // используется имя функции
+})();</pre>
+
+<h3 id="Семантические_различия">Семантические различия</h3>
+
+<p>Эти различия очень тонкие. Вполне возможно, что тесты не поймают этот тип едва уловимых отличий. Вероятно, потребуется тщательная рецензия кода, чтобы удостовериться, что эти различия не влияют на семантику вашего кода. К счастью, этот анализ может быть сделан постепенно, спускаясь вниз к реализации каждой конкретной функции.</p>
+
+<h4 id="this_в_вызовах_функции"><code>this</code> в вызовах функции</h4>
+
+<p>В функциях как <code>f()</code>, значением <code>this</code> является глобальный объект. В строгом режиме он теперь равен <code>undefined</code>. Когда функция вызывалась с помощью <code>{{jsxref('Global_Objects/Function/call', 'call')}}</code> или <code>{{jsxref('Global_Objects/Function/apply', 'apply')}}</code>, если значением был примитив, он упаковывался в соответствующий объект (или в глобальный объект для <code>undefined</code> и <code>null</code>). В строгом режиме значение передается без каких-либо преобразований и замен.</p>
+
+<h4 id="arguments_не_является_псевдонимом_именованных_аргументов_функции"><code>arguments</code> не является псевдонимом именованных аргументов функции</h4>
+
+<p>В нестрогом режиме изменение значения в объекте <code>arguments</code> изменяло соответствующий именованный аргумент функции. Это усложняло оптимизацию кода для движков JavaScript и сам код становился менее читабельным и понятным. В строгом режиме объект <code>arguments</code> создается и инициализируется с теми же значениями, что и именованные аргументы, но изменения объекта arguments или именованных аргументов теперь никак не влияют друг на друга.</p>
+
+<h4 id="Изменения_в_eval">Изменения в <code>eval</code></h4>
+
+<p>В строгом режиме eval не создает новой переменной в той области видимости, где был вызван. Также, конечно, в строгом режиме, строка выполняется с правилами строгого режима. Потребуется провести тщательное тестирование, чтобы убедиться, что ничего не сломалось. Не использовать eval, если он вам действительно не нужен, может быть другим прагматичным решением.</p>
+
+<h2 id="Строго-нейтральный_код">Строго-нейтральный код</h2>
+
+<p>Потенциальный "недостаток" перевода кода в строгий режим - это отличия в семантике старых браузеров, в которых он не реализован. В некоторых редких случаях (как при неудачной конкатенации и минификации) ваш код может не запускаться в режиме, в котором вы его писали и тестировали. Здесь несколько правил, как сделать ваш код строго-нейтральным (strictness-neutral):</p>
+
+<ol>
+ <li>Пишите ваш код в строгом режиме и убедитесь в отсутствии ошибок только строго режима (из секции выше "Новые ошибки времени выполнения").</li>
+ <li>Держитесь подальше от семантических различий:
+ <ol>
+ <li><code>eval</code>: используйте только тогда, когда вы знаете что делаете</li>
+ <li><code>arguments</code>: всегда обращайтесь к аргументам функции через их имя или сделайте копию объекта arguments, используя:<br>
+ <code>var args = Array.prototype.slice.call(arguments)</code><br>
+ в самой первой строчке вашей функции</li>
+ <li><code>this</code>: используйте <code>this</code> только тогда, когда он ссылается на объект, созданный вами.</li>
+ </ol>
+ </li>
+</ol>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref('Strict_mode', 'Строгий режим')}}</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/template_strings/index.html b/files/ru/web/javascript/reference/template_strings/index.html
new file mode 100644
index 0000000000..d8b4b9a442
--- /dev/null
+++ b/files/ru/web/javascript/reference/template_strings/index.html
@@ -0,0 +1,243 @@
+---
+title: Шаблонные строки
+slug: Web/JavaScript/Reference/template_strings
+tags:
+ - ECMAScript6
+ - JavaScript
+ - Строки
+ - Шаблонные строки
+ - Экспериментальный
+translation_of: Web/JavaScript/Reference/Template_literals
+---
+<div>{{JsSidebar("More")}}</div>
+
+<div>Шаблонными литералами называются строковые литералы, допускающие использование выражений внутри. С ними вы можете использовать многострочные литералы и строковую интерполяцию. В спецификациях до ES2015 они назывались "шаблонными строками".</div>
+
+<h2 id="Syntax" name="Syntax">Синтаксис</h2>
+
+<pre class="syntaxbox">`строка текста`
+
+`строка текста 1
+ строка текста 2`
+
+`строка текста ${выражение} строка текста`
+
+tag `строка текста ${выражение} строка текста`
+</pre>
+
+<h2 id="Description" name="Description">Описание</h2>
+
+<p>Шаблонные литералы заключены в обратные кавычки (` `) вместо двойных или одинарных. Они могут содержать подстановки, обозначаемые знаком доллара и фигурными скобками (<code>${выражение}</code>). Выражения в подстановках и текст между ними передаются в функцию. По умолчанию функция просто объединяет все части в строку. Если перед строкой есть выражение (здесь это <code>tag</code>), то шаблонная строка называется "теговым шаблоном". В этом случае, теговое выражение (обычно функция) вызывается с обработанным шаблонным литералом, который вы можете изменить перед выводом. Для экранирования обратной кавычки в шаблонных литералах указывается обратный слэш <strong>\</strong>.</p>
+
+<pre class="brush: js">`\`` === '`' // --&gt; true</pre>
+
+<h3 id="Многострочные_литералы">Многострочные литералы</h3>
+
+<p>Символы новой строки являются частью шаблонных литералов. Используя обычные строки, вставка переноса потребовала бы следующего синтаксиса:</p>
+
+<pre class="brush: js">console.log('string text line 1\n' +
+'string text line 2');
+// "string text line 1
+// string text line 2"</pre>
+
+<p>То же с использованием шаблонных литералов:</p>
+
+<pre class="brush: js">console.log(`string text line 1
+string text line 2`);
+// "string text line 1
+// string text line 2"</pre>
+
+<h3 id="Интерполяция_выражений">Интерполяция выражений</h3>
+
+<p>Для вставки выражений в обычные строки вам пришлось бы использовать следующий синтаксис:</p>
+
+<pre class="brush: js">var a = 5;
+var b = 10;
+console.log('Fifteen is ' + (a + b) + ' and not ' + (2 * a + b) + '.');
+// "Fifteen is 15 and not 20."</pre>
+
+<p>Теперь, при помощи шаблонных литералов, вам доступен "синтаксический сахар", делающий подстановки вроде той более читабельными:</p>
+
+<pre class="brush: js">var a = 5;
+var b = 10;
+console.log(`Fifteen is ${a + b} and not ${2 * a + b}.`);
+// "Fifteen is 15 and not 20."</pre>
+
+<h3 id="Вложенные_шаблоны">Вложенные шаблоны</h3>
+
+<p>Временами, вложить шаблон — это кратчайший и, возможно, более читабельный способ составить строку. Просто поместите внутрь шаблона с обратными кавычками ещё одни, обернув их в подстановку <code>${ }</code>. Например, если выражение истинно, можно вернуть шаблонный литерал.</p>
+
+<p>В ES5:</p>
+
+<pre class="brush: js">var classes = 'header'
+classes += (isLargeScreen() ?
+ '' : item.isCollapsed ?
+ ' icon-expander' : ' icon-collapser');</pre>
+
+<p>В ES2015 с шаблонными литералами без вложения:</p>
+
+<pre class="brush: js">const classes = `header ${ isLargeScreen() ? '' :
+ (item.isCollapsed ? 'icon-expander' : 'icon-collapser') }`;
+</pre>
+
+<p>В ES2015 с вложенными шаблонными литералами:</p>
+
+<pre class="brush: js">const classes = `header ${ isLargeScreen() ? '' :
+`icon-${item.isCollapsed ? 'expander' : 'collapser'}` }`;
+</pre>
+
+<h3 id="Теговые_шаблоны">Теговые шаблоны</h3>
+
+<p>Расширенной формой шаблонных литералов являются <em>теговые</em> шаблоны. Они позволяют разбирать шаблонные литералы с помощью функции. Первый аргумент такой функции содержит массив строковых значений, а остальные содержат выражения из подстановок. В итоге, функция должна вернуть собранную строку (или что-либо совсем иное, как будет показано далее). Имя функции может быть любым.</p>
+
+<pre class="brush: js">var person = 'Mike';
+var age = 28;
+
+function myTag(strings, personExp, ageExp) {
+ var str0 = strings[0]; // "That "
+ var str1 = strings[1]; // " is a "
+
+ // Технически, в конце итогового выражения
+ // (в нашем примере) есть ещё одна строка,
+ // но она пустая (""), так что пропустим её.
+ // var str2 = strings[2];
+
+ var ageStr;
+ if (ageExp &gt; 99){
+ ageStr = 'centenarian';
+ } else {
+ ageStr = 'youngster';
+ }
+
+ // Мы даже можем вернуть строку, построенную другим шаблонным литералом
+ return `${str0}${personExp}${str1}${ageStr}`;
+}
+
+var output = myTag`That ${ person } is a ${ age }`;
+
+console.log(output);
+// That Mike is a youngster</pre>
+
+<p>Функция тега не обязана возвращать строку, как показано в примере ниже:</p>
+
+<pre class="brush: js">function template(strings, ...keys) {
+ return (function(...values) {
+ var dict = values[values.length - 1] || {};
+ var result = [strings[0]];
+ keys.forEach(function(key, i) {
+ var value = Number.isInteger(key) ? values[key] : dict[key];
+ result.push(value, strings[i + 1]);
+ });
+ return result.join('');
+ });
+}
+
+var t1Closure = template`${0}${1}${0}!`;
+t1Closure('Y', 'A'); // "YAY!"
+var t2Closure = template`${0} ${'foo'}!`;
+t2Closure('Hello', {foo: 'World'}); // "Hello World!"
+</pre>
+
+<h3 id="Сырые_строки">Сырые строки</h3>
+
+<p>Специальное свойство <code>raw</code>, доступное для первого аргумента тегового шаблона, позволяет получить строку в том виде, в каком она была введена, без <a href="/ru/docs/Web/JavaScript/Guide/Grammar_and_types#Использование_специальных_символов_в_строках">экранирования</a>.</p>
+
+<pre class="brush: js">function tag(strings) {
+ return strings.raw[0];
+}
+
+tag`string text line 1 \\n string text line 2`;
+// выводит "string text line 1 \\n string text line 2",
+// включая 'n' и два символа '\'
+</pre>
+
+<p>Вдобавок, существует метод {{jsxref('String.raw()')}}, возвращающий точно такую же исходную строку, какую вернула бы функция шаблона по умолчанию и строковая конкатенация вместе.</p>
+
+<pre class="brush: js">var str = String.raw`Hi\n${2+3}!`;
+// "Hi\n5!"
+
+str.length;
+// 6
+
+str.split('').join(',');
+// "H,i,\,n,5,!"</pre>
+
+<h3 id="Теговые_шаблоны_и_экранирование_символов">Теговые шаблоны и экранирование символов</h3>
+
+<h4 id="Поведение_в_ES2016">Поведение в ES2016</h4>
+
+<p>В ECMAScript 2016 теговые шаблоны следуют правилам экранирования следующих символов:</p>
+
+<ul>
+ <li>символы Unicode, начинающиеся с "\u", например, <code>\u00A9</code></li>
+ <li>точки кода Unicode, начинающиеся с "\u{}", например, <code>\u{2F804}</code></li>
+ <li>шестнадцатеричные представления символов, начинающиеся с "\x", например, <code>\xA9</code></li>
+ <li>восьмеричные представления символов, начинающиеся с "\", например, <code>\251</code>​​​​​​</li>
+</ul>
+
+<p>Отсюда вытекает проблема теговых шаблонов: следуя грамматике ECMAScript, анализатор кода, найдя символ <code>\</code>, будет искать корректное представление символа Unicode, но может не найти его вовсе. Пример ниже показывает это:</p>
+
+<pre class="brush: js">latex`\unicode`
+// В старых версиях ECMAScript (ES2016 и раньше) выкинет исключение:
+// SyntaxError: malformed Unicode character escape sequence</pre>
+
+<h4 id="Поведение_в_ES2018">Поведение в ES2018</h4>
+
+<p>Теговые шаблоны должны позволять встраивать языки (например, <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA">DSLs</a> или <a href="https://ru.wikipedia.org/wiki/LaTeX">LaTeX</a>), в которых широко используются многие другие экранирования. Предложение <a href="https://tc39.github.io/proposal-template-literal-revision/">Редакция шаблонных литералов</a> (уровень 4, одобренный к добавлению в стандарт ECMAScript 2018) устраняет синтаксические ограничения экранирования теговых шаблонов в ECMAScript.</p>
+
+<p>Однако, некорректное экранирование символов по-прежнему нужно отображать в "приготовленном" отображении. Оно показывается в виде {{jsxref("undefined")}} в "приготовленном" массиве:</p>
+
+<pre class="brush: js">function latex(str) {
+ return { "cooked": str[0], "raw": str.raw[0] }
+}
+
+latex`\unicode`
+
+// { cooked: undefined, raw: "\unicode" }</pre>
+
+<p>Заметьте, что ограничение на экранирование символов проявляется лишь в <em>теговых</em> шаблонах, и не проявляется в <em>нетеговых</em> шаблонных литералах:</p>
+
+<pre class="brush: js example-bad">let bad = `bad escape sequence: \unicode`;</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-template-literals', 'Template Literals')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Изначальное определение. Определено в секциях <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-template-literals">Template Literals</a>, <a href="http://www.ecma-international.org/ecma-262/6.0/#sec-tagged-templates">Tagged Templates</a></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-template-literals', 'Template Literals')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Определено в секциях <a href="https://tc39.github.io/ecma262/#sec-template-literals">Template Literals</a>, <a href="https://tc39.github.io/ecma262/#sec-tagged-templates">Tagged Templates</a></td>
+ </tr>
+ <tr>
+ <td><a href="https://tc39.github.io/proposal-template-literal-revision/">Template Literal Revision</a></td>
+ <td>Черновик 4-го уровня</td>
+ <td>Устранено ограничение экранирования в теговых шаблонах</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div class="hidden">Таблица совместимости на этой странице сгенерирована из автоматически получаемых данных. Если вы хотите внести свои данные, пожалуйста перейдите на <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> и отправьте нам пул-реквест.</div>
+
+<p>{{Compat("javascript.grammar.template_literals")}}</p>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>{{jsxref("String")}}</li>
+ <li>{{jsxref("String.raw()")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Лексическая грамматика</a></li>
+ <li><a href="https://gist.github.com/WebReflection/8f227532143e63649804">Подобные шаблонам строки в ES3-совместимом синтаксисе</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/05/es6-in-depth-template-strings-2/">ES6 в деталях: шаблонные строки</a></li>
+</ul>
diff --git a/files/ru/web/javascript/reference/trailing_commas/index.html b/files/ru/web/javascript/reference/trailing_commas/index.html
new file mode 100644
index 0000000000..9cbe5ae9ea
--- /dev/null
+++ b/files/ru/web/javascript/reference/trailing_commas/index.html
@@ -0,0 +1,183 @@
+---
+title: Висящие запятые
+slug: Web/JavaScript/Reference/Trailing_commas
+tags:
+ - ECMAScript2017
+ - ECMAScript5
+ - Висящая запятая
+ - Запятая
+ - Синтаксис
+translation_of: Web/JavaScript/Reference/Trailing_commas
+---
+<div>{{JsSidebar("More")}}</div>
+
+<p><strong>Висящие запятые</strong> (или "последние запятые") могут быть полезны при добавлении новых элементов, параметров или свойств в код JavaScript. Если вы хотите добавить новое свойство, вы просто добавляете новую строчку без изменения предыдущей, если в ней уже использована висящая запятая. Это делает различия в контроле версий чище и изменение кода может быть менее хлопотным.</p>
+
+<p>JavaScript с самого начала допускает использовать висящих запятых в литералах массива, а затем добавлял их в литералы объекта (ECMAScript 5) и, совсем недавно (ECMAScript 2017), к параметрам функций.</p>
+
+<p>{{Glossary("JSON")}}, однако, не допускает висящих запятых.</p>
+
+<h2 id="Висящие_запятые_в_литералах">Висящие запятые в литералах</h2>
+
+<h3 id="Массивы">Массивы</h3>
+
+<p>JavaScript игнорирует висящие запятые в массивах:</p>
+
+<pre class="brush: js">var arr = [
+ 1,
+ 2,
+ 3,
+];
+
+arr; // [1, 2, 3]
+arr.length; // 3</pre>
+
+<p>Если использовано больше одной висящей запятой, будут созданы "дырки". Массив с "дырками" называется <em>разреженным </em>(<em>плотный </em>массив не имеет "дырок"). При итерации массива при помощи, например, {{jsxref("Array.prototype.forEach()")}} или {{jsxref("Array.prototype.map()")}}, "дырки" будут пропущены.</p>
+
+<pre class="brush: js">var arr = [1, 2, 3,,,];
+arr.length; // 5
+</pre>
+
+<h3 id="Объекты">Объекты</h3>
+
+<p>Начиная с ECMAScript 5, висящие запятые в объектак также допустимы:</p>
+
+<pre class="brush: js">var object = {
+ foo: "bar",
+ baz: "qwerty",
+ age: 42,
+};</pre>
+
+<h2 id="Висящие_запятые_в_функциях">Висящие запятые в функциях</h2>
+
+<p>ECMAScript 2017 допускает висящие запятые в списке параметров функции.</p>
+
+<h3 id="Определение_параметров">Определение параметров</h3>
+
+<p>Следующие определения параметров функций допустимы и равнозначны друг другу. Висящие запятые не влияют на свойство <code>length</code> функции или их объект <code>arguments</code>.</p>
+
+<pre class="brush: js">function f(p) {}
+function f(p,) {}
+
+(p) =&gt; {};
+(p,) =&gt; {};
+</pre>
+
+<p>Висящая запятая также работает с <a href="/ru/docs/Web/JavaScript/Reference/Functions/Определиние_методов">определением методов</a> для классов или объектов:</p>
+
+<pre class="brush: js">class C {
+ one(a,) {},
+ two(a, b,) {},
+}
+
+var obj = {
+ one(a,) {},
+ two(a, b,) {},
+};
+</pre>
+
+<h3 id="Вызов_функци">Вызов функци</h3>
+
+<p>Следующие вызововы функций допустимы и равнозначны друг другу.</p>
+
+<pre class="brush: js">f(p);
+f(p,);
+
+Math.max(10, 20);
+Math.max(10, 20,);
+</pre>
+
+<h3 id="Недопустимые_висящие_запятые">Недопустимые висящие запятые</h3>
+
+<p>Определение параметров функции или вызов функции, содержащих только запятую будет генерировать {{Jsxref("SyntaxError")}}. Кроме того, при использовании <a href="/ru/docs/Web/JavaScript/Reference/Functions/Rest_parameters">оставшихся параметров</a> не допускается использовать висящие запятые:</p>
+
+<pre class="brush: js example-bad">function f(,) {} // SyntaxError: missing formal parameter
+(,) =&gt; {}; // SyntaxError: expected expression, got ','
+f(,) // SyntaxError: expected expression, got ','
+
+function f(...p,) {} // SyntaxError: parameter after rest parameter
+(...p,) =&gt; {} // SyntaxError: expected closing parenthesis, got ','
+</pre>
+
+<h2 id="Висящие_запятые_в_деструктурировании">Висящие запятые в деструктурировании</h2>
+
+<p>Висящие запятые так же можно использовать слева при использовании <a href="/ru/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">деструктурирующего присваивания</a>:</p>
+
+<pre class="brush: js">// массив деструктурируется с висящей запятой
+[a, b,] = [1, 2];
+
+// объект деструктурируется с висящей запятой
+var o = {
+ p: 42,
+ q: true,
+};
+var {p, q,} = o;
+</pre>
+
+<p>Ещё раз, при использовании оставшихся параметров будет сгенерирована {{jsxref("SyntaxError")}}:</p>
+
+<pre class="brush: js example-bad">var [a, ...b,] = [1, 2, 3];
+// SyntaxError: rest element may not have a trailing comma</pre>
+
+<h2 id="Висящие_запятые_в_JSON">Висящие запятые в JSON</h2>
+
+<p>Висящие запятые в объекте допустимы только в ECMAScript 5. Так как JSON основан на синтаксисе JavaScript старше, чем ES5, <strong>висящие запятые недопускаются в JSON</strong>.</p>
+
+<p>Обе строки генерируют <code>SyntaxError</code>:</p>
+
+<pre class="brush: js example-bad">JSON.parse('[1, 2, 3, 4, ]');
+JSON.parse('{"foo" : 1, }');
+// SyntaxError JSON.parse: unexpected character
+// at line 1 column 14 of the JSON data
+</pre>
+
+<p>Опустите висящие запятые, чтобы правильно проанализировать JSON:</p>
+
+<pre class="brush: js example-good">JSON.parse('[1, 2, 3, 4 ]');
+JSON.parse('{"foo" : 1 }');</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Комментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Добавлены висящие запятые в объекты.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Без изменений.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2017')}}</td>
+ <td>{{Spec2('ES2017')}}</td>
+ <td>Добавлены висящие запятые в список параметров функций и их вызов.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.grammar.trailing_commas")}}</p>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li>Initial ECMAScript proposal: <a href="https://github.com/tc39/proposal-trailing-function-commas">trailing function commas</a> by Jeff Morrison</li>
+</ul>
diff --git a/files/ru/web/javascript/reference/об/index.html b/files/ru/web/javascript/reference/об/index.html
new file mode 100644
index 0000000000..bbb30f131d
--- /dev/null
+++ b/files/ru/web/javascript/reference/об/index.html
@@ -0,0 +1,50 @@
+---
+title: Об этой справке
+slug: Web/JavaScript/Reference/Об
+translation_of: Web/JavaScript/Reference/About
+---
+<div>{{JsSidebar}}</div>
+
+<p>The JavaScript reference serves as a repository of facts about the JavaScript language. The entire language is described here in detail. As you write JavaScript code, you'll refer to these pages often (thus the title "JavaScript reference"). If you're learning JavaScript, or need help understanding some of its capabilities or features, check out the <a href="/en-US/docs/Web/JavaScript/Guide">JavaScript guide</a>.</p>
+
+<p>The JavaScript language is intended to be used within some larger environment, be it a browser, server-side scripts, or similar. For the most part, this reference attempts to be environment-agnostic and does not target a web browser environment.</p>
+
+<h2 id="Where_to_find_JavaScript_information">Where to find JavaScript information</h2>
+
+<p>JavaScript documentation of core language features (pure <a href="/en-US/docs/Web/JavaScript/Language_Resources">ECMAScript</a>, for the most part) includes the following:</p>
+
+<ul>
+ <li>The <a href="/en-US/docs/Web/JavaScript/Guide">JavaScript guide</a></li>
+ <li>The <a href="/en-US/docs/Web/JavaScript/Reference">JavaScript reference</a></li>
+</ul>
+
+<p>If you are new to JavaScript, start with the <a href="/en-US/docs/Web/JavaScript/Guide">guide</a>. Once you have a firm grasp of the fundamentals, you can use the <a href="/en-US/docs/Web/JavaScript/Reference">reference</a> to get more details on individual objects and language constructs.</p>
+
+<h2 id="Structure_of_the_reference">Structure of the reference</h2>
+
+<p>In the JavaScript reference you can find the following chapters:</p>
+
+<dl>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects">Standard built-in objects</a></dt>
+ <dd>This chapter documents all the JavaScript standard built-in objects, along with their methods and properties.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Statements">Statements and declarations</a></dt>
+ <dd>JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Operators">Expressions and operators</a></dt>
+ <dd>This chapter documents all the JavaScript language operators, expressions and keywords.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Functions</a></dt>
+ <dd>Chapter about JavaScript functions.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></dt>
+ <dd>Chapter about JavaScript classes introduced in ECMAScript 6.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Errors">Errors</a></dt>
+ <dd>Chapter about specific errors, exceptions and warnings thrown by JavaScript.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/New_in_JavaScript">New in JavaScript</a></dt>
+ <dd>Chapter about JavaScript version history.</dd>
+</dl>
+
+<h3 id="More_reference_pages">More reference pages</h3>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">Deprecated and obsolete features</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Data_structures">Data types and data structures</a></li>
+</ul>
diff --git a/files/ru/web/javascript/typed_arrays/index.html b/files/ru/web/javascript/typed_arrays/index.html
new file mode 100644
index 0000000000..99be4f3d6a
--- /dev/null
+++ b/files/ru/web/javascript/typed_arrays/index.html
@@ -0,0 +1,219 @@
+---
+title: Типизированные массивы JavaScript
+slug: Web/JavaScript/Typed_arrays
+translation_of: Web/JavaScript/Typed_arrays
+---
+<div>{{JsSidebar("Advanced")}}</div>
+
+<p>Типизированные массивы в JavaScript являются массиво-подобными объектами, предоставляющими механизм доступа к сырым двоичным данным. Как вы уже можете знать, массив {{jsxref("Array")}} растет и обрезается динамически, и может содержать элементы любого типа JavaScript. Благодаря оптимизациям JavaScript движков, массивы остаются быстрыми. Однако, со временем, веб-приложения становятся все более и более мощными, появляется необходимость работы с аудио- и видео-данными, требуется доступ к сырым данным WebSocket`ов, и так далее. Становится очевидным, что возможность быстрой и эффективной работы с двоичными данными в JavaScript будет очень полезной, для чего типизированные массивы и предназначены.</p>
+
+<p>Не следует путать типизированные массивы с обычными массивами: так, например, вызов {{jsxref("Array.isArray()")}} для типизированного массива вернет <code>false</code>. Более того, не все методы, доступные для обычных массивов поддерживаются типизированными массивами (например, push и pop).</p>
+
+<h2 id="Буферы_и_представления_архитектура_типизированных_массивов">Буферы и представления: архитектура типизированных массивов</h2>
+
+<p>Для достижения максимальной гибкости и производительности, реализация типизированных массивов в JavaScript разделена на <strong>буферы</strong> и <strong>представления</strong>. Буфер (<a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" title='Объект ArrayBuffer используется для работы с бинарными данными. Он представляет собой ссылку на поток "сырых" двоичных данных, однако работать с ними напрямую возможности не дает. Вместо этого, вы можете создать типизированный массив или объект DataView, который можно использовать для чтения и записи данных в ArrayBuffer.'><code>ArrayBuffer</code></a>) –– это объект, представляющий из себя набор данных. Он не имеет формата и не предоставляет возможности доступа к своему содержимому. Для доступа к памяти буфера вам нужно использовать представление. Представление предоставляет контекст: тип данных, начальную позицию в буфере и количество элементов. Это позволяет представить данные в виде типизированного массива.</p>
+
+<p><img alt="Typed arrays in an ArrayBuffer" src="https://mdn.mozillademos.org/files/8629/typed_arrays.png" style="height: 278px; width: 666px;"></p>
+
+<h3 id="ArrayBuffer">ArrayBuffer</h3>
+
+<p>Объект <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" title='Объект ArrayBuffer используется для работы с бинарными данными. Он представляет собой ссылку на поток "сырых" двоичных данных, однако работать с ними напрямую возможности не дает. Вместо этого, вы можете создать типизированный массив или объект DataView, который можно использовать для чтения и записи данных в ArrayBuffer.'><code>ArrayBuffer</code></a> –– это набор бинарных данных с фиксированной длинной. Вы не можете манипулировать содержимым <code>ArrayBuffer</code> напрямую. Вместо этого, необходимо создать типизированное представление <a href="/ru/docs/Web/JavaScript/Reference/DataView" title="Документация об этом ещё не написана; пожалуйста, поспособствуйте её написанию!"><code>DataView</code></a>, которое будет отображать буфер в определенном формате, и даст доступ на запись и чтение его содержимого.</p>
+
+<h3 id="Типизированные_представления">Типизированные представления</h3>
+
+<p>Название типизированного представления массива говорит само за себя. Оно представляет массив в распространенных числовых форматах, таких как  <code>Int8</code>, <code>Uint32</code>, <code>Float64</code> и так далее. Среди прочих, существует специальное представление <code>Uint8ClampedArray</code>. Оно ограничивает значения интервалом от 0 до 255. Это полезно, например, при <a href="/ru/docs/Web/API/ImageData">Обработке данных изображения в Canvas</a>.</p>
+
+<p>{{page("/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray", "Объект TypedArray")}}</p>
+
+<h3 id="DataView">DataView</h3>
+
+<p>Объект {{jsxref("DataView")}} –– это низкоуровневый интерфейс, предоставляющий API для записи/чтения произвольных данных в буфер. Это полезно при работе с различными типами данных, например. В то время как типизированные представления всегда имеют порядок байт (смотрите {{Glossary("Endianness")}}) соответствующий используемому в вашей операционной системе, <code>DataView</code> позволяет контроллировать порядок байт (byte-order). По умолчанию это big-endian, но через API можно установить little-endian.</p>
+
+<h2 id="Веб_API_использующие_типизированные_массивы">Веб API, использующие типизированные массивы</h2>
+
+<dl>
+ <dt><a href="/ru/docs/Web/API/FileReader#readAsArrayBuffer()" title="/ru/docs/Web/API/FileReader#readAsArrayBuffer()"><code>FileReader.prototype.readAsArrayBuffer()</code></a></dt>
+ <dd>Метод <code>FileReader.prototype.readAsArrayBuffer()</code> читает содержимое заданного <a href="/ru/docs/Web/API/Blob" title="/ru/docs/DOM/Blob"><code>Blob</code></a> или <a href="/ru/docs/Web/API/File" title="/ru/docs/DOM/File"><code>File</code></a>.</dd>
+ <dt><a href="/ru/docs/Web/API/XMLHttpRequest#send()" title="/ru/docs/Web/API/XMLHttpRequest#send()"><code>XMLHttpRequest.prototype.send()</code></a></dt>
+ <dd>Метод <code>send()</code> экземпляра <code>XMLHttpRequest</code> теперь поддерживает в качестве аргумента {{jsxref("ArrayBuffer")}}.</dd>
+ <dt><code><a href="https://developer.mozilla.org/ru/docs/Web/API/ImageData">ImageData.data</a></code></dt>
+ <dd>Имеет тип {{jsxref("Uint8ClampedArray")}} и представляет изображение в виде одномерного массива, где цветовые компоненты расположены в порядке RGBA, и их значения принудительно ограничены диапазоном от 0 до 255.</dd>
+</dl>
+
+<h2 id="Примеры">Примеры</h2>
+
+<h3 id="Использование_представлений_с_буферами">Использование представлений с буферами</h3>
+
+<p>Прежде всего, необходимо создать буфер с фиксированной длиной 16 байт:</p>
+
+<pre class="brush:js">var buffer = new ArrayBuffer(16);
+</pre>
+
+<p>На данном этапе мы имеем область памяти в 16 байт, инициализированной нулевыми значениями. Всё, что мы можем сделать сейчас, это убедиться, что длина буфера действительно 16 байт:</p>
+
+<pre class="brush:js">if (buffer.byteLength === 16) {
+ console.log("Да, это 16 байт.");
+} else {
+ console.log("О нет, размер не наш!");
+}
+</pre>
+
+<p>Прежде чем мы сможем приступить к полноценной работе с памятью, нам нужно создать представление. Давайте создадим представление, которое отображает буфер как массив из 32-битных целочисленных значений со знаком:</p>
+
+<pre class="brush:js">var int32View = new Int32Array(buffer);
+</pre>
+
+<p>Теперь мы можем получить доступ к элементам представления как к элементам обычного массива:</p>
+
+<pre class="brush:js">for (var i = 0; i &lt; int32View.length; i++) {
+ int32View[i] = i * 2;
+}
+</pre>
+
+<p>Этот код поместит 4 элемента в буфер (4 элемента по 4 байта даст 16 байт) со следующими значениям: <code>0</code>, <code>2</code>, <code>4</code> и <code>6</code>.</p>
+
+<h3 id="Множество_представлений_для_одних_и_тех_же_данных">Множество представлений для одних и тех же данных</h3>
+
+<p>Всё становится намного интереснее, если создать несколько разных представлений для одного и того же буфера. Например, приведенный выше код можно дополнить следующим образом:</p>
+
+<pre class="brush:js">var int16View = new Int16Array(buffer);
+
+for (var i = 0; i &lt; int16View.length; i++) {
+ console.log('Entry ' + i + ': ' + int16View[i]);
+}
+</pre>
+
+<p>Здесь мы создаем 16-битное целочисленное представление, которое ссылается на тот же самый буфер, что и 32-битное представление, и затем выводим все 16-битные элементы этого представления. Мы получим следующий вывод: 0, 0, 2, 0, 4, 0, 6, 0.</p>
+
+<p>Можно пойти дальше. Оцените этот код:</p>
+
+<pre class="brush:js">int16View[0] = 32;
+console.log('Элемент 0 в 32-битном представлении теперь равен ' + int32View[0]);
+</pre>
+
+<p>Результатом выполнения станет текст: "Элемент 0 в 32-битном представлении теперь равен 32". Другими словами, два массива на самом деле являются лишь разными представлениями одного и того же буфера данных в разных форматах. Вы можете повторить это с <a href="/ru/docs/Web/JavaScript/Reference/Global_Objects/TypedArray#TypedArray_objects" title="JavaScript typed arrays/ArrayBufferView#Typed array subclasses">представлениями</a> любого типа.</p>
+
+<h3 id="Работа_со_сложными_структурами_данных">Работа со сложными структурами данных</h3>
+
+<p>Комбинируя буфер и множество представлений разного формата, имеющих разные смещения относильно начала буфера, можно управляться с объектами содержащими разнородные данные. Это позволяет, к примеру, взаимодействовать со сложными структурам из <a href="/ru/docs/Web/WebGL" title="WebGL">WebGL</a>, файлами данных или структурами языка C (<a href="/ru/docs/Mozilla/js-ctypes" title="js-ctypes">сопоставление данных JS и C</a>).</p>
+
+<p>Рассмотрим следующую структуру из языка C:</p>
+
+<pre class="brush:cpp">struct someStruct {
+ unsigned long id;
+ char username[16];
+ float amountDue;
+};</pre>
+
+<p>Получить доступ к полям этой структуры можно следующим образом:</p>
+
+<pre class="brush:js">var buffer = new ArrayBuffer(24);
+
+// ... поместить данные структуры в буфер ...
+
+var idView = new Uint32Array(buffer, 0, 1);
+var usernameView = new Uint8Array(buffer, 4, 16);
+var amountDueView = new Float32Array(buffer, 20, 1);</pre>
+
+<p>Теперь получить или изменить значение поля <code>amountDue</code>, к примеру, можно путем обращения к <code>amountDueView[0]</code>.</p>
+
+<div class="note"><strong>Примечание:</strong> <a href="https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="http://en.wikipedia.org/wiki/Data_structure_alignment">Выравнивание данных</a> в языке C является платформозависимым. Принимайте меры по вычислению правильных отступов в данных с учетом выравнивания.</div>
+
+<h3 id="Преобразование_в_обычные_массивы">Преобразование в обычные массивы</h3>
+
+<p>Иногда после обработки типизированного массива бывает полезно конвертировать его в обычный массив, чтобы получить доступ к методам прототипа {{jsxref("Array")}}. Для этих целей существует метод {{jsxref("Array.from")}}. А в тех случаях, когда <code>Array.from</code> не поддерживается, используйте следующий код:</p>
+
+<pre class="brush:js">var typedArray = new Uint8Array([1, 2, 3, 4]),
+ normalArray = Array.prototype.slice.call(typedArray);
+normalArray.length === 4;
+normalArray.constructor === Array;
+</pre>
+
+<h2 id="Спецификации">Спецификации</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Спецификация</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментарий</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('Typed Array')}}</td>
+ <td>{{Spec2('Typed Array')}}</td>
+ <td>Вытеснено стандартом ECMAScript 2015.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-typedarray-objects', 'TypedArray Objects')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Начальное определение в стандарте ECMA.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-typedarray-objects', 'TypedArray Objects')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>7.0</td>
+ <td>{{ CompatGeckoDesktop("2") }}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>5.1</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Возможность</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Базовая поддержка</td>
+ <td>4.0</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{ CompatGeckoMobile("2") }}</td>
+ <td>10</td>
+ <td>11.6</td>
+ <td>4.2</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="Смотрите_также">Смотрите также</h2>
+
+<ul>
+ <li><a href="/ru/docs/Web/JavaScript/Base64_encoding_and_decoding#Appendix.3A_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer" title="/ru/docs/Web/JavaScript/Base64_encoding_and_decoding#Appendix.3A_Decode_a_Base64_string_to_Uint8Array_or_ArrayBuffer">Получение <code>ArrayBuffer</code>s и типизированных массивов из <em>Base64 кодировки</em></a></li>
+ <li><a href="/ru/docs/Code_snippets/StringView" title="/ru/docs/Web/JavaScript/Typed_arrays/StringView"><code>StringView</code> – библиотека для работы со строками в стиле языка С, основанная на типизированных массивах</a></li>
+ <li><a href="https://hacks.mozilla.org/2011/12/faster-canvas-pixel-manipulation-with-typed-arrays">Быстрая работа с пикселями Canvas через типизированные массивы</a></li>
+ <li><a href="http://www.html5rocks.com/en/tutorials/webgl/typed_arrays">Типизированные массивы: Двоичные данные в браузере</a></li>
+ <li>{{Glossary("Endianness")}}</li>
+</ul>
diff --git a/files/ru/web/javascript/о_javascript/index.html b/files/ru/web/javascript/о_javascript/index.html
new file mode 100644
index 0000000000..6d3682cf3a
--- /dev/null
+++ b/files/ru/web/javascript/о_javascript/index.html
@@ -0,0 +1,60 @@
+---
+title: О JavaScript
+slug: Web/JavaScript/О_JavaScript
+tags:
+ - Beginner
+ - Introduction
+ - JavaScript
+ - Вступление
+ - Новичку
+translation_of: Web/JavaScript/About_JavaScript
+---
+<p>{{JsSidebar()}}</p>
+
+<h2 id="Что_такое_JavaScript">Что такое JavaScript?</h2>
+
+<p><strong>JavaScript</strong><sup>®</sup> (часто сокращают до <strong>JS</strong>) — это лёгкий, интерпретируемый, объектно-ориентированный язык с <a href="https://en.wikipedia.org/wiki/First-class_functions" title="https://en.wikipedia.org/wiki/First-class_functions">функциями первого класса</a>, самый известный скриптовый язык для веб-страниц, но также<a href="https://en.wikipedia.org/wiki/JavaScript#Uses_outside_web_pages"> используется во многих не браузерных окружениях.</a> <a href="https://en.wikipedia.org/wiki/Prototype-based_programming" title="Prototype-based">Прототипно-ориентированный</a>, мультипарадигменный язык сценариев, который поддерживает динамический, объектно-ориентированный, императивный и функциональный стили программирования.</p>
+
+<p>JavaScript запускается на стороне клиента Интернета, который может использоваться для создания/программирования того, как веб-страницы будут вести себя при наступлении каких-либо событий. JavaScript легко изучить, а также это мощный скриптовый язык, широко используемый для контролирования поведения веб-страниц.</p>
+
+<p>Вопреки распространенному мнению, <strong>JavaScript <em>не</em> является "интерпретируемым Java"</strong>. В двух словах, JavaScript — это динамический скриптовый язык, поддерживающий <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Class-Based_vs._Prototype-Based_Languages">прототипное</a> создание объектов. Базовый синтаксис намеренно похож на Java и C++, чтобы уменьшить число новых концепций, необходимых для изучения языка. Такие языковые конструкции, как <code>if</code>, <code>for</code>, <code>while</code>, <code>switch</code>, <code>try ... catch</code> похожи на конструкции этих языков.</p>
+
+<p>JavaScript может функционировать и как <a href="https://ru.wikipedia.org/wiki/Процедурное_программирование">процедурный</a>, и как <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript">объектно-ориентированный</a> язык. Объекты можно создавать программно во время выполнения, путем присоединения методов и свойств или пустых объектов <strong>во время выполнения</strong>, в отличие от синтаксических определений классов в компилируемых языках, таких как С++ или Java. После того, как объект был создан, он может быть использован в качестве плана (или прототипа) для создания похожих объектов.</p>
+
+<p>Динамические возможности JavaScript включают: создание объектов во время выполнения, переменное число параметров, динамическое создание скриптов (с помощью <code><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/eval">eval</a></code>), перебор объектов (с помощью <code>for ... in</code>), восстановление исходного кода (программы на JavaScript могут декомпилировать тела функций обратно в исходный код).</p>
+
+<p>Для более глубокого погружения в программирование на JavaScript, используйте ссылки ниже в разделе <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/%D0%9E_JavaScript#Ресурсы_по_JavaScript">Ресурсы по JavaScript</a>.</p>
+
+<h2 id="Какие_реализации_JavaScript_доступны">Какие реализации JavaScript доступны?</h2>
+
+<p>Mozilla предоставляет две реализации JavaScript. <strong>Самая</strong> первая реализация JavaScript была создана Бренданом Эйхом (Brendan Eich) в компании Netscape, и с тех пор обновляется, чтобы соответствовать ECMA-262 Edition 5 и более поздним версиям. Этот движок называется <a href="https://developer.mozilla.org/ru/docs/SpiderMonkey">SpiderMonkey</a> и реализован на языке C/C++. Движок <a href="https://developer.mozilla.org/ru/docs/Rhino">Rhino</a> создан Норрисом Бойдом (Norris Boyd) и реализован на языке Java. Как и SpiderMonkey, Rhino соответствует ECMA-262 Edition 5.</p>
+
+<p>Несколько оптимизаций, таких как TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) и IonMonkey, добавили в SpiderMonkey со временем. Работа всегда продолжается, чтобы улучшить производительность выполнения JavaScript.</p>
+
+<p>Кроме вышеприведенных существуют и другие популярные реализации:</p>
+
+<ul>
+ <li><a href="https://code.google.com/p/v8/">V8</a> от Google, используемый в браузерах Google Chrome и последних версиях Opera. Также используется в <a href="http://nodejs.org/">Node.js</a>.</li>
+ <li><a href="http://www.webkit.org/projects/javascript/index.html">JavaScriptCore</a> (SquirrelFish/Nitro), используемый в WebKit браузерах, например, в Apple Safari.</li>
+ <li><a href="https://dev.opera.com/blog/carakan/">Carakan</a> используется в старых версиях Opera.</li>
+ <li><a href="http://en.wikipedia.org/wiki/Chakra_%28JScript_engine%29">Chakra</a> используется в Internet Explorer (язык, который реализует данный движок, называется JScript, чтобы избежать проблем с авторскими правами).</li>
+</ul>
+
+<p>Каждый движок mozilla.org предоставляет публичный API, который могут использовать разработчики приложений для интеграции JavaScript в своё ПО. Однако, наиболее распространенной средой для JavaScript являются веб-браузеры. Веб-браузеры обычно используют публичный API для создания <strong>объектов среды</strong>, отражающих <a href="http://www.w3.org/DOM/">DOM</a> в JavaScript.</p>
+
+<p>JavaScript также применяется как скриптовый язык на стороне сервера. JavaScript сервер предоставляет объекты среды, представляющие объекты HTTP запросов и ответов, которые могут быть использованы программой на JavaScript для динамической генерации веб-страниц. Популярным примером является <a href="http://nodejs.org/">Node.js</a>.</p>
+
+<h2 id="Ресурсы_по_JavaScript">Ресурсы по JavaScript</h2>
+
+<dl>
+ <dt><a href="https://developer.mozilla.org/ru/docs/SpiderMonkey">SpiderMonkey</a></dt>
+ <dd>SpiderMonkey — это интерпретатор языка JavaScript, написанный на языке C. Информация, относящаяся к реализации движка JavaScript Mozilla на C/C++ (aka SpiderMonkey), включая, как вставлять его в приложения.</dd>
+ <dt><a href="https://developer.mozilla.org/ru/docs/Rhino">Rhino</a></dt>
+ <dd>Информация, относящаяся к реализации JavaScript, написанной на Java (aka Rhino).</dd>
+ <dt><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Language_Resources" title="en-US/docs/JavaScript_Language_Resources">Ресурсы по языку</a></dt>
+ <dd>Ссылки на опубликованные стандарты по JavaScript.</dd>
+ <dt><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/A_re-introduction_to_JavaScript">Повторное введение в JavaScript</a></dt>
+ <dd><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide">Руководство</a> и <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference">справочник </a>по JavaScript.</dd>
+</dl>
+
+<p>JavaScript® - торговая марка или зарегистрированная торговая марка Oracle в США и других странах.</p>